https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121492

--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Created attachment 62359
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=62359&action=edit
With this additional change pre and lim can do the movement

This changes:
```
a1 = VIEW_CONVERT_EXPR<union A>(_2);
```
to be
```
VIEW_CONVERT_EXPR<float>(a1) = _2;
```

And now both LIM and PRE is able to handle this better.

LIM:
```
  <bb 3> [local count: 1063004408]:
  # a1_lsm.3_8 = PHI <_2(3), a_6(D)(2)>
  # ivtmp_3 = PHI <ivtmp_10(3), 100(2)>
  _2 = a_6(D) + a1_lsm.3_8;
  ivtmp_10 = ivtmp_3 + 4294967295;
  if (ivtmp_10 != 0)
    goto <bb 3>; [98.99%]
  else
    goto <bb 4>; [1.01%]
```

LIM disabled:
```
  <bb 3> [local count: 1063004408]:
  # prephitmp_8 = PHI <_2(3), a_6(D)(2)>
  # ivtmp_16 = PHI <ivtmp_1(3), 100(2)>
  _2 = a_6(D) + prephitmp_8;
  ivtmp_1 = ivtmp_16 + 4294967295;
  if (ivtmp_1 != 0)
    goto <bb 3>; [98.99%]
  else
    goto <bb 4>; [1.01%]
```

Reply via email to