From: Richard Biener Date: Wed, 4 Jun 2014 13:41:09 +0000 (+0000) Subject: re PR tree-optimization/61383 (wrong code at -O2 and -O3 on x86_64-linux-gnu) X-Git-Tag: releases/gcc-4.8.4~430 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5c747e54163906cb3283107ba96c2e9165dcb094;p=thirdparty%2Fgcc.git re PR tree-optimization/61383 (wrong code at -O2 and -O3 on x86_64-linux-gnu) 2014-06-04 Richard Biener PR tree-optimization/61383 * tree-ssa-ifcombine.c (bb_no_side_effects_p): Make sure stmts can't trap. * gcc.dg/torture/pr61383-1.c: New testcase. From-SVN: r211232 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 343050c0d0a1..a6eeb63d852a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-06-04 Richard Biener + + PR tree-optimization/61383 + * tree-ssa-ifcombine.c (bb_no_side_effects_p): Make sure + stmts can't trap. + 2014-06-03 Andrey Belevantsev Backport from mainline diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0bba1d568019..b66a7aa40f97 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-06-04 Richard Biener + + PR tree-optimization/61383 + * gcc.dg/torture/pr61383-1.c: New testcase. + 2014-06-03 Andrey Belevantsev Backport from mainline diff --git a/gcc/testsuite/gcc.dg/torture/pr61383-1.c b/gcc/testsuite/gcc.dg/torture/pr61383-1.c new file mode 100644 index 000000000000..d9a0a0b398b9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr61383-1.c @@ -0,0 +1,35 @@ +/* { dg-do run } */ + +int a, b = 1, c, d, e, f, g; + +int +fn1 () +{ + int h; + for (;;) + { + g = b; + g = g ? 0 : 1 % g; + e = a + 1; + for (; d < 1; d = e) + { + if (f == 0) + h = 0; + else + h = 1 % f; + if (f < 1) + c = 0; + else if (h) + break; + } + if (b) + return 0; + } +} + +int +main () +{ + fn1 (); + return 0; +} diff --git a/gcc/tree-ssa-ifcombine.c b/gcc/tree-ssa-ifcombine.c index cc06ca13b1e2..ed6ea8261d07 100644 --- a/gcc/tree-ssa-ifcombine.c +++ b/gcc/tree-ssa-ifcombine.c @@ -105,7 +105,11 @@ bb_no_side_effects_p (basic_block bb) { gimple stmt = gsi_stmt (gsi); + if (is_gimple_debug (stmt)) + continue; + if (gimple_has_side_effects (stmt) + || gimple_could_trap_p (stmt) || gimple_vuse (stmt)) return false; }