Hi, Ruoyao:

When will it be convenient for you to submit the v2 version of the patch?

I am planning to merge the current patches and then test the optimal values

for -malign-{functions,labels,jumps,loops} on that basis.


在 2025/2/12 上午3:30, Xi Ruoyao 写道:
On Tue, 2025-02-11 at 16:52 +0800, Lulu Cheng wrote:
在 2025/2/7 下午8:09, Xi Ruoyao 写道:
/* snip */
-
-(define_insn "lasx_xvpickev_w"
-  [(set (match_operand:V8SI 0 "register_operand" "=f")
-       (vec_select:V8SI
-         (vec_concat:V16SI
-           (match_operand:V8SI 1 "register_operand" "f")
-           (match_operand:V8SI 2 "register_operand" "f"))
-         (parallel [(const_int 0) (const_int 2)
-                    (const_int 8) (const_int 10)
-                    (const_int 4) (const_int 6)
-                    (const_int 12) (const_int 14)])))]
-  "ISA_HAS_LASX"
-  "xvpickev.w\t%u0,%u2,%u1"
-  [(set_attr "type" "simd_permute")
-   (set_attr "mode" "V8SI")])
-
/* snip */
+;; Picking even/odd elements.
+(define_insn "simd_pick_evod_<mode>"
+  [(set (match_operand:ALLVEC 0 "register_operand" "=f")
+       (vec_select:ALLVEC
+         (vec_concat:<LVEC>
+           (match_operand:ALLVEC 1 "register_operand" "f")
+           (match_operand:ALLVEC 2 "register_operand" "f"))
+         (match_operand:<LVEC> 3 "vect_par_cnst_even_or_odd_half")))]
For LASX, the generated select array is problematic, taking xvpickev.w
as an example:

xvpickev.w  vd,vj,vk

The behavior of the instruction is as follows:

vd.w[0] = vk.w[0]

vd.w[1] = vk.w[2]

vd.w[2] = vj.w[0]

vd.w[3] = vj.w[2]

vd.w[4] = vk.w[4]

vd.w[5] = vk.w[6]

vd.w[6] = vj.w[4]

vd.w[7] = vj.w[6]
Oops stupid I.  Strangely the bootstrapping (even with BOOT_CFLAGS="-O2
-g -march=la664") and regtesting cannot catch it.

I'll limit this to LSX in v2.


Reply via email to