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

--- Comment #12 from Hongtao.liu <crazylht at gmail dot com> ---
(In reply to Hongtao.liu from comment #10)
> (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}

And it seems TARGET_ALLOW_SF_SUBREG is not needed here, there's no 64-bit move
instruction generated.

Reply via email to