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

Segher Boessenkool <segher at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2018-10-26
     Ever confirmed|0                           |1

--- Comment #2 from Segher Boessenkool <segher at gcc dot gnu.org> ---
The two relevant insns are

(insn 35 4 40 2 (set (reg:SI 33 v1 [99])
        (reg:SI 0 x0 [ a ])) "87763.c":2:1 46 {*movsi_aarch64}
     (nil))

(insn 7 10 8 2 (set (reg:SF 33 v1 [orig:95 c ] [95])
        (float:SF (reg:SI 33 v1 [99]))) "87763.c":2:14 921 {floatsisf2}
     (nil))

(this is the LRA dump; IRA already allocated those registers, LRA didn't
change anything).

99 was assigned a floating point register:
         Choosing alt 12 in insn 35:  (0) w  (1) rZ {*movsi_aarch64}
         Choosing alt 0 in insn 7:  (0) =w  (1) w {floatsisf2}

an integer register would be alt 0 (r<-r), resp. alt 1 (w<-?r).  So apparently
the "?" was costed as more strongly than the cost of the removable register
move, or IRA didn't see that move was unnecessary.

Confirmed, btw.

Reply via email to