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

Andreas Krebbel <krebbel at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |krebbel at gcc dot gnu.org

--- Comment #10 from Andreas Krebbel <krebbel at gcc dot gnu.org> ---
(In reply to Segher Boessenkool from comment #9)
> With the code and flags in comment 2 i get a segmentation fault, instead
> (with a powerpc64-linux host), somewhere during LRA.
> 
> 
> insn 10 is
> ===
> (insn 10 8 11 2 (set (reg:DI 120)
>         (and:DI (subreg:DI (reg:SI 117) 0)
>             (const_int 1 [0x1]))) "79058.c":7 79 {*anddi3_insn}
>      (expr_list:REG_DEAD (reg:SI 117)
>         (nil)))
> ===
> 
> and IRA has chosen r0 for both regs (note they are different modes though!)
> 
> 
> LRA does:
> ===
>          Choosing alt 4 in insn 10:  (0) &r  (1) 0  (2) De {*anddi3_insn}
>       Creating newreg=123 from oldreg=120, assigning class GENERAL_REGS to
> r123
>    10: r123:DI=r123:DI&0x1
>       REG_DEAD r117:SI
>     Inserting insn reload before:
>    17: r123:DI=r117:SI#0
>     Inserting insn reload after:
>    18: r120:DI=r123:DI
> ===
> 
> r123 is assigned r0 as well, and insn 18 is deleted, and it dies shortly
> after that.

The target operand is marked early clobber. So picking the same reg for both
operands does not appear to be valid to me.

Reply via email to