Hi Tejas,
On Wed, Aug 21, 2019 at 10:56:51PM +0530, Tejas Joshi wrote:
> I have the following code which uses unspec but I am really missing
> something here. Does unspec not work encapsulating plus? Or I have
> some more places to make changes to?
>
> (define_insn "add_truncdfsf3"
> [(set (match_operand:SF 0 "gpc_reg_operand" "=<Ff>,wa")
> (unspec:SF
> [(plus:DF (match_operand:DF 1 "gpc_reg_operand" "%<Ff>,wa")
> (match_operand:DF 2 "gpc_reg_operand" "<Ff>,wa"))]
> UNSPEC_ADD_TRUNCATE))]
> "TARGET_HARD_FLOAT"
> "@
> fadds %0,%1,%2
> xsaddsp %x0,%x1,%x2"
> [(set_attr "type" "fp")])
This does almost exactly the same as what the proposed float_narrow
would do. Instead, write it as
(define_insn "add_truncdfsf3"
[(set (match_operand:SF 0 "gpc_reg_operand" "=<Ff>,wa")
(unspec:SF [(match_operand:DF 1 "gpc_reg_operand" "%<Ff>,wa")
(match_operand:DF 2 "gpc_reg_operand" "<Ff>,wa")]
UNSPEC_ADD_TRUNCATE)]
"TARGET_HARD_FLOAT"
"@
fadds %0,%1,%2
xsaddsp %x0,%x1,%x2"
[(set_attr "type" "fp")
(set_attr "isa" "*,p8v")])
(note the "isa" attribute)
to prevent any folding etc. from happening to it.
> and an UNSPEC_ADD_TRUNCATE in unspec enum.
UNSPEC_ADD_NARROWING?
Segher