aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/tree-ssa/loop-33.c
diff options
context:
space:
mode:
authorZdenek Dvorak <ook@ucw.cz>2008-03-27 11:25:36 +0100
committerRichard Biener <rguenth@gcc.gnu.org>2008-03-27 10:25:36 +0000
commit724256083eea3833f018ae2c2cc7b00209b788b5 (patch)
tree560c55a0e9adf79080f4d7db57c4c387d850d3e9 /gcc/testsuite/gcc.dg/tree-ssa/loop-33.c
parenta929bc2878b1b19fc4fb45bcbccf3af79bc8c24a (diff)
downloadgcc-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.c40
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" } } */