Hi Kewen,
On Fri, Sep 27, 2019 at 10:33:01AM +0800, Kewen.Lin wrote:
> This patch is to add the support for float from/to long conversion
> vectorization. ISA 2.06 supports the vector version instructions
> for conversion between float and long long (both signed and unsigned),
> but vectorizer can't exploit them since the optab check fails.
Nice :-)
> +;; Support signed/unsigned long long to float conversion vectorization.
> +(define_expand "vec_pack<su>_float_v2di"
> + [(match_operand:V4SF 0 "vfloat_operand")
> + (any_float:V4SF (parallel [(match_operand:V2DI 1 "vint_operand")
> + (match_operand:V2DI 2 "vint_operand")]))]
To concatenate two vectors, the syntax is vec_concat. So
[(set (match_operand:V4SF 0 "vfloat_operand")
(any_float:V4SF
(vec_concat:V4DI (match_operand:V2DI 1 "vint_operand")
(match_operand:V2DI 2 "vint_operand"))))]
It is of course a define_expand here, and it always calls DONE, so the
only thing the RTL template is used for is the match_operands; but also
important here is that you use an iterator (any_float), so you need to
work that into the template some way.
Your code would work, but it is a bit misleading, an unsuspecting reader
(*cough* me *cough*) might think this is the actual insn this expander
will create.
> +;; Support float to signed/unsigned long long conversion vectorization.
> +(define_expand "vec_unpack_<su>fix_trunc_hi_v4sf"
> + [(match_operand:V2DI 0 "vint_operand")
> + (any_fix:V2DI (match_operand:V4SF 1 "vfloat_operand"))]
Similarly here: the pattern as you wrote it isn't valid RTL.
[(set (match_operand:V2DI 0 "vint_operand")
(any_fix:V2DI (vec_select:V2SF ...
uh-oh, we do not have a mode V2SF.
Let's go with what you have then, add a comment that the template isn't
valid RTL, but you need it for the iterator?
Or can you think of a different way of putting an iterator like this in
the template? Maybe something like
(define_expand "vec_unpack_<su>fix_trunc_hi_v4sf"
[(match_operand:V2DI 0 "vint_operand")
(match_operand:V4SF 1 "vfloat_operand")
(any_fix (pc))]
works? If it does, please do that; if you cannot find a reasonably clear
syntax, go with what you had, but please add a comment saying the template
won't ever be inserted as instruction.
(Maybe one of the gen* tools complains any_fix needs a mode? :QI will do
if so, or :P if you like that better).
With either way, approved for trunk (after testing, of course). Thanks!
Segher