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

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
So after the patch we have

  __x.5_4 = (long unsigned int) "hello";
  __y.6_5 = (long unsigned int) _3;
  if (__x.5_4 != __y.6_5)
    goto <bb 3>; [75.00%]
  else
    goto <bb 4>; [25.00%]

  <bb 3> [local count: 805306369]:
  __builtin_memcpy (_3, "hello", 5);
  goto <bb 14>; [100.00%]

  <bb 4> [local count: 268435456]:
  if (_3 >= &MEM[(void *)"hello" + 5B])
    goto <bb 5>; [50.00%]
  else
    goto <bb 6>; [50.00%]

where we fail to elide this condition.  Well, in theory "hello"
could be followed by "hello", thus in .str "hello\0hello\0" and
thus the condition could be true.  Somehow w/o the libstdc++ patch
this condition either doesn't appear or is elided.

Reply via email to