Skip to content

Commit 9787240

Browse files
committed
[RISCV][test] Add tests for extending negated mask
1 parent 747588d commit 9787240

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
3+
; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
4+
5+
define <vscale x 8 x i8> @mask_sext_not_nxv8i8(<vscale x 8 x i1> %m) {
6+
; CHECK-LABEL: mask_sext_not_nxv8i8:
7+
; CHECK: # %bb.0:
8+
; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
9+
; CHECK-NEXT: vmnot.m v0, v0
10+
; CHECK-NEXT: vmv.v.i v8, 0
11+
; CHECK-NEXT: vmerge.vim v8, v8, -1, v0
12+
; CHECK-NEXT: ret
13+
%not = xor <vscale x 8 x i1> %m, splat (i1 true)
14+
%ext = sext <vscale x 8 x i1> %not to <vscale x 8 x i8>
15+
ret <vscale x 8 x i8> %ext
16+
}
17+
18+
define <vscale x 8 x i8> @mask_zext_not_nxv8i8(<vscale x 8 x i1> %m) {
19+
; CHECK-LABEL: mask_zext_not_nxv8i8:
20+
; CHECK: # %bb.0:
21+
; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
22+
; CHECK-NEXT: vmnot.m v0, v0
23+
; CHECK-NEXT: vmv.v.i v8, 0
24+
; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
25+
; CHECK-NEXT: ret
26+
%not = xor <vscale x 8 x i1> %m, splat (i1 true)
27+
%ext = zext <vscale x 8 x i1> %not to <vscale x 8 x i8>
28+
ret <vscale x 8 x i8> %ext
29+
}
30+
31+
define <8 x i8> @mask_sext_not_v8i8(<8 x i1> %m) {
32+
; CHECK-LABEL: mask_sext_not_v8i8:
33+
; CHECK: # %bb.0:
34+
; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
35+
; CHECK-NEXT: vmnot.m v0, v0
36+
; CHECK-NEXT: vmv.v.i v8, 0
37+
; CHECK-NEXT: vmerge.vim v8, v8, -1, v0
38+
; CHECK-NEXT: ret
39+
%not = xor <8 x i1> %m, splat (i1 true)
40+
%ext = sext <8 x i1> %not to <8 x i8>
41+
ret <8 x i8> %ext
42+
}
43+
44+
define <8 x i8> @mask_zext_not_v8i8(<8 x i1> %m) {
45+
; CHECK-LABEL: mask_zext_not_v8i8:
46+
; CHECK: # %bb.0:
47+
; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
48+
; CHECK-NEXT: vmnot.m v0, v0
49+
; CHECK-NEXT: vmv.v.i v8, 0
50+
; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
51+
; CHECK-NEXT: ret
52+
%not = xor <8 x i1> %m, splat (i1 true)
53+
%ext = zext <8 x i1> %not to <8 x i8>
54+
ret <8 x i8> %ext
55+
}
56+
57+
define <vscale x 8 x i8> @mask_sext_xor_nxv8i8(<vscale x 8 x i1> %m, <vscale x 8 x i1> %x) {
58+
; CHECK-LABEL: mask_sext_xor_nxv8i8:
59+
; CHECK: # %bb.0:
60+
; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
61+
; CHECK-NEXT: vmxor.mm v0, v0, v8
62+
; CHECK-NEXT: vmv.v.i v8, 0
63+
; CHECK-NEXT: vmerge.vim v8, v8, -1, v0
64+
; CHECK-NEXT: ret
65+
%xor = xor <vscale x 8 x i1> %m, %x
66+
%ext = sext <vscale x 8 x i1> %xor to <vscale x 8 x i8>
67+
ret <vscale x 8 x i8> %ext
68+
}
69+
70+
define <vscale x 8 x i8> @mask_zext_xor_nxv8i8(<vscale x 8 x i1> %m, <vscale x 8 x i1> %x) {
71+
; CHECK-LABEL: mask_zext_xor_nxv8i8:
72+
; CHECK: # %bb.0:
73+
; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
74+
; CHECK-NEXT: vmxor.mm v0, v0, v8
75+
; CHECK-NEXT: vmv.v.i v8, 0
76+
; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
77+
; CHECK-NEXT: ret
78+
%xor = xor <vscale x 8 x i1> %m, %x
79+
%ext = zext <vscale x 8 x i1> %xor to <vscale x 8 x i8>
80+
ret <vscale x 8 x i8> %ext
81+
}
82+
83+
define <8 x i8> @mask_sext_xor_v8i8(<8 x i1> %m) {
84+
; CHECK-LABEL: mask_sext_xor_v8i8:
85+
; CHECK: # %bb.0:
86+
; CHECK-NEXT: li a0, 85
87+
; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
88+
; CHECK-NEXT: vmv.s.x v8, a0
89+
; CHECK-NEXT: vmxor.mm v0, v0, v8
90+
; CHECK-NEXT: vmv.v.i v8, 0
91+
; CHECK-NEXT: vmerge.vim v8, v8, -1, v0
92+
; CHECK-NEXT: ret
93+
%xor = xor <8 x i1> %m, <i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0>
94+
%ext = sext <8 x i1> %xor to <8 x i8>
95+
ret <8 x i8> %ext
96+
}
97+
98+
define <8 x i8> @mask_zext_xor_v8i8(<8 x i1> %m) {
99+
; CHECK-LABEL: mask_zext_xor_v8i8:
100+
; CHECK: # %bb.0:
101+
; CHECK-NEXT: li a0, 85
102+
; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
103+
; CHECK-NEXT: vmv.s.x v8, a0
104+
; CHECK-NEXT: vmxor.mm v0, v0, v8
105+
; CHECK-NEXT: vmv.v.i v8, 0
106+
; CHECK-NEXT: vmerge.vim v8, v8, 1, v0
107+
; CHECK-NEXT: ret
108+
%xor = xor <8 x i1> %m, <i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0>
109+
%ext = zext <8 x i1> %xor to <8 x i8>
110+
ret <8 x i8> %ext
111+
}

0 commit comments

Comments
 (0)