[Bug tree-optimization/43378] New: IVOPTs messes up code
rguenth at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon Mar 15 12:41:00 GMT 2010
void bar(int, int, int);
void foo(int left, int rite, int element)
{
while (left <= rite)
{
rite -= element;
bar(left, rite, element);
left += element;
}
}
produces:
foo (int left, int rite, int element)
{
unsigned int D.2741;
unsigned int D.2742;
unsigned int D.2743;
unsigned int D.2737;
int D.2738;
unsigned int D.2739;
unsigned int D.2740;
<bb 2>:
if (left_3(D) <= rite_4(D))
goto <bb 3>;
else
goto <bb 6>;
<bb 3>:
<bb 4>:
# left_14 = PHI <left_7(5), left_3(D)(3)>
# rite_15 = PHI <rite_6(5), rite_4(D)(3)>
D.2737_8 = (unsigned int) rite_15;
D.2738_2 = -element_5(D);
D.2739_1 = (unsigned int) D.2738_2;
D.2740_13 = D.2737_8 + D.2739_1;
rite_12 = (int) D.2740_13;
rite_6 = rite_12;
bar (left_14, rite_6, element_5(D));
D.2741_11 = (unsigned int) left_14;
D.2742_17 = (unsigned int) element_5(D);
D.2743_18 = D.2741_11 + D.2742_17;
left_19 = (int) D.2743_18;
left_7 = left_19;
if (rite_6 >= left_7)
goto <bb 5>;
else
goto <bb 6>;
<bb 5>:
goto <bb 4>;
from
foo (int left, int rite, int element)
{
<bb 2>:
if (left_3(D) <= rite_4(D))
goto <bb 3>;
else
goto <bb 6>;
<bb 3>:
<bb 4>:
# left_14 = PHI <left_7(5), left_3(D)(3)>
# rite_15 = PHI <rite_6(5), rite_4(D)(3)>
rite_6 = rite_15 - element_5(D);
bar (left_14, rite_6, element_5(D));
left_7 = left_14 + element_5(D);
if (rite_6 >= left_7)
goto <bb 5>;
else
goto <bb 6>;
<bb 5>:
goto <bb 4>;
as you can see it doesn't even create new induction variables.
--
Summary: IVOPTs messes up code
Product: gcc
Version: 4.5.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rguenth at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43378
More information about the Gcc-bugs
mailing list