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.