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

--- Comment #7 from Segher Boessenkool <segher at gcc dot gnu.org> ---
We have an insn:

(insn 32 33 34 3 (set (reg:DI 165)
        (unspec:DI [
                (fix:SI (subreg:SF (reg:SI 160 [ a ]) 0))
            ] UNSPEC_FCTIWZ)) 71680.c:11 334 {fctiwz_sf}
     (expr_list:REG_DEAD (reg:SI 160 [ a ])
        (nil)))

160 is allocated memory by IRA.  LRA does:

Changing pseudo 160 in operand 1 of insn 32 on equiv [r162:SI]
      Creating newreg=167, assigning class ALL_REGS to subreg reg r167
   32: r165:DI=unspec[fix(r167:SI#0)] 7
      REG_DEAD r160:SI
    Inserting subreg reload before:
   37: r167:SI=[r162:SI]

and from then on it keeps loading 167 into another (new) SImode reg,
which never magically becomes a float reg ;-)

Reply via email to