https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102154
--- Comment #10 from Hongtao.liu <crazylht at gmail dot com> --- (In reply to Hongtao.liu from comment #9) > > > > (define_insn "movsf_hardfloat" > > [(set (match_operand:SF 0 "nonimmediate_operand" > > "=!r, f, v, wa, m, wY, > > Z, m, wa, !r, f, wa, > > !r, *c*l, !r, *h") > > (match_operand:SF 1 "input_operand" > > "m, m, wY, Z, f, v, > > wa, r, j, j, f, wa, > > r, r, *h, 0"))] > > "(register_operand (operands[0], SFmode) > > || register_operand (operands[1], SFmode)) > > && TARGET_HARD_FLOAT > > && (TARGET_ALLOW_SF_SUBREG > > || valid_sf_si_move (operands[0], operands[1], SFmode))" > > > > Oh, The pattern disllow sf subreg. > > Here TARGET_ALLOW_SF_SUBREG || valid_sf_si_move (operands[0], operands[1], > SFmode) is false, others are true which means input_operand accept > (subreg:SF (reg:DI 4)) And w/ -mpower10 (subreg:SF (reg:DI 4) 0) can be handled by reload to (insn 6 3 16 2 (set (mem/c:SF (plus:DI (reg/f:DI 1 1) (const_int -16 [0xfffffffffffffff0])) [4 %sfp+48 S4 A32]) (reg:SF 3 3 [orig:120+4 ] [120])) "/export/users2/liuhongt/tools-build/build_intel-innersource_ppc_debug/test.c":7:13 567 {movsf_hardfloat} (nil)) (insn 16 6 11 2 (set (reg:SF 33 1 [orig:117 <retval> ] [117]) (mem/c:SF (plus:DI (reg/f:DI 1 1) (const_int -16 [0xfffffffffffffff0])) [4 %sfp+48 S4 A32])) "/export/users2/liuhongt/tools-build/build_intel-innersource_ppc_debug/test.c":7:13 567 {movsf_hardfloat}