https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63783
--- Comment #11 from Michael Karcher <gcc-bugzilla at mkarcher dot dialup.fu-berlin.de> --- Putting things straight after trying it out: (In reply to Michael Karcher from comment #7) [...] > and this gets (except SH2A with nott) transformed to (by > define_insn_and_split "nott" in the machine definition) > > [bb 3] > (set (reg:SI 147 t) (eq:SI (reg:SI 173) (const_int 0))) > -> bb 5 > > [bb 4] > (set (reg:SI 147 t) (eq:SI (reg:SI 176) (const_int 0))) > (set (reg:SI 200) (xor:SI (reg:SI 147 t) (const_int 1))) This is WRONG. It should read "(set (reg:SI 200) (reg:SI 147 t))" instead! > (set (reg:SI 147 t) (eq:SI (reg:SI 200) (const_int 0))) > -> bb 5 > > [bb 5] > (set (pc) (if_then_else (eq (reg:SI 147 t) (const_int 0)) // inverted > (label_ref:SI 50) (pc))) > > which, at least in my example, seems to be transformed by register renaming > and common code elimination (combining the to treg setting instructions at > the end of bb3 and bb4) to something like This turns out to be wrong too. The treg setting instructions are NOT combined. See the previous comment.