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.
