[llvm] [RISCV] Teach the VL Optimizer about Zvzip instructions (PR #214405)
Pengcheng Wang via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 6 04:46:25 PDT 2026
================
@@ -2423,3 +2424,111 @@ body: |
%2:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 5 /* e32 */, 3 /* ta, ma */
PseudoVSOXSEG3EI32_V_M1_M2 $noreg, $noreg, %2, 1, 6 /* e64 */
...
+---
+name: vzip_vv_vd
+body: |
+ bb.0:
+ ; CHECK-LABEL: name: vzip_vv_vd
+ ; CHECK: early-clobber %0:vrm2 = PseudoVZIP_VV_M1 $noreg, $noreg, $noreg, 1 /* vl */, 5 /* e32 */, 0 /* tu, mu */
+ ; CHECK-NEXT: [[PseudoVADD_VV_M2_:%[0-9]+]]:vrm2 = PseudoVADD_VV_M2 $noreg, %0, $noreg, 1 /* vl */, 5 /* e32 */, 0 /* tu, mu */
+ ; CHECK-NEXT: $v8m2 = COPY [[PseudoVADD_VV_M2_]]
+ early-clobber %0:vrm2 = PseudoVZIP_VV_M1 $noreg, $noreg, $noreg, -1, 5, 0
+ %1:vrm2 = PseudoVADD_VV_M2 $noreg, %0, $noreg, 1, 5, 0
+ $v8m2 = COPY %1
+...
+---
+name: vzip_vv_incompatible_eew
+body: |
+ bb.0:
+ ; CHECK-LABEL: name: vzip_vv_incompatible_eew
+ ; CHECK: early-clobber %0:vrm2 = PseudoVZIP_VV_M1 $noreg, $noreg, $noreg, -1 /* vl=VLMAX */, 5 /* e32 */, 0 /* tu, mu */
+ ; CHECK-NEXT: [[PseudoVADD_VV_M2_:%[0-9]+]]:vrm2 = PseudoVADD_VV_M2 $noreg, %0, $noreg, 1 /* vl */, 4 /* e16 */, 0 /* tu, mu */
+ ; CHECK-NEXT: $v8m2 = COPY [[PseudoVADD_VV_M2_]]
+ early-clobber %0:vrm2 = PseudoVZIP_VV_M1 $noreg, $noreg, $noreg, -1, 5, 0
+ %1:vrm2 = PseudoVADD_VV_M2 $noreg, %0, $noreg, 1, 4, 0
+ $v8m2 = COPY %1
+...
+---
+name: vunzipe_v
+body: |
+ bb.0:
+ ; CHECK-LABEL: name: vunzipe_v
+ ; CHECK: early-clobber %0:vr = PseudoVUNZIPE_V_M1 $noreg, $noreg, 1 /* vl */, 5 /* e32 */, 0 /* tu, mu */
+ ; CHECK-NEXT: [[PseudoVADD_VV_M1_:%[0-9]+]]:vr = PseudoVADD_VV_M1 $noreg, %0, $noreg, 1 /* vl */, 5 /* e32 */, 0 /* tu, mu */
+ ; CHECK-NEXT: $v8 = COPY [[PseudoVADD_VV_M1_]]
+ early-clobber %0:vr = PseudoVUNZIPE_V_M1 $noreg, $noreg, -1, 5, 0
+ %1:vr = PseudoVADD_VV_M1 $noreg, %0, $noreg, 1, 5, 0
+ $v8 = COPY %1
+...
+---
+name: vunzipo_v
+body: |
+ bb.0:
+ ; CHECK-LABEL: name: vunzipo_v
+ ; CHECK: early-clobber %0:vr = PseudoVUNZIPO_V_M1 $noreg, $noreg, 1 /* vl */, 5 /* e32 */, 0 /* tu, mu */
+ ; CHECK-NEXT: [[PseudoVADD_VV_M1_:%[0-9]+]]:vr = PseudoVADD_VV_M1 $noreg, %0, $noreg, 1 /* vl */, 5 /* e32 */, 0 /* tu, mu */
+ ; CHECK-NEXT: $v8 = COPY [[PseudoVADD_VV_M1_]]
+ early-clobber %0:vr = PseudoVUNZIPO_V_M1 $noreg, $noreg, -1, 5, 0
+ %1:vr = PseudoVADD_VV_M1 $noreg, %0, $noreg, 1, 5, 0
+ $v8 = COPY %1
+...
+---
+name: vunzipe_incompatible_eew
+body: |
+ bb.0:
+ ; CHECK-LABEL: name: vunzipe_incompatible_eew
+ ; CHECK: early-clobber %0:vr = PseudoVUNZIPE_V_M1 $noreg, $noreg, -1 /* vl=VLMAX */, 5 /* e32 */, 0 /* tu, mu */
+ ; CHECK-NEXT: [[PseudoVADD_VV_M1_:%[0-9]+]]:vr = PseudoVADD_VV_M1 $noreg, %0, $noreg, 1 /* vl */, 4 /* e16 */, 0 /* tu, mu */
+ ; CHECK-NEXT: $v8 = COPY [[PseudoVADD_VV_M1_]]
+ early-clobber %0:vr = PseudoVUNZIPE_V_M1 $noreg, $noreg, -1, 5, 0
+ %1:vr = PseudoVADD_VV_M1 $noreg, %0, $noreg, 1, 4, 0
+ $v8 = COPY %1
+...
+---
+name: vunzipe_src_propagate
+body: |
+ bb.0:
+ ; CHECK-LABEL: name: vunzipe_src_propagate
+ ; CHECK: %src:vrm2 = PseudoVADD_VV_M2 $noreg, $noreg, $noreg, 1 /* vl */, 5 /* e32 */, 0 /* tu, mu */
----------------
wangpc-pp wrote:
Done in https://github.com/llvm/llvm-project/pull/214405/commits/a63fd12372cad0b19d020e3cb8ac6c0db9deb1da. TBH, Zvzip is too special.
https://github.com/llvm/llvm-project/pull/214405
More information about the llvm-commits
mailing list