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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2024-12-23
                 CC|                            |rsandifo at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Expand we have:
;; u.d =  Nan;

(insn 85 84 86 (set (reg:DI 134)
        (high:DI (symbol_ref/u:DI ("*.LC0") [flags 0x82])))
"./strtod_nan_main.c":58:43 -1
     (nil))

(insn 86 85 87 (set (reg/f:DI 133)
        (lo_sum:DI (reg:DI 134)
            (symbol_ref/u:DI ("*.LC0") [flags 0x82])))
"./strtod_nan_main.c":58:43 -1
     (expr_list:REG_EQUAL (symbol_ref/u:DI ("*.LC0") [flags 0x82])
        (nil)))

(insn 87 86 0 (set (reg/v:TI 110 [ u ])
        (mem/u/c:TI (reg/f:DI 133) [0  S16 A128])) "./strtod_nan_main.c":58:43
-1
     (expr_list:REG_EQUAL (const_wide_int 0x7fff8000000000000000000000000000)
        (nil)))

;; MEM <unsigned long> [(union ieee854_long_double *)&u] = mant_21;

(insn 88 87 0 (set (subreg:DI (reg/v:TI 110 [ u ]) 0)
        (reg/v:DI 109 [ mant ])) "./strtod_nan_main.c":58:165 -1
     (nil))

;; retval_26 = u.d;

(insn 89 88 0 (set (reg/v:TF 111 [ <retval> ])
        (subreg:TF (reg/v:TI 110 [ u ]) 0)) "./strtod_nan_main.c":58:270
discrim 1 -1
     (nil))

;; u ={v} {CLOBBER(eos)};

(insn 90 89 0 (clobber (reg/v:TI 110 [ u ])) -1
     (nil))


Which looks fine.

after Combine (and subreg3) we have:
(note 84 83 87 11 [bb 11] NOTE_INSN_BASIC_BLOCK)
(insn 87 84 88 11 (set (reg/v:TI 110 [ u ])
        (const_wide_int 0x7fff8000000000000000000000000000))
"./strtod_nan_main.c":58:43 75 {*movti_aarch64}
     (nil))
(insn 88 87 89 11 (set (subreg:DI (reg/v:TI 110 [ u ]) 0)
        (reg/v:DI 109 [ mant ])) "./strtod_nan_main.c":58:165 70
{*movdi_aarch64}
     (expr_list:REG_DEAD (reg/v:DI 109 [ mant ])
        (nil)))
(insn 89 88 91 11 (set (reg/v:TF 111 [ <retval> ])
        (subreg:TF (reg/v:TI 110 [ u ]) 0)) "./strtod_nan_main.c":58:270
discrim 1 83 {*movtf_aarch64}
     (expr_list:REG_DEAD (reg/v:TI 110 [ u ])
        (nil)))


Which also looks fine.

Early_ra messes it up.


Block 13:
    46:   89: r111:TF=r110:TI#0
Creating allocnos [1:1] for r110
Not allocating region: r110's mode TI is not tieable to mode TF
    48:   88: r110:TI#0=r140:DI

Block 13:
    50:   87: r110:TI=<0x7fff800000000000,0>
Creating allocnos [0:0] for r110
               -- dead



So yes this is 100% a target issue as early_ra is a target pass.

Reply via email to