[Bug rtl-optimization/68624] [6 Regression] wrong code at -O2 and -O3 on x86_64-linux-gnu (in 64-bit mode)

ktkachov at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Dec 1 11:48:00 GMT 2015


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

--- Comment #5 from ktkachov at gcc dot gnu.org ---
Thanks, I've come to the same conclusion.

The code in noce_cmove_arith that checks for overlapping writes
among the basic blocks has a bug. In the code:

  if (emit_a || modified_in_a)
    {
      modified_in_b = emit_b != NULL_RTX && modified_in_p (orig_a, emit_b);
      if (tmp_b && else_bb)
      ...

changing the second if to:
if (tmp_a && else_bb)

fixes the testcase. But the whole logic there is becoming somewhat convoluted.
I'll see if I can make the control flow there clearer


More information about the Gcc-bugs mailing list