https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105749
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
```
_20 = MEM[(const struct basic_string *)i_8(D)]._M_string_length;
if (_20 != 0)
goto <bb 20>; [33.00%]
else
goto <bb 68>; [67.00%]
...
<bb 68> [local count: 719407024]:
goto <bb 21>; [100.00%]
...
# port_42 = PHI <port_1(D)(68), _31(20)>
# port$4_41 = PHI <0(68), 1(20)>
<bb 21> ...:
...
<bb 37> [local count: 1073741824]:
_36 = VIEW_CONVERT_EXPR<bool>(port$4_41);
if (_36 != 0)
goto <bb 38>; [50.00%]
else
goto <bb 69>; [50.00%]
<bb 69> [local count: 536870912]:
goto <bb 39>; [100.00%]
<bb 38> [local count: 536870912]:
<bb 39> [local count: 1073741824]:
# _37 = PHI <port_42(38), 443(69)>
_22 = std::basic_ostream<char>::operator<< (&reqb.D.91763, _37);
goto <bb 41>; [100.00%]
```
But:
```
After normalization [DEF]:
port_42 = PHI <port_1(D)(68), _31(20)>
is conditional on:
((_20 != 0))
After normalization [USE]:
_37 = PHI <port_42(38), 443(69)>
is conditional on:
((_36 != 0))
```
So uninit does not see the relationship between _20 and _36; they are
equalivant.