diff mbox series

middle-end/101009 - fix distance vector recording

Message ID 14pn234n-819q-818n-51ps-53pqs94ps06q@fhfr.qr
State New
Headers show
Series middle-end/101009 - fix distance vector recording | expand

Commit Message

Richard Biener June 11, 2021, 9:26 a.m. UTC
This fixes recording of distance vectors in case the DDR has just
constant equal indexes.  In that case we expect distance vectors
with zero distances to be recorded which is what was done when
any distance was computed for affine indexes.

Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.

2021-06-11  Richard Biener  <rguenther@suse.de>

	PR middle-end/101009
	* tree-data-ref.c (build_classic_dist_vector_1): Make sure
	to set *init_b to true when we encounter a constant equal
	index pair.
	(compute_affine_dependence): Also dump the actual DR_REF.

	* gcc.dg/torture/pr101009.c: New testcase.
---
 gcc/testsuite/gcc.dg/torture/pr101009.c | 17 +++++++++++++++++
 gcc/tree-data-ref.c                     | 10 ++++++++--
 2 files changed, 25 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gcc.dg/torture/pr101009.c
diff mbox series

Patch

diff --git a/gcc/testsuite/gcc.dg/torture/pr101009.c b/gcc/testsuite/gcc.dg/torture/pr101009.c
new file mode 100644
index 00000000000..2bbed1dfc2c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr101009.c
@@ -0,0 +1,17 @@ 
+/* { dg-do run } */
+/* { dg-additional-options "-fno-tree-sra -fno-tree-pre -ftree-loop-distribution" } */
+
+struct a {
+  unsigned b;
+  unsigned c;
+} e, *f = &e;
+int d = 1;
+int main() {
+  for (; d; d--) {
+    struct a g[] = {{2, 1}, {2, 1}};
+    *f = g[1];
+  }
+  if (e.c != 1)
+    __builtin_abort ();
+  return 0;
+}
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index b1f64684840..b37c234aea8 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -5121,6 +5121,8 @@  build_classic_dist_vector_1 (struct data_dependence_relation *ddr,
 	  non_affine_dependence_relation (ddr);
 	  return false;
 	}
+      else
+	*init_b = true;
     }
 
   return true;
@@ -5616,9 +5618,13 @@  compute_affine_dependence (struct data_dependence_relation *ddr,
   if (dump_file && (dump_flags & TDF_DETAILS))
     {
       fprintf (dump_file, "(compute_affine_dependence\n");
-      fprintf (dump_file, "  stmt_a: ");
+      fprintf (dump_file, "  ref_a: ");
+      print_generic_expr (dump_file, DR_REF (dra));
+      fprintf (dump_file, ", stmt_a: ");
       print_gimple_stmt (dump_file, DR_STMT (dra), 0, TDF_SLIM);
-      fprintf (dump_file, "  stmt_b: ");
+      fprintf (dump_file, "  ref_b: ");
+      print_generic_expr (dump_file, DR_REF (drb));
+      fprintf (dump_file, ", stmt_b: ");
       print_gimple_stmt (dump_file, DR_STMT (drb), 0, TDF_SLIM);
     }