On Wed, Aug 14, 2019 at 11:51:28AM +0530, Tejas Joshi wrote:
> > The RTL needs to be something that
> > does *not* match the combination of separate operations (just as fma has
> > its own RTL, and a separate pass is responsible for converting separate
> 
> So do I need to introduce fadd's own RTL just as fma which would emit
> a fused instruction while -ffp-contract is default (fast) and would
> emit separate instructions like add in DFmode and then truncate to SF?
> while -ffp-contract=off ? (just as fma)

I think you can do one RTL code that replaces float_truncate in

> > > > (define_insn "add_truncdfsf3"
> > > >   [(set (match_operand:SF 0 "gpc_reg_operand" "=f,wa")
> > > >     (float_truncate:SF
> > > >       (plus:DF (match_operand:DF 1 "gpc_reg_operand" "%d,wa")
> > > >                (match_operand:DF 2 "gpc_reg_operand" "d,wa"))))]

but that is only meant for such explicit contraction.  This can then
happily be used to implement all such patterns.  Is there some issue
with that I overlook?

A good name for this...  I would say "float_contract", because I like
horrible names.  It shouldn't be hard to think of something better :-)


Segher

Reply via email to