================
@@ -0,0 +1,188 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 
UTC_ARGS: --version 6
+; RUN: llc -mtriple=riscv32 -mattr=+experimental-p -verify-machineinstrs < %s 
| \
+; RUN:   FileCheck %s --check-prefixes=CHECK,RV32
+; RUN: llc -mtriple=riscv64 -mattr=+experimental-p -verify-machineinstrs < %s 
| \
+; RUN:   FileCheck %s --check-prefixes=CHECK,RV64
+
+declare <4 x i16> @llvm.riscv.pwsll.v4i16.v4i8(<4 x i8>, i32)
+declare <2 x i32> @llvm.riscv.pwsll.v2i32.v2i16(<2 x i16>, i32)
+declare <4 x i16> @llvm.riscv.pwsla.v4i16.v4i8(<4 x i8>, i32)
+declare <2 x i32> @llvm.riscv.pwsla.v2i32.v2i16(<2 x i16>, i32)
+
+define <4 x i16> @pwsll_v4i8(<4 x i8> %x, i16 %shamt) {
+; RV32-LABEL: pwsll_v4i8:
+; RV32:       # %bb.0:
+; RV32-NEXT:    pwsll.bs a0, a0, a1
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: pwsll_v4i8:
+; RV64:       # %bb.0:
+; RV64-NEXT:    pwcvtu.wb a0, a0
+; RV64-NEXT:    psll.hs a0, a0, a1
+; RV64-NEXT:    ret
+  %shamt.ext = zext i16 %shamt to i32
+  %res = call <4 x i16> @llvm.riscv.pwsll.v4i16.v4i8(<4 x i8> %x, i32 
%shamt.ext)
+  ret <4 x i16> %res
+}
+
+define <2 x i32> @pwsll_v2i16(<2 x i16> %x, i32 %shamt) {
+; RV32-LABEL: pwsll_v2i16:
+; RV32:       # %bb.0:
+; RV32-NEXT:    pwsll.hs a0, a0, a1
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: pwsll_v2i16:
+; RV64:       # %bb.0:
+; RV64-NEXT:    pwcvtu.wh a0, a0
+; RV64-NEXT:    psll.ws a0, a0, a1
+; RV64-NEXT:    ret
+  %res = call <2 x i32> @llvm.riscv.pwsll.v2i32.v2i16(<2 x i16> %x, i32 %shamt)
+  ret <2 x i32> %res
+}
+
+define <4 x i16> @pwsla_v4i8(<4 x i8> %x, i16 %shamt) {
+; RV32-LABEL: pwsla_v4i8:
+; RV32:       # %bb.0:
+; RV32-NEXT:    pwsla.bs a0, a0, a1
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: pwsla_v4i8:
+; RV64:       # %bb.0:
+; RV64-NEXT:    pwcvtu.wb a0, a0
+; RV64-NEXT:    psext.h.b a0, a0
+; RV64-NEXT:    psll.hs a0, a0, a1
+; RV64-NEXT:    ret
+  %shamt.ext = zext i16 %shamt to i32
+  %res = call <4 x i16> @llvm.riscv.pwsla.v4i16.v4i8(<4 x i8> %x, i32 
%shamt.ext)
+  ret <4 x i16> %res
+}
+
+define <2 x i32> @pwsla_v2i16(<2 x i16> %x, i32 %shamt) {
+; RV32-LABEL: pwsla_v2i16:
+; RV32:       # %bb.0:
+; RV32-NEXT:    pwsla.hs a0, a0, a1
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: pwsla_v2i16:
+; RV64:       # %bb.0:
+; RV64-NEXT:    pwcvtu.wh a0, a0
+; RV64-NEXT:    psext.w.h a0, a0
+; RV64-NEXT:    psll.ws a0, a0, a1
+; RV64-NEXT:    ret
+  %res = call <2 x i32> @llvm.riscv.pwsla.v2i32.v2i16(<2 x i16> %x, i32 %shamt)
+  ret <2 x i32> %res
+}
+
+define <4 x i16> @pwslli_v4i8(<4 x i8> %x) {
+; RV32-LABEL: pwslli_v4i8:
+; RV32:       # %bb.0:
+; RV32-NEXT:    pwslli.b a0, a0, 3
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: pwslli_v4i8:
+; RV64:       # %bb.0:
+; RV64-NEXT:    pwcvtu.wb a0, a0
+; RV64-NEXT:    pslli.h a0, a0, 3
+; RV64-NEXT:    ret
+  %res = call <4 x i16> @llvm.riscv.pwsll.v4i16.v4i8(<4 x i8> %x, i32 3)
+  ret <4 x i16> %res
+}
+
+define <2 x i32> @pwslli_v2i16(<2 x i16> %x) {
+; RV32-LABEL: pwslli_v2i16:
+; RV32:       # %bb.0:
+; RV32-NEXT:    pwslli.h a0, a0, 7
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: pwslli_v2i16:
+; RV64:       # %bb.0:
+; RV64-NEXT:    pwcvtu.wh a0, a0
+; RV64-NEXT:    pslli.w a0, a0, 7
+; RV64-NEXT:    ret
+  %res = call <2 x i32> @llvm.riscv.pwsll.v2i32.v2i16(<2 x i16> %x, i32 7)
+  ret <2 x i32> %res
+}
+
+define <4 x i16> @pwslai_v4i8(<4 x i8> %x) {
+; RV32-LABEL: pwslai_v4i8:
+; RV32:       # %bb.0:
+; RV32-NEXT:    pwslai.b a0, a0, 3
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: pwslai_v4i8:
+; RV64:       # %bb.0:
+; RV64-NEXT:    pwcvtu.wb a0, a0
+; RV64-NEXT:    psext.h.b a0, a0
+; RV64-NEXT:    pslli.h a0, a0, 3
+; RV64-NEXT:    ret
+  %res = call <4 x i16> @llvm.riscv.pwsla.v4i16.v4i8(<4 x i8> %x, i32 3)
+  ret <4 x i16> %res
+}
+
+define <2 x i32> @pwslai_v2i16(<2 x i16> %x) {
+; RV32-LABEL: pwslai_v2i16:
+; RV32:       # %bb.0:
+; RV32-NEXT:    pwslai.h a0, a0, 7
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: pwslai_v2i16:
+; RV64:       # %bb.0:
+; RV64-NEXT:    pwcvtu.wh a0, a0
+; RV64-NEXT:    psext.w.h a0, a0
+; RV64-NEXT:    pslli.w a0, a0, 7
+; RV64-NEXT:    ret
+  %res = call <2 x i32> @llvm.riscv.pwsla.v2i32.v2i16(<2 x i16> %x, i32 7)
+  ret <2 x i32> %res
+}
+
+define <4 x i16> @pwslli_v4i8_31(<4 x i8> %x) {
+; RV32-LABEL: pwslli_v4i8_31:
+; RV32:       # %bb.0:
+; RV32-NEXT:    li a1, 31
+; RV32-NEXT:    pwsll.bs a0, a0, a1
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: pwslli_v4i8_31:
+; RV64:       # %bb.0:
+; RV64-NEXT:    li a1, 31
+; RV64-NEXT:    pwcvtu.wb a0, a0
+; RV64-NEXT:    psll.hs a0, a0, a1
+; RV64-NEXT:    ret
+  %res = call <4 x i16> @llvm.riscv.pwsll.v4i16.v4i8(<4 x i8> %x, i32 31)
+  ret <4 x i16> %res
+}
+
+define <4 x i16> @pwslai_v4i8_16(<4 x i8> %x) {
+; RV32-LABEL: pwslai_v4i8_16:
+; RV32:       # %bb.0:
+; RV32-NEXT:    li a1, 16
+; RV32-NEXT:    pwsla.bs a0, a0, a1
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: pwslai_v4i8_16:
+; RV64:       # %bb.0:
+; RV64-NEXT:    li a1, 16
+; RV64-NEXT:    pwcvtu.wb a0, a0
+; RV64-NEXT:    psext.h.b a0, a0
+; RV64-NEXT:    psll.hs a0, a0, a1
+; RV64-NEXT:    ret
+  %res = call <4 x i16> @llvm.riscv.pwsla.v4i16.v4i8(<4 x i8> %x, i32 16)
+  ret <4 x i16> %res
+}
+
+define <2 x i32> @pwslli_v2i16_31(<2 x i16> %x) {
+; RV32-LABEL: pwslli_v2i16_31:
+; RV32:       # %bb.0:
+; RV32-NEXT:    pwslli.h a0, a0, 31
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: pwslli_v2i16_31:
+; RV64:       # %bb.0:
+; RV64-NEXT:    pwcvtu.wh a0, a0
+; RV64-NEXT:    pslli.w a0, a0, 31
+; RV64-NEXT:    ret
+  %res = call <2 x i32> @llvm.riscv.pwsll.v2i32.v2i16(<2 x i16> %x, i32 31)
+  ret <2 x i32> %res
+}
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add 
tests below this line:
+; CHECK: {{.*}}
----------------
topperc wrote:

Drop CHECK from the RUN lines.

https://github.com/llvm/llvm-project/pull/224790
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to