[Bug tree-optimization/37997] PHI translation does not simplify to non-constants
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Jan 19 09:44:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37997
--- Comment #2 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-01-19 09:35:38 UTC ---
int foo (int i, int b)
{
int mask;
int result;
if (b)
mask = -1;
else
mask = 0;
result = result & mask;
return result;
}
actually works if you do not have result used uninitialized on the
path that sets mask to -1:
int foo (int i, int b, int result)
{
int mask;
if (b)
mask = -1;
else
mask = 0;
result = result & mask;
return result;
}
is optimized to
<bb 2>:
if (b_2(D) != 0)
goto <bb 5>;
else
goto <bb 3>;
<bb 5>:
pretmp.3_9 = result_5(D);
goto <bb 4>;
<bb 3>:
<bb 4>:
# mask_1 = PHI <-1(5), 0(3)>
# prephitmp.4_10 = PHI <pretmp.3_9(5), 0(3)>
result_6 = prephitmp.4_10;
return result_6;
Likewise it works for
int foo (int i, int b)
{
int mask;
int result;
if (b)
mask = -1;
else
mask = 0;
result = i + 1;
result = result & mask;
return result;
}
if you avoid the same error. I don't think we want to consider
the uninitialized state of a variable to be available - we'd
insert "obvious" uninitialized uses and thus might expose them
to warnings.
More information about the Gcc-bugs
mailing list