[Bug tree-optimization/89595] New: [8/9 Regression] DOM miscompiles code
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Mar 5 10:42:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89595
Bug ID: 89595
Summary: [8/9 Regression] DOM miscompiles code
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: rguenth at gcc dot gnu.org
Target Milestone: ---
The testcase below is miscompiled at -O1+ because DOM doesn't visit stmts
in a folded sequence other than the last for value-ranges so we end up
with
Visiting statement:
i_1 = val_2(D) > 0 ? i_6 : 0;
Meeting
int [val_2(D), val_2(D)] EQUIVALENCES: { val_2(D) } (1 elements)
and
int [0, 0]
to
VARYING
Optimizing statement i_1 = val_2(D) > 0 ? i_6 : 0;
Replaced 'i_6' with variable 'val_2(D)'
gimple_simplified to _9 = MAX_EXPR <val_2(D), 0>;
i_1 = _9;
Folded to: i_1 = _9;
LKUP STMT i_1 = _9
==== ASGN i_1 = _9
...
Visiting PHI node: i_3 = PHI <0(2), _9(3)>
Argument #0 (2 -> 4 executable)
0: int [0, 0]
Argument #1 (3 -> 4 executable)
_9: UNDEFINED
Meeting
int [0, 0]
and
UNDEFINED
to
int [0, 0]
LKUP STMT i_3 = PHI <0, _9>
2>>> STMT i_3 = PHI <0, _9>
<<<< STMT i_3 = PHI <0, _9>
Optimizing statement bb_5:
Optimizing statement return i_3;
Replaced 'i_3' with constant '0'
int __attribute__((noipa))
__GIMPLE(startwith("dom1")) bar(int cond, int val)
{
int i;
if (0 != 0)
goto bb_6;
else
goto bb_2;
bb_2:
if (cond_5(D) != 0)
goto bb_4;
else
goto bb_5;
bb_4:
i_6 = val_2(D);
i_1 = val_2(D) > 0 ? i_6 : 0;
bb_5:
i_3 = __PHI (bb_4: i_1, bb_2: 0);
return i_3;
bb_6:
i_4 = 1;
i_9 = 2;
goto bb_2;
}
int main()
{
if (bar (1, 1) != 1)
__builtin_abort ();
return 0;
}
More information about the Gcc-bugs
mailing list