Hi Lehua,

thanks for fixing this.  Looks like the same reason we have the
separation of zvfh and zvfhmin for vector loads/stores.

> +;; Iterator for hardware-supported load/store floating-point modes.
> +(define_mode_iterator ANYLSF [(SF "TARGET_HARD_FLOAT || TARGET_ZFINX")
> +                           (DF "TARGET_DOUBLE_FLOAT || TARGET_ZDINX")
> +                           (HF "TARGET_ZFHMIN || TARGET_ZHINX")])
> +

I first thought we needed TARGET_ZFH here as well but it appears that
TARGET_ZFH implies TARGET_ZFHMIN via riscv_implied_info.  We're lacking
that on the vector side and this should be addressed separately.

You likely want TARGET_ZHINXMIN instead of ZHINX though?  I mean the
hardware support is obviously always there but the patterns should
be available for the min extension already.  Please double check as
I haven't worked with that extension before.
Our test coverage for the *inx extensions is honestly a bit sparse,
maybe you would also want to add a testcase for a similar scenario?

> -;; We can support ANYF loads into X register if there is no double support
> +;; We can support ANYLSF loads into X register if there is no double support
>  ;; or if the target is 64-bit> -(define_insn "*local_pic_load<ANYF:mode>"
> -  [(set (match_operand:ANYF 0 "register_operand" "=f,*r")
> -     (mem:ANYF (match_operand 1 "absolute_symbolic_operand" "")))
> +(define_insn "*local_pic_load<ANYLSF:mode>"
> +  [(set (match_operand:ANYLSF 0 "register_operand" "=f,*r")
> +     (mem:ANYLSF (match_operand 1 "absolute_symbolic_operand" "")))
>     (clobber (match_scratch:P 2 "=r,X"))]
>    "TARGET_HARD_FLOAT && USE_LOAD_ADDRESS_MACRO (operands[1])
>     && (!TARGET_DOUBLE_FLOAT || TARGET_64BIT)"
>    "@
> -   <ANYF:load>\t%0,%1,%2
> +   <ANYLSF:load>\t%0,%1,%2
>     <softload>\t%0,%1"
>    [(set (attr "length") (const_int 8))])

Unrelated to your patch - but from a quick glimpse here I didn't see
why we require TARGET_HARD_FLOAT for the softload alternatives.  Aren't
zdinx, zfinx, zhinx a bit of a SOFT_FLOAT thing?  Well probably just
semantics... 

Apart from that LGTM.

Regards
 Robin

Reply via email to