re PR tree-optimization/68157 (internal compiler error: in reassoc_stmt_dominates_stm...
authorJakub Jelinek <jakub@redhat.com>
Wed, 18 Nov 2015 10:23:21 +0000 (11:23 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 18 Nov 2015 10:23:21 +0000 (11:23 +0100)
PR tree-optimization/68157
* tree-ssa-reassoc.c (attempt_builtin_powi): Set uid of
pow_stmt or mul_stmt from stmt's uid.
(reassociate_bb): Set uid of mul_stmt from stmt's uid.

* g++.dg/opt/pr68157.C: New test.

From-SVN: r230530

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/pr68157.C [new file with mode: 0644]
gcc/tree-ssa-reassoc.c

index 360bbc83af283e4f16983a7f8a3514c5ae0843d3..fb1db057ae703e089af6196b76dce9ee2744687a 100644 (file)
@@ -1,3 +1,10 @@
+2015-11-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/68157
+       * tree-ssa-reassoc.c (attempt_builtin_powi): Set uid of
+       pow_stmt or mul_stmt from stmt's uid.
+       (reassociate_bb): Set uid of mul_stmt from stmt's uid.
+
 2015-11-18  Martin Liska  <mliska@suse.cz>
 
        * haifa-sched.c (haifa_finish_h_i_d): Release reg_set_list.
index 5be70e2f85b380222bb835a1f6684770856f210c..08f910427ac519c1034ddcc3f0dd58ecf57b3f44 100644 (file)
@@ -1,3 +1,8 @@
+2015-11-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/68157
+       * g++.dg/opt/pr68157.C: New test.
+
 2015-11-18  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/67790
diff --git a/gcc/testsuite/g++.dg/opt/pr68157.C b/gcc/testsuite/g++.dg/opt/pr68157.C
new file mode 100644 (file)
index 0000000..1d72348
--- /dev/null
@@ -0,0 +1,18 @@
+// PR tree-optimization/68157
+// { dg-do compile }
+// { dg-options "-Ofast" }
+
+double a, b, c, d;
+int h, foo ();
+
+void
+bar ()
+{
+  while (foo ())
+    {
+      double e = b * a * a;
+      double f = b * d;
+      if (h)
+       c = e + f;
+    }
+}
index 7be934d9dde2fc2969e623b4f6d628c8a75f0372..dfd0da1a123ae84323e6e6082690b3f0306e2239 100644 (file)
@@ -4441,6 +4441,7 @@ attempt_builtin_powi (gimple *stmt, vec<operand_entry *> *ops)
                                                           power));
              gimple_call_set_lhs (pow_stmt, iter_result);
              gimple_set_location (pow_stmt, gimple_location (stmt));
+             gimple_set_uid (pow_stmt, gimple_uid (stmt));
              gsi_insert_before (&gsi, pow_stmt, GSI_SAME_STMT);
 
              if (dump_file && (dump_flags & TDF_DETAILS))
@@ -4524,6 +4525,7 @@ attempt_builtin_powi (gimple *stmt, vec<operand_entry *> *ops)
                  mul_stmt = gimple_build_assign (target_ssa, MULT_EXPR,
                                                  op1, op2);
                  gimple_set_location (mul_stmt, gimple_location (stmt));
+                 gimple_set_uid (mul_stmt, gimple_uid (stmt));
                  gsi_insert_before (&gsi, mul_stmt, GSI_SAME_STMT);
                  rf1->repr = target_ssa;
 
@@ -4541,6 +4543,7 @@ attempt_builtin_powi (gimple *stmt, vec<operand_entry *> *ops)
                                                       power));
          gimple_call_set_lhs (pow_stmt, iter_result);
          gimple_set_location (pow_stmt, gimple_location (stmt));
+         gimple_set_uid (pow_stmt, gimple_uid (stmt));
          gsi_insert_before (&gsi, pow_stmt, GSI_SAME_STMT);
        }
 
@@ -4552,6 +4555,7 @@ attempt_builtin_powi (gimple *stmt, vec<operand_entry *> *ops)
          mul_stmt = gimple_build_assign (new_result, MULT_EXPR,
                                          result, iter_result);
          gimple_set_location (mul_stmt, gimple_location (stmt));
+         gimple_set_uid (mul_stmt, gimple_uid (stmt));
          gsi_insert_before (&gsi, mul_stmt, GSI_SAME_STMT);
          gimple_set_visited (mul_stmt, true);
          result = new_result;
@@ -4908,6 +4912,7 @@ reassociate_bb (basic_block bb)
                      mul_stmt = gimple_build_assign (lhs, MULT_EXPR,
                                                      powi_result, target_ssa);
                      gimple_set_location (mul_stmt, gimple_location (stmt));
+                     gimple_set_uid (mul_stmt, gimple_uid (stmt));
                      gsi_insert_after (&gsi, mul_stmt, GSI_NEW_STMT);
                    }
                }