aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2010-12-15 05:04:40 +0000
committerSebastian Pop <spop@gcc.gnu.org>2010-12-15 05:04:40 +0000
commit3e6f8b560669aa350629504f80388cc773719f13 (patch)
treee1f9a3b7e60d6567d61591500be04952318f5d47
parentab2210870b28990071af15a53ce817a3fc6d5af8 (diff)
downloadgcc-3e6f8b560669aa350629504f80388cc773719f13.zip
gcc-3e6f8b560669aa350629504f80388cc773719f13.tar.gz
gcc-3e6f8b560669aa350629504f80388cc773719f13.tar.bz2
Fix PR46928: handle "A[p] == A[p]" in data dep analysis with p a parameter of the loop.
2010-12-14 Sebastian Pop <sebastian.pop@amd.com> PR tree-optimization/46928 * tree-data-ref.c (analyze_overlapping_iterations): Handle "A[p] == A[p]" in data dependence analysis with p a parameter of the loop. * gcc.dg/tree-ssa/ldist-17.c: New. From-SVN: r167843
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/ldist-17.c50
-rw-r--r--gcc/tree-data-ref.c5
4 files changed, 64 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9818c03..66c11c4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2010-12-14 Sebastian Pop <sebastian.pop@amd.com>
+ PR tree-optimization/46928
+ * tree-data-ref.c (analyze_overlapping_iterations): Handle "A[p] == A[p]"
+ in data dependence analysis with p a parameter of the loop.
+
+2010-12-14 Sebastian Pop <sebastian.pop@amd.com>
+
PR tree-optimization/45948
* tree-loop-distribution.c (ssa_name_has_uses_outside_loop_p): New.
(stmt_has_scalar_dependences_outside_loop): New.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a8c6941..fae339b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2010-12-14 Sebastian Pop <sebastian.pop@amd.com>
+ PR tree-optimization/46928
+ * gcc.dg/tree-ssa/ldist-17.c: New.
+
+2010-12-14 Sebastian Pop <sebastian.pop@amd.com>
+
PR tree-optimization/45948
* gcc.dg/tree-ssa/ldist-pr45948.c: New.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ldist-17.c b/gcc/testsuite/gcc.dg/tree-ssa/ldist-17.c
new file mode 100644
index 0000000..a831d3c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ldist-17.c
@@ -0,0 +1,50 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-loop-distribution -fdump-tree-ldist-details" } */
+
+typedef int mad_fixed_t;
+struct mad_pcm
+{
+ unsigned int samplerate;
+ unsigned short channels;
+ unsigned short length;
+ mad_fixed_t samples[2][1152];
+};
+struct mad_synth
+{
+ mad_fixed_t filter[2][2][2][16][8];
+ unsigned int phase;
+ struct mad_pcm pcm;
+};
+void mad_synth_mute (struct mad_synth *synth);
+void
+mad_synth_mute (struct mad_synth *synth)
+{
+ unsigned int ch;
+ unsigned int s;
+ unsigned int v;
+
+ ch = 0U;
+ while (ch < 2U)
+ {
+ s = 0U;
+ while (s < 16U)
+ {
+ v = 0U;
+ while (v < 8U)
+ {
+ synth->filter[ch][1][1][s][v] = 0;
+ synth->filter[ch][1][0][s][v] = 0;
+ synth->filter[ch][0][1][s][v] = 0;
+ synth->filter[ch][0][0][s][v] = 0;
+ v++;
+ }
+ s++;
+ }
+ ch++;
+ }
+ return;
+}
+
+/* { dg-final { scan-tree-dump "distributed: split to 4" "ldist" } } */
+/* { dg-final { scan-tree-dump-times "__builtin_memset" 8 "ldist" } } */
+/* { dg-final { cleanup-tree-dump "ldist" } } */
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index 9a81370..a6d0731 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -2653,7 +2653,8 @@ analyze_overlapping_iterations (tree chrec_a,
/* If they are the same chrec, and are affine, they overlap
on every iteration. */
else if (eq_evolutions_p (chrec_a, chrec_b)
- && evolution_function_is_affine_multivariate_p (chrec_a, lnn))
+ && (evolution_function_is_affine_multivariate_p (chrec_a, lnn)
+ || operand_equal_p (chrec_a, chrec_b, 0)))
{
dependence_stats.num_same_subscript_function++;
*overlap_iterations_a = conflict_fn (1, affine_fn_cst (integer_zero_node));
@@ -2662,7 +2663,7 @@ analyze_overlapping_iterations (tree chrec_a,
}
/* If they aren't the same, and aren't affine, we can't do anything
- yet. */
+ yet. */
else if ((chrec_contains_symbols (chrec_a)
|| chrec_contains_symbols (chrec_b))
&& (!evolution_function_is_affine_multivariate_p (chrec_a, lnn)