Skip to content

Commit 1dc8464

Browse files
committed
[LoongArch][NFC] Add tests for vector type nor
1 parent e5bbaa9 commit 1dc8464

File tree

2 files changed

+270
-0
lines changed
  • llvm/test/CodeGen/LoongArch

2 files changed

+270
-0
lines changed
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s
3+
; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s
4+
5+
define void @nor_v32i8(ptr %res, ptr %a0, ptr %a1) nounwind {
6+
; CHECK-LABEL: nor_v32i8:
7+
; CHECK: # %bb.0: # %entry
8+
; CHECK-NEXT: xvld $xr0, $a1, 0
9+
; CHECK-NEXT: xvld $xr1, $a2, 0
10+
; CHECK-NEXT: xvnor.v $xr0, $xr0, $xr1
11+
; CHECK-NEXT: xvst $xr0, $a0, 0
12+
; CHECK-NEXT: ret
13+
entry:
14+
%v0 = load <32 x i8>, ptr %a0
15+
%v1 = load <32 x i8>, ptr %a1
16+
%v2 = or <32 x i8> %v0, %v1
17+
%v3 = xor <32 x i8> %v2, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
18+
store <32 x i8> %v3, ptr %res
19+
ret void
20+
}
21+
22+
define void @nor_v16i16(ptr %res, ptr %a0, ptr %a1) nounwind {
23+
; CHECK-LABEL: nor_v16i16:
24+
; CHECK: # %bb.0: # %entry
25+
; CHECK-NEXT: xvld $xr0, $a1, 0
26+
; CHECK-NEXT: xvld $xr1, $a2, 0
27+
; CHECK-NEXT: xvnor.v $xr0, $xr0, $xr1
28+
; CHECK-NEXT: xvst $xr0, $a0, 0
29+
; CHECK-NEXT: ret
30+
entry:
31+
%v0 = load <16 x i16>, ptr %a0
32+
%v1 = load <16 x i16>, ptr %a1
33+
%v2 = or <16 x i16> %v0, %v1
34+
%v3 = xor <16 x i16> %v2, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
35+
store <16 x i16> %v3, ptr %res
36+
ret void
37+
}
38+
39+
define void @nor_v8i32(ptr %res, ptr %a0, ptr %a1) nounwind {
40+
; CHECK-LABEL: nor_v8i32:
41+
; CHECK: # %bb.0: # %entry
42+
; CHECK-NEXT: xvld $xr0, $a1, 0
43+
; CHECK-NEXT: xvld $xr1, $a2, 0
44+
; CHECK-NEXT: xvnor.v $xr0, $xr0, $xr1
45+
; CHECK-NEXT: xvst $xr0, $a0, 0
46+
; CHECK-NEXT: ret
47+
entry:
48+
%v0 = load <8 x i32>, ptr %a0
49+
%v1 = load <8 x i32>, ptr %a1
50+
%v2 = or <8 x i32> %v0, %v1
51+
%v3 = xor <8 x i32> %v2, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
52+
store <8 x i32> %v3, ptr %res
53+
ret void
54+
}
55+
56+
define void @nor_v4i64(ptr %res, ptr %a0, ptr %a1) nounwind {
57+
; CHECK-LABEL: nor_v4i64:
58+
; CHECK: # %bb.0: # %entry
59+
; CHECK-NEXT: xvld $xr0, $a1, 0
60+
; CHECK-NEXT: xvld $xr1, $a2, 0
61+
; CHECK-NEXT: xvnor.v $xr0, $xr0, $xr1
62+
; CHECK-NEXT: xvst $xr0, $a0, 0
63+
; CHECK-NEXT: ret
64+
entry:
65+
%v0 = load <4 x i64>, ptr %a0
66+
%v1 = load <4 x i64>, ptr %a1
67+
%v2 = or <4 x i64> %v0, %v1
68+
%v3 = xor <4 x i64> %v2, <i64 -1, i64 -1, i64 -1, i64 -1>
69+
store <4 x i64> %v3, ptr %res
70+
ret void
71+
}
72+
73+
define void @nor_u_v32i8(ptr %res, ptr %a0) nounwind {
74+
; CHECK-LABEL: nor_u_v32i8:
75+
; CHECK: # %bb.0: # %entry
76+
; CHECK-NEXT: xvld $xr0, $a1, 0
77+
; CHECK-NEXT: xvrepli.b $xr1, 31
78+
; CHECK-NEXT: xvnor.v $xr0, $xr0, $xr1
79+
; CHECK-NEXT: xvst $xr0, $a0, 0
80+
; CHECK-NEXT: ret
81+
entry:
82+
%v0 = load <32 x i8>, ptr %a0
83+
%v1 = or <32 x i8> %v0, <i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31>
84+
%v2 = xor <32 x i8> %v1, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
85+
store <32 x i8> %v2, ptr %res
86+
ret void
87+
}
88+
89+
define void @nor_u_v16i16(ptr %res, ptr %a0) nounwind {
90+
; CHECK-LABEL: nor_u_v16i16:
91+
; CHECK: # %bb.0: # %entry
92+
; CHECK-NEXT: xvld $xr0, $a1, 0
93+
; CHECK-NEXT: xvrepli.h $xr1, 31
94+
; CHECK-NEXT: xvnor.v $xr0, $xr0, $xr1
95+
; CHECK-NEXT: xvst $xr0, $a0, 0
96+
; CHECK-NEXT: ret
97+
entry:
98+
%v0 = load <16 x i16>, ptr %a0
99+
%v1 = or <16 x i16> %v0, <i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31>
100+
%v2 = xor <16 x i16> %v1, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
101+
store <16 x i16> %v2, ptr %res
102+
ret void
103+
}
104+
105+
define void @nor_u_v8i32(ptr %res, ptr %a0) nounwind {
106+
; CHECK-LABEL: nor_u_v8i32:
107+
; CHECK: # %bb.0: # %entry
108+
; CHECK-NEXT: xvld $xr0, $a1, 0
109+
; CHECK-NEXT: xvrepli.w $xr1, 31
110+
; CHECK-NEXT: xvnor.v $xr0, $xr0, $xr1
111+
; CHECK-NEXT: xvst $xr0, $a0, 0
112+
; CHECK-NEXT: ret
113+
entry:
114+
%v0 = load <8 x i32>, ptr %a0
115+
%v1 = or <8 x i32> %v0, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31>
116+
%v2 = xor <8 x i32> %v1, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
117+
store <8 x i32> %v2, ptr %res
118+
ret void
119+
}
120+
121+
define void @nor_u_v4i64(ptr %res, ptr %a0) nounwind {
122+
; CHECK-LABEL: nor_u_v4i64:
123+
; CHECK: # %bb.0: # %entry
124+
; CHECK-NEXT: xvld $xr0, $a1, 0
125+
; CHECK-NEXT: xvrepli.d $xr1, 31
126+
; CHECK-NEXT: xvnor.v $xr0, $xr0, $xr1
127+
; CHECK-NEXT: xvst $xr0, $a0, 0
128+
; CHECK-NEXT: ret
129+
entry:
130+
%v0 = load <4 x i64>, ptr %a0
131+
%v1 = or <4 x i64> %v0, <i64 31, i64 31, i64 31, i64 31>
132+
%v2 = xor <4 x i64> %v1, <i64 -1, i64 -1, i64 -1, i64 -1>
133+
store <4 x i64> %v2, ptr %res
134+
ret void
135+
}
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx < %s | FileCheck %s
3+
; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s
4+
5+
define void @nor_v16i8(ptr %res, ptr %a0, ptr %a1) nounwind {
6+
; CHECK-LABEL: nor_v16i8:
7+
; CHECK: # %bb.0: # %entry
8+
; CHECK-NEXT: vld $vr0, $a1, 0
9+
; CHECK-NEXT: vld $vr1, $a2, 0
10+
; CHECK-NEXT: vnor.v $vr0, $vr0, $vr1
11+
; CHECK-NEXT: vst $vr0, $a0, 0
12+
; CHECK-NEXT: ret
13+
entry:
14+
%v0 = load <16 x i8>, ptr %a0
15+
%v1 = load <16 x i8>, ptr %a1
16+
%v2 = or <16 x i8> %v0, %v1
17+
%v3 = xor <16 x i8> %v2, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
18+
store <16 x i8> %v3, ptr %res
19+
ret void
20+
}
21+
22+
define void @nor_v8i16(ptr %res, ptr %a0, ptr %a1) nounwind {
23+
; CHECK-LABEL: nor_v8i16:
24+
; CHECK: # %bb.0: # %entry
25+
; CHECK-NEXT: vld $vr0, $a1, 0
26+
; CHECK-NEXT: vld $vr1, $a2, 0
27+
; CHECK-NEXT: vnor.v $vr0, $vr0, $vr1
28+
; CHECK-NEXT: vst $vr0, $a0, 0
29+
; CHECK-NEXT: ret
30+
entry:
31+
%v0 = load <8 x i16>, ptr %a0
32+
%v1 = load <8 x i16>, ptr %a1
33+
%v2 = or <8 x i16> %v0, %v1
34+
%v3 = xor <8 x i16> %v2, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
35+
store <8 x i16> %v3, ptr %res
36+
ret void
37+
}
38+
39+
define void @nor_v4i32(ptr %res, ptr %a0, ptr %a1) nounwind {
40+
; CHECK-LABEL: nor_v4i32:
41+
; CHECK: # %bb.0: # %entry
42+
; CHECK-NEXT: vld $vr0, $a1, 0
43+
; CHECK-NEXT: vld $vr1, $a2, 0
44+
; CHECK-NEXT: vnor.v $vr0, $vr0, $vr1
45+
; CHECK-NEXT: vst $vr0, $a0, 0
46+
; CHECK-NEXT: ret
47+
entry:
48+
%v0 = load <4 x i32>, ptr %a0
49+
%v1 = load <4 x i32>, ptr %a1
50+
%v2 = or <4 x i32> %v0, %v1
51+
%v3 = xor <4 x i32> %v2, <i32 -1, i32 -1, i32 -1, i32 -1>
52+
store <4 x i32> %v3, ptr %res
53+
ret void
54+
}
55+
56+
define void @nor_v2i64(ptr %res, ptr %a0, ptr %a1) nounwind {
57+
; CHECK-LABEL: nor_v2i64:
58+
; CHECK: # %bb.0: # %entry
59+
; CHECK-NEXT: vld $vr0, $a1, 0
60+
; CHECK-NEXT: vld $vr1, $a2, 0
61+
; CHECK-NEXT: vnor.v $vr0, $vr0, $vr1
62+
; CHECK-NEXT: vst $vr0, $a0, 0
63+
; CHECK-NEXT: ret
64+
entry:
65+
%v0 = load <2 x i64>, ptr %a0
66+
%v1 = load <2 x i64>, ptr %a1
67+
%v2 = or <2 x i64> %v0, %v1
68+
%v3 = xor <2 x i64> %v2, <i64 -1, i64 -1>
69+
store <2 x i64> %v3, ptr %res
70+
ret void
71+
}
72+
73+
define void @nor_u_v16i8(ptr %res, ptr %a0) nounwind {
74+
; CHECK-LABEL: nor_u_v16i8:
75+
; CHECK: # %bb.0: # %entry
76+
; CHECK-NEXT: vld $vr0, $a1, 0
77+
; CHECK-NEXT: vrepli.b $vr1, 31
78+
; CHECK-NEXT: vnor.v $vr0, $vr0, $vr1
79+
; CHECK-NEXT: vst $vr0, $a0, 0
80+
; CHECK-NEXT: ret
81+
entry:
82+
%v0 = load <16 x i8>, ptr %a0
83+
%v1 = or <16 x i8> %v0, <i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31>
84+
%v2 = xor <16 x i8> %v1, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
85+
store <16 x i8> %v2, ptr %res
86+
ret void
87+
}
88+
89+
define void @nor_u_v8i16(ptr %res, ptr %a0) nounwind {
90+
; CHECK-LABEL: nor_u_v8i16:
91+
; CHECK: # %bb.0: # %entry
92+
; CHECK-NEXT: vld $vr0, $a1, 0
93+
; CHECK-NEXT: vrepli.h $vr1, 31
94+
; CHECK-NEXT: vnor.v $vr0, $vr0, $vr1
95+
; CHECK-NEXT: vst $vr0, $a0, 0
96+
; CHECK-NEXT: ret
97+
entry:
98+
%v0 = load <8 x i16>, ptr %a0
99+
%v1 = or <8 x i16> %v0, <i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31>
100+
%v2 = xor <8 x i16> %v1, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
101+
store <8 x i16> %v2, ptr %res
102+
ret void
103+
}
104+
105+
define void @nor_u_v4i32(ptr %res, ptr %a0) nounwind {
106+
; CHECK-LABEL: nor_u_v4i32:
107+
; CHECK: # %bb.0: # %entry
108+
; CHECK-NEXT: vld $vr0, $a1, 0
109+
; CHECK-NEXT: vrepli.w $vr1, 31
110+
; CHECK-NEXT: vnor.v $vr0, $vr0, $vr1
111+
; CHECK-NEXT: vst $vr0, $a0, 0
112+
; CHECK-NEXT: ret
113+
entry:
114+
%v0 = load <4 x i32>, ptr %a0
115+
%v1 = or <4 x i32> %v0, <i32 31, i32 31, i32 31, i32 31>
116+
%v2 = xor <4 x i32> %v1, <i32 -1, i32 -1, i32 -1, i32 -1>
117+
store <4 x i32> %v2, ptr %res
118+
ret void
119+
}
120+
121+
define void @nor_u_v2i64(ptr %res, ptr %a0) nounwind {
122+
; CHECK-LABEL: nor_u_v2i64:
123+
; CHECK: # %bb.0: # %entry
124+
; CHECK-NEXT: vld $vr0, $a1, 0
125+
; CHECK-NEXT: vrepli.d $vr1, 31
126+
; CHECK-NEXT: vnor.v $vr0, $vr0, $vr1
127+
; CHECK-NEXT: vst $vr0, $a0, 0
128+
; CHECK-NEXT: ret
129+
entry:
130+
%v0 = load <2 x i64>, ptr %a0
131+
%v1 = or <2 x i64> %v0, <i64 31, i64 31>
132+
%v2 = xor <2 x i64> %v1, <i64 -1, i64 -1>
133+
store <2 x i64> %v2, ptr %res
134+
ret void
135+
}

0 commit comments

Comments
 (0)