[Bug tree-optimization/59715] [4.7/4.8/4.9 Regression] wrong code at -Os and above on x86_64-linux-gnu
vries at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jan 8 11:08:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59715
--- Comment #5 from vries at gcc dot gnu.org ---
The test passes with -fno-tree-tail-merge. But I don't see anything wrong with
the transformation (merging of empty blocks) done by the pass.
AFAICT, the problem is introduced by pass_dominator. test.c.126t.slsr looks ok,
but test.c.127t.dom2 look wrong. The test passes with -fno-tree-dominator-opts.
test.c.126t.slsr:
...
<bb 2>:
b.0_4 = b;
if (b.0_4 == 0)
goto <bb 4>;
else
goto <bb 3>;
<bb 3>:
goto <bb 7>;
<bb 4>:
a.1_5 = a;
if (a.1_5 != 0)
goto <bb 5>;
else
goto <bb 6>;
<bb 5>:
b = a.1_5;
c_7 = 1 % a.1_5;
if (c_7 != 0)
goto <bb 6>;
else
goto <bb 3>;
<bb 6>:
b = 0;
<bb 7>:
b.0_9 = b;
printf ("%d\n", b.0_9);
return 0;
...
we're taking the path bb2 -> bb4 -> bb5 (b = 2) -> bb6 (b = 0) -> bb7
test.c.127t.dom2:
...
<bb 2>:
b.0_4 = b;
if (b.0_4 == 0)
goto <bb 4>;
else
goto <bb 3>;
<bb 3>:
goto <bb 6>;
<bb 4>:
a.1_5 = a;
if (a.1_5 != 0)
goto <bb 5>;
else
goto <bb 6>;
<bb 5>:
b = a.1_5;
c_7 = 1 % a.1_5;
if (c_7 != 0)
goto <bb 6>;
else
goto <bb 3>;
<bb 6>:
b.0_9 = b;
printf ("%d\n", b.0_9);
return 0;
...
we're taking the path bb2 -> bb4 -> bb5 (b = 2) -> bb6
More information about the Gcc-bugs
mailing list