[Bug middle-end/35545] tracer pass is run too late
pinskia at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Jul 19 07:49:06 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=35545
--- Comment #26 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Note I think we should be able to do this without the tracer.
After PRE we get now:
```
if (_1 == 0)
goto <bb 4>; [50.00%]
else
goto <bb 5>; [50.00%]
<bb 4> [local count: 531502204]:
_14 = operator new (16);
MEM[(struct A *)_14].i = 0;
MEM[(struct A *)_14]._vptr.A = &MEM <int (*) ()[3]> [(void *)&_ZTV1A + 16B];
goto <bb 6>; [100.00%]
<bb 5> [local count: 531502204]:
_10 = operator new (16);
MEM[(struct B *)_10].D.2821.i = 0;
MEM[(struct B *)_10].b = 0;
MEM[(struct B *)_10].D.2821._vptr.A = &MEM <int (*) ()[3]> [(void *)&_ZTV1B +
16B];
<bb 6> [local count: 1063004408]:
# ap_5 = PHI <_14(4), _10(5)>
# prephitmp_7 = PHI <foo(4), foo(5)>
OBJ_TYPE_REF(prephitmp_7;(struct A)ap_5->0B) (ap_5);
```
Which should be enough to push the call (OBJ_TYPE_REF) back into the branches.
Note that part is what we see with PR 116001 too.
More information about the Gcc-bugs
mailing list