diff options
author | Zdenek Dvorak <ook@ucw.cz> | 2008-03-27 11:25:36 +0100 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-03-27 10:25:36 +0000 |
commit | 724256083eea3833f018ae2c2cc7b00209b788b5 (patch) | |
tree | 560c55a0e9adf79080f4d7db57c4c387d850d3e9 /gcc/testsuite/gcc.dg/tree-ssa/loop-33.c | |
parent | a929bc2878b1b19fc4fb45bcbccf3af79bc8c24a (diff) | |
download | gcc-724256083eea3833f018ae2c2cc7b00209b788b5.zip gcc-724256083eea3833f018ae2c2cc7b00209b788b5.tar.gz gcc-724256083eea3833f018ae2c2cc7b00209b788b5.tar.bz2 |
tree-affine.h (aff_combination_expand): Declare.
2008-03-27 Zdenek Dvorak <ook@ucw.cz>
* tree-affine.h (aff_combination_expand): Declare.
(get_inner_reference_aff): Likewise.
* tree-affine.c (aff_combination_expand): Split out from
tree_to_aff_combination_expand.
(get_inner_reference_aff): New function.
* tree-parloops.c (loop_parallel_p): Free vectorizer info.
* tree-ssa-loop-im.c: Include tree-affine.h and pointer-set.h.
(struct lim_aux_data): sm_done field removed.
(mem_ref_loc_p, mem_ref_locs_p): New types.
(struct mem_ref): Added id, stored, accesses_in_loop,
indep_loop, dep_loop, indep_ref, dep_ref fields.
Removed is_stored, locs and next fields.
(memory_accesses): New variable.
(movement_possibility): Do not allow moving statements
that store to memory.
(outermost_indep_loop, simple_mem_ref_in_stmt, mem_ref_in_stmt):
New functions.
(determine_max_movement): For statements with memory references,
find the outermost loop in that the reference is independent.
(move_computations_stmt): Mark the virtual operands for
renaming.
(memref_free, mem_ref_alloc, mem_ref_locs_alloc, mark_ref_stored,
gather_mem_refs_stmt, gather_mem_refs_in_loops, vtoe_hash, vtoe_eq,
vtoe_free, record_vop_access, get_vop_accesses, get_vop_stores,
add_vop_ref_mapping, create_vop_ref_mapping_loop,
create_vop_ref_mapping, analyze_memory_references,
cannot_overlap_p, mem_refs_may_alias_p, rewrite_mem_ref_loc,
get_all_locs_in_loop, ref_always_accessed_p,
refs_independent_p, record_indep_loop, ref_indep_loop_p_1,
ref_indep_loop_p, can_sm_ref_p, find_refs_for_sm,
store_motion_loop, store_motion): New functions.
(struct vop_to_refs_elt): New type.
(record_mem_ref_loc, free_mem_ref_locs, rewrite_mem_refs,
memref_hash, memref_eq, hoist_memory_references): Rewritten.
(schedule_sm): Replaced by...
(execute_sm): ... this.
(determine_lsm_ref, hoist_memory_references,
loop_suitable_for_sm, gather_mem_refs_stmt, gather_mem_refs,
find_more_ref_vops, free_mem_ref, free_mem_refs,
determine_lsm_loop, determine_lsm): Removed.
(tree_ssa_lim_finalize): Free data structures used by store
motion.
(tree_ssa_lim): Call analyze_memory_references. Use
store_motion instead of determine_lsm.
* gcc.dg/tree-ssa/loop-32.c: New testcase.
* gcc.dg/tree-ssa/loop-33.c: Likewise.
From-SVN: r133637
Diffstat (limited to 'gcc/testsuite/gcc.dg/tree-ssa/loop-33.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/loop-33.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loop-33.c b/gcc/testsuite/gcc.dg/tree-ssa/loop-33.c new file mode 100644 index 0000000..6b9b67f --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/loop-33.c @@ -0,0 +1,40 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-lim-details" } */ + +int x; +int a[100]; + +struct a +{ + int X; + int Y; +}; + +struct a arr[100]; + +void test4(unsigned b) +{ + unsigned i; + + /* And here. */ + for (i = 0; i < 100; i++) + { + arr[b+8].X += i; + arr[b+9].X += i; + } +} + +void test5(struct a *A, unsigned b) +{ + unsigned i; + + /* And here as well. */ + for (i = 0; i < 100; i++) + { + A[b].X += i; + A[b+1].Y += i; + } +} + +/* { dg-final { scan-tree-dump-times "Executing store motion of" 4 "lim" { xfail lp64 } } } */ +/* { dg-final { cleanup-tree-dump "lim" } } */ |