diff options
author | Sebastian Pop <spop@gcc.gnu.org> | 2010-12-02 16:53:16 +0000 |
---|---|---|
committer | Sebastian Pop <spop@gcc.gnu.org> | 2010-12-02 16:53:16 +0000 |
commit | 5e37ea0ef1bb8d9a27e6502a82b7b14f30d6d6b6 (patch) | |
tree | 88b1433f2415d2ff73482de80bdbdb30c4c04d7f /gcc/tree-data-ref.h | |
parent | b2087e8dad076c2482622329023cde67c631edbb (diff) | |
download | gcc-5e37ea0ef1bb8d9a27e6502a82b7b14f30d6d6b6.tar.gz |
Fix PR45199: do not aggregate memory accesses to the same array for -ftree-loop-distribute-patterns
2010-11-30 Sebastian Pop <sebastian.pop@amd.com>
PR tree-optimization/45199
* tree-data-ref.c (mem_write_stride_of_same_size_as_unit_type_p): New.
(stores_zero_from_loop): Call
mem_write_stride_of_same_size_as_unit_type_p.
* tree-data-ref.h (stride_of_unit_type_p): New.
* tree-loop-distribution.c (generate_memset_zero): Simplified.
Call stride_of_unit_type_p.
(build_rdg_partition_for_component): Do not call
rdg_flag_similar_memory_accesses when
flag_tree_loop_distribute_patterns is set.
* gcc.dg/tree-ssa/ldist-15.c: New.
* gcc.dg/tree-ssa/ldist-16.c: New.
* gfortran.dg/ldist-pr45199.f: New.
From-SVN: r167380
Diffstat (limited to 'gcc/tree-data-ref.h')
-rw-r--r-- | gcc/tree-data-ref.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h index 844a2aea3b0..d929f315bf1 100644 --- a/gcc/tree-data-ref.h +++ b/gcc/tree-data-ref.h @@ -603,6 +603,17 @@ void remove_similar_memory_refs (VEC (gimple, heap) **); bool rdg_defs_used_in_other_loops_p (struct graph *, int); bool have_similar_memory_accesses (gimple, gimple); +/* Returns true when STRIDE is equal in absolute value to the size of + the unit type of TYPE. */ + +static inline bool +stride_of_unit_type_p (tree stride, tree type) +{ + return tree_int_cst_equal (fold_unary (ABS_EXPR, TREE_TYPE (stride), + stride), + TYPE_SIZE_UNIT (type)); +} + /* Determines whether RDG vertices V1 and V2 access to similar memory locations, in which case they have to be in the same partition. */ |