From 8ebcad86e6aa747d9ca8a077ab1127a04d0d91d3 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 18 Nov 2015 11:23:21 +0100 Subject: [PATCH] re PR tree-optimization/68157 (internal compiler error: in reassoc_stmt_dominates_stmt_p, at tree-ssa-reassoc.c:1287) 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 | 7 +++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/opt/pr68157.C | 18 ++++++++++++++++++ gcc/tree-ssa-reassoc.c | 5 +++++ 4 files changed, 35 insertions(+) create mode 100644 gcc/testsuite/g++.dg/opt/pr68157.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 360bbc83af2..fb1db057ae7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-11-18 Jakub Jelinek + + 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 * haifa-sched.c (haifa_finish_h_i_d): Release reg_set_list. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5be70e2f85b..08f910427ac 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-11-18 Jakub Jelinek + + PR tree-optimization/68157 + * g++.dg/opt/pr68157.C: New test. + 2015-11-18 Richard Biener 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 index 00000000000..1d723486fb7 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr68157.C @@ -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; + } +} diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index 7be934d9dde..dfd0da1a123 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -4441,6 +4441,7 @@ attempt_builtin_powi (gimple *stmt, vec *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 *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 *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 *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); } } -- 2.30.2