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.

Reply via email to