re PR tree-optimization/82819 ([graphite] ICE in set_codegen_error, at graphite-isl...
authorRichard Biener <rguenther@suse.de>
Wed, 24 Jan 2018 09:31:56 +0000 (09:31 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 24 Jan 2018 09:31:56 +0000 (09:31 +0000)
2018-01-24  Richard Biener  <rguenther@suse.de>

PR tree-optimization/82819
* graphite-isl-ast-to-gimple.c (binary_op_to_tree): Avoid
code generating pluses that are no-ops in the target precision.

* gcc.dg/graphite/pr82819.c: New testcase.

From-SVN: r257012

gcc/ChangeLog
gcc/graphite-isl-ast-to-gimple.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/graphite/pr82819.c [new file with mode: 0644]

index 29177ab3d4fe7815255e915375f9397a2d262b79..12341eac44e2729482633bb5a32dcd0788e41ad4 100644 (file)
@@ -1,3 +1,9 @@
+2018-01-24  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/82819
+       * graphite-isl-ast-to-gimple.c (binary_op_to_tree): Avoid
+       code generating pluses that are no-ops in the target precision.
+
 2018-01-24  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/84000
index 322084f30b6151d898d8538fe001dd0dd5e3d5f4..89d8d941ce1e7b4d5664e2cc6a210d79c8d6dfcf 100644 (file)
@@ -326,7 +326,8 @@ binary_op_to_tree (tree type, __isl_take isl_ast_expr *expr, ivs_params &ip)
   /* From our constraint generation we may get modulo operations that
      we cannot represent explicitely but that are no-ops for TYPE.
      Elide those.  */
-  if (expr_type == isl_ast_op_pdiv_r
+  if ((expr_type == isl_ast_op_pdiv_r
+       || expr_type == isl_ast_op_add)
       && isl_ast_expr_get_type (arg_expr) == isl_ast_expr_int
       && (wi::exact_log2 (widest_int_from_isl_expr_int (arg_expr))
          >= TYPE_PRECISION (type)))
index 23fdb9fd30c96d397f8a76ffddcb242991260b2e..eed77ed4084674a8eaed2e988b252de3bba9e011 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-24  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/82819
+       * gcc.dg/graphite/pr82819.c: New testcase.
+
 2018-01-23  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/83921
diff --git a/gcc/testsuite/gcc.dg/graphite/pr82819.c b/gcc/testsuite/gcc.dg/graphite/pr82819.c
new file mode 100644 (file)
index 0000000..ed4b1b6
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-nest-optimize" } */
+
+short int *ts;
+
+void
+c2 (unsigned long long int s4, int ns)
+{
+  short int *b2 = (short int *)&ns;
+
+  while (ns != 0)
+    {
+      int xn;
+
+      for (xn = 0; xn < 3; ++xn)
+       for (*b2 = 0; *b2 < 2; ++*b2)
+         s4 += xn;
+      if (s4 != 0)
+       b2 = ts;
+      ++ns;
+    }
+}