https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116057
Arsen Arsenović <arsen at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |arsen at gcc dot gnu.org
--- Comment #1 from Arsen Arsenović <arsen at gcc dot gnu.org> ---
I've debugged this already AOT.
SLP generates the following:
<bb 2> [local count: 1073741824]:
_8 = {0, __trans_tmp_1$1_4(D)};
WriteToReadOnlyProperty_should_throw.0_1 =
WriteToReadOnlyProperty_should_throw;
if (WriteToReadOnlyProperty_should_throw.0_1 != 0)
goto <bb 4>; [67.00%]
else
goto <bb 3>; [33.00%]
<bb 3> [local count: 354334800]:
Throw ();
<bb 4> [local count: 1073741824]:
# _10 = PHI <0(2), __trans_tmp_1$1_4(D)(3)>
# _12 = PHI <1(2), 0(3)>
# vect__12.9_6 = PHI <{ 1, 0 }(2), _8(3)>
MEM[(struct Maybe *)&D.4540] = vect__12.9_6;
return D.4540;
... from:
<bb 2> [local count: 1073741824]:
WriteToReadOnlyProperty_should_throw.0_1 =
WriteToReadOnlyProperty_should_throw;
if (WriteToReadOnlyProperty_should_throw.0_1 != 0)
goto <bb 4>; [67.00%]
else
goto <bb 3>; [33.00%]
<bb 3> [local count: 354334800]:
Throw ();
<bb 4> [local count: 1073741824]:
# _10 = PHI <0(2), __trans_tmp_1$1_4(D)(3)>
# _12 = PHI <1(2), 0(3)>
MEM <unsigned char> [(struct Maybe *)&D.4540] = _12;
MEM <unsigned char> [(struct Maybe *)&D.4540 + 1B] = _10;
return D.4540;
... replacing the two MEMs with a vector.
later, ccp4 decides:
Visiting statement:
_8 = {0, __trans_tmp_1$1_4(D)};
which is likely UNDEFINED
Lattice value changed to UNDEFINED. Adding SSA edges to worklist.
marking stmt to be not simulated again
...
Visiting PHI node: vect__12.9_6 = PHI <{ 1, 0 }(2), _8(3)>
Argument #0 (2 -> 4 executable)
{ 1, 0 } Value: CONSTANT { 1, 0 }
Argument #1 (3 -> 4 executable)
_8 Value: UNDEFINED
PHI node value: CONSTANT { 1, 0 }
...
<bb 2> [local count: 1073741824]:
WriteToReadOnlyProperty_should_throw.0_1 =
WriteToReadOnlyProperty_should_throw;
if (WriteToReadOnlyProperty_should_throw.0_1 != 0)
goto <bb 4>; [67.00%]
else
goto <bb 3>; [33.00%]
<bb 3> [local count: 354334800]:
Throw ();
<bb 4> [local count: 1073741824]:
# _12 = PHI <1(2), 0(3)>
MEM[(struct Maybe *)&D.4540] = { 1, 0 };
return D.4540;
and, so, as a result both branches start returning { 1, 0 }.