Skip to content

Commit d734733

Browse files
SubashBoopathisys-ce-bb
authored andcommitted
Two tests Ported from the LLVM Project to Translator (#3342)
Ported two tests from the LLVM project to the SPIRV-LLVM-Translator: icmp.ll validates integer comparison instructions for scalar and vector types, and fp-vector-intrinsics.ll verifies floating-point vector intrinsics, ensuring accurate SPIR-V translation. Original commit: KhronosGroup/SPIRV-LLVM-Translator@095a8c29e9dc336
1 parent ea153ee commit d734733

File tree

2 files changed

+475
-0
lines changed

2 files changed

+475
-0
lines changed
Lines changed: 310 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,310 @@
1+
; RUN: llvm-as %s -o %t.bc
2+
; RUN: llvm-spirv %t.bc -spirv-text -o - | FileCheck %s --check-prefix=CHECK-SPIRV
3+
; RUN: llvm-spirv %t.bc -o %t.spv
4+
; RUN: spirv-val %t.spv
5+
; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
6+
; RUN: llvm-dis %t.rev.bc -o - | FileCheck %s --check-prefix=CHECK-LLVM
7+
8+
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64"
9+
target triple = "spir64"
10+
11+
; CHECK-SPIRV-DAG: Name [[#EQ:]] "test_eq"
12+
; CHECK-SPIRV-DAG: Name [[#NE:]] "test_ne"
13+
; CHECK-SPIRV-DAG: Name [[#ULT:]] "test_ult"
14+
; CHECK-SPIRV-DAG: Name [[#SLT:]] "test_slt"
15+
; CHECK-SPIRV-DAG: Name [[#ULE:]] "test_ule"
16+
; CHECK-SPIRV-DAG: Name [[#SLE:]] "test_sle"
17+
; CHECK-SPIRV-DAG: Name [[#UGT:]] "test_ugt"
18+
; CHECK-SPIRV-DAG: Name [[#SGT:]] "test_sgt"
19+
; CHECK-SPIRV-DAG: Name [[#UGE:]] "test_uge"
20+
; CHECK-SPIRV-DAG: Name [[#SGE:]] "test_sge"
21+
; CHECK-SPIRV-DAG: Name [[#v3EQ:]] "test_v3_eq"
22+
; CHECK-SPIRV-DAG: Name [[#v3NE:]] "test_v3_ne"
23+
; CHECK-SPIRV-DAG: Name [[#v3ULT:]] "test_v3_ult"
24+
; CHECK-SPIRV-DAG: Name [[#v3SLT:]] "test_v3_slt"
25+
; CHECK-SPIRV-DAG: Name [[#v3ULE:]] "test_v3_ule"
26+
; CHECK-SPIRV-DAG: Name [[#v3SLE:]] "test_v3_sle"
27+
; CHECK-SPIRV-DAG: Name [[#v3UGT:]] "test_v3_ugt"
28+
; CHECK-SPIRV-DAG: Name [[#v3SGT:]] "test_v3_sgt"
29+
; CHECK-SPIRV-DAG: Name [[#v3UGE:]] "test_v3_uge"
30+
; CHECK-SPIRV-DAG: Name [[#v3SGE:]] "test_v3_sge"
31+
32+
; CHECK-SPIRV-DAG: Function [[#]] [[#EQ]] [[#]] [[#]]
33+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
34+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
35+
; CHECK-SPIRV-DAG: Label [[#]]
36+
; CHECK-SPIRV-DAG: IEqual [[#]] [[#R:]] [[#A]] [[#B]]
37+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
38+
; CHECK-SPIRV-DAG: FunctionEnd
39+
; CHECK-LLVM-DAG: icmp eq
40+
41+
define i1 @test_eq(i32 %a, i32 %b) {
42+
%r = icmp eq i32 %a, %b
43+
ret i1 %r
44+
}
45+
46+
; CHECK-SPIRV-DAG: Function [[#]] [[#NE]] [[#]] [[#]]
47+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
48+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
49+
; CHECK-SPIRV-DAG: Label [[#]]
50+
; CHECK-SPIRV-DAG: INotEqual [[#]] [[#R:]] [[#A]] [[#B]]
51+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
52+
; CHECK-SPIRV-DAG: FunctionEnd
53+
; CHECK-LLVM-DAG: icmp ne
54+
55+
define i1 @test_ne(i32 %a, i32 %b) {
56+
%r = icmp ne i32 %a, %b
57+
ret i1 %r
58+
}
59+
60+
; CHECK-SPIRV-DAG: Function [[#]] [[#SLT]] [[#]] [[#]]
61+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
62+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
63+
; CHECK-SPIRV-DAG: Label [[#]]
64+
; CHECK-SPIRV-DAG: SLessThan [[#]] [[#R:]] [[#A]] [[#B]]
65+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
66+
; CHECK-SPIRV-DAG: FunctionEnd
67+
; CHECK-LLVM-DAG: icmp slt
68+
69+
define i1 @test_slt(i32 %a, i32 %b) {
70+
%r = icmp slt i32 %a, %b
71+
ret i1 %r
72+
}
73+
74+
; CHECK-SPIRV-DAG: Function [[#]] [[#ULT]] [[#]] [[#]]
75+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
76+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
77+
; CHECK-SPIRV-DAG: Label [[#]]
78+
; CHECK-SPIRV-DAG: ULessThan [[#]] [[#R:]] [[#A]] [[#B]]
79+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
80+
; CHECK-SPIRV-DAG: FunctionEnd
81+
; CHECK-LLVM-DAG: icmp ult
82+
83+
define i1 @test_ult(i32 %a, i32 %b) {
84+
%r = icmp ult i32 %a, %b
85+
ret i1 %r
86+
}
87+
88+
; CHECK-SPIRV-DAG: Function [[#]] [[#ULE]] [[#]] [[#]]
89+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
90+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
91+
; CHECK-SPIRV-DAG: Label [[#]]
92+
; CHECK-SPIRV-DAG: ULessThanEqual [[#]] [[#R:]] [[#A]] [[#B]]
93+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
94+
; CHECK-SPIRV-DAG: FunctionEnd
95+
; CHECK-LLVM-DAG: icmp ule
96+
97+
define i1 @test_ule(i32 %a, i32 %b) {
98+
%r = icmp ule i32 %a, %b
99+
ret i1 %r
100+
}
101+
102+
; CHECK-SPIRV-DAG: Function [[#]] [[#SLE]] [[#]] [[#]]
103+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
104+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
105+
; CHECK-SPIRV-DAG: Label [[#]]
106+
; CHECK-SPIRV-DAG: SLessThanEqual [[#]] [[#R:]] [[#A]] [[#B]]
107+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
108+
; CHECK-SPIRV-DAG: FunctionEnd
109+
; CHECK-LLVM-DAG: icmp sle
110+
111+
define i1 @test_sle(i32 %a, i32 %b) {
112+
%r = icmp sle i32 %a, %b
113+
ret i1 %r
114+
}
115+
116+
; CHECK-SPIRV-DAG: Function [[#]] [[#UGT]] [[#]] [[#]]
117+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
118+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
119+
; CHECK-SPIRV-DAG: Label [[#]]
120+
; CHECK-SPIRV-DAG: UGreaterThan [[#]] [[#R:]] [[#A]] [[#B]]
121+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
122+
; CHECK-SPIRV-DAG: FunctionEnd
123+
; CHECK-LLVM-DAG: icmp ugt
124+
125+
define i1 @test_ugt(i32 %a, i32 %b) {
126+
%r = icmp ugt i32 %a, %b
127+
ret i1 %r
128+
}
129+
130+
; CHECK-SPIRV-DAG: Function [[#]] [[#SGT]] [[#]] [[#]]
131+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
132+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
133+
; CHECK-SPIRV-DAG: Label [[#]]
134+
; CHECK-SPIRV-DAG: SGreaterThan [[#]] [[#R:]] [[#A]] [[#B]]
135+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
136+
; CHECK-SPIRV-DAG: FunctionEnd
137+
; CHECK-LLVM-DAG: icmp sgt
138+
139+
define i1 @test_sgt(i32 %a, i32 %b) {
140+
%r = icmp sgt i32 %a, %b
141+
ret i1 %r
142+
}
143+
144+
; CHECK-SPIRV-DAG: Function [[#]] [[#UGE]] [[#]] [[#]]
145+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
146+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
147+
; CHECK-SPIRV-DAG: Label [[#]]
148+
; CHECK-SPIRV-DAG: UGreaterThanEqual [[#]] [[#R:]] [[#A]] [[#B]]
149+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
150+
; CHECK-SPIRV-DAG: FunctionEnd
151+
; CHECK-LLVM-DAG: icmp uge
152+
153+
define i1 @test_uge(i32 %a, i32 %b) {
154+
%r = icmp uge i32 %a, %b
155+
ret i1 %r
156+
}
157+
158+
; CHECK-SPIRV-DAG: Function [[#]] [[#SGE]] [[#]] [[#]]
159+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
160+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
161+
; CHECK-SPIRV-DAG: Label [[#]]
162+
; CHECK-SPIRV-DAG: SGreaterThanEqual [[#]] [[#R:]] [[#A]] [[#B]]
163+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
164+
; CHECK-SPIRV-DAG: FunctionEnd
165+
; CHECK-LLVM-DAG: icmp sge
166+
167+
define i1 @test_sge(i32 %a, i32 %b) {
168+
%r = icmp sge i32 %a, %b
169+
ret i1 %r
170+
}
171+
172+
; CHECK-SPIRV-DAG: Function [[#]] [[#v3EQ]] [[#]] [[#]]
173+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
174+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
175+
; CHECK-SPIRV-DAG: Label [[#]]
176+
; CHECK-SPIRV-DAG: IEqual [[#]] [[#R:]] [[#A]] [[#B]]
177+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
178+
; CHECK-SPIRV-DAG: FunctionEnd
179+
; CHECK-LLVM-DAG: icmp eq
180+
181+
define <3 x i1> @test_v3_eq(<3 x i32> %a, <3 x i32> %b) {
182+
%r = icmp eq <3 x i32> %a, %b
183+
ret <3 x i1> %r
184+
}
185+
186+
; CHECK-SPIRV-DAG: Function [[#]] [[#v3NE]] [[#]] [[#]]
187+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
188+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
189+
; CHECK-SPIRV-DAG: Label [[#]]
190+
; CHECK-SPIRV-DAG: INotEqual [[#]] [[#R:]] [[#A]] [[#B]]
191+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
192+
; CHECK-SPIRV-DAG: FunctionEnd
193+
; CHECK-LLVM-DAG: icmp ne
194+
195+
define <3 x i1> @test_v3_ne(<3 x i32> %a, <3 x i32> %b) {
196+
%r = icmp ne <3 x i32> %a, %b
197+
ret <3 x i1> %r
198+
}
199+
200+
; CHECK-SPIRV-DAG: Function [[#]] [[#v3SLT]] [[#]] [[#]]
201+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
202+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
203+
; CHECK-SPIRV-DAG: Label [[#]]
204+
; CHECK-SPIRV-DAG: SLessThan [[#]] [[#R:]] [[#A]] [[#B]]
205+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
206+
; CHECK-SPIRV-DAG: FunctionEnd
207+
; CHECK-LLVM-DAG: icmp slt
208+
209+
define <3 x i1> @test_v3_slt(<3 x i32> %a, <3 x i32> %b) {
210+
%r = icmp slt <3 x i32> %a, %b
211+
ret <3 x i1> %r
212+
}
213+
214+
; CHECK-SPIRV-DAG: Function [[#]] [[#v3ULT]] [[#]] [[#]]
215+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
216+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
217+
; CHECK-SPIRV-DAG: Label [[#]]
218+
; CHECK-SPIRV-DAG: ULessThan [[#]] [[#R:]] [[#A]] [[#B]]
219+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
220+
; CHECK-SPIRV-DAG: FunctionEnd
221+
; CHECK-LLVM-DAG: icmp ult
222+
223+
define <3 x i1> @test_v3_ult(<3 x i32> %a, <3 x i32> %b) {
224+
%r = icmp ult <3 x i32> %a, %b
225+
ret <3 x i1> %r
226+
}
227+
228+
; CHECK-SPIRV-DAG: Function [[#]] [[#v3ULE]] [[#]] [[#]]
229+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
230+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
231+
; CHECK-SPIRV-DAG: Label [[#]]
232+
; CHECK-SPIRV-DAG: ULessThanEqual [[#]] [[#R:]] [[#A]] [[#B]]
233+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
234+
; CHECK-SPIRV-DAG: FunctionEnd
235+
; CHECK-LLVM-DAG: icmp ule
236+
237+
define <3 x i1> @test_v3_ule(<3 x i32> %a, <3 x i32> %b) {
238+
%r = icmp ule <3 x i32> %a, %b
239+
ret <3 x i1> %r
240+
}
241+
242+
; CHECK-SPIRV-DAG: Function [[#]] [[#v3SLE]] [[#]] [[#]]
243+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
244+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
245+
; CHECK-SPIRV-DAG: Label [[#]]
246+
; CHECK-SPIRV-DAG: SLessThanEqual [[#]] [[#R:]] [[#A]] [[#B]]
247+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
248+
; CHECK-SPIRV-DAG: FunctionEnd
249+
; CHECK-LLVM-DAG: icmp sle
250+
251+
define <3 x i1> @test_v3_sle(<3 x i32> %a, <3 x i32> %b) {
252+
%r = icmp sle <3 x i32> %a, %b
253+
ret <3 x i1> %r
254+
}
255+
256+
; CHECK-SPIRV-DAG: Function [[#]] [[#v3UGT]] [[#]] [[#]]
257+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
258+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
259+
; CHECK-SPIRV-DAG: Label [[#]]
260+
; CHECK-SPIRV-DAG: UGreaterThan [[#]] [[#R:]] [[#A]] [[#B]]
261+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
262+
; CHECK-SPIRV-DAG: FunctionEnd
263+
; CHECK-LLVM-DAG: icmp ugt
264+
265+
define <3 x i1> @test_v3_ugt(<3 x i32> %a, <3 x i32> %b) {
266+
%r = icmp ugt <3 x i32> %a, %b
267+
ret <3 x i1> %r
268+
}
269+
270+
; CHECK-SPIRV-DAG: Function [[#]] [[#v3SGT]] [[#]] [[#]]
271+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
272+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
273+
; CHECK-SPIRV-DAG: Label [[#]]
274+
; CHECK-SPIRV-DAG: SGreaterThan [[#]] [[#R:]] [[#A]] [[#B]]
275+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
276+
; CHECK-SPIRV-DAG: FunctionEnd
277+
; CHECK-LLVM-DAG: icmp sgt
278+
279+
define <3 x i1> @test_v3_sgt(<3 x i32> %a, <3 x i32> %b) {
280+
%r = icmp sgt <3 x i32> %a, %b
281+
ret <3 x i1> %r
282+
}
283+
284+
; CHECK-SPIRV-DAG: Function [[#]] [[#v3UGE]] [[#]] [[#]]
285+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
286+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
287+
; CHECK-SPIRV-DAG: Label [[#]]
288+
; CHECK-SPIRV-DAG: UGreaterThanEqual [[#]] [[#R:]] [[#A]] [[#B]]
289+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
290+
; CHECK-SPIRV-DAG: FunctionEnd
291+
; CHECK-LLVM-DAG: icmp uge
292+
293+
define <3 x i1> @test_v3_uge(<3 x i32> %a, <3 x i32> %b) {
294+
%r = icmp uge <3 x i32> %a, %b
295+
ret <3 x i1> %r
296+
}
297+
298+
; CHECK-SPIRV-DAG: Function [[#]] [[#v3SGE]] [[#]] [[#]]
299+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#A:]]
300+
; CHECK-SPIRV-DAG: FunctionParameter [[#]] [[#B:]]
301+
; CHECK-SPIRV-DAG: Label [[#]]
302+
; CHECK-SPIRV-DAG: SGreaterThanEqual [[#]] [[#R:]] [[#A]] [[#B]]
303+
; CHECK-SPIRV-DAG: ReturnValue [[#R]]
304+
; CHECK-SPIRV-DAG: FunctionEnd
305+
; CHECK-LLVM-DAG: icmp sge
306+
307+
define <3 x i1> @test_v3_sge(<3 x i32> %a, <3 x i32> %b) {
308+
%r = icmp sge <3 x i32> %a, %b
309+
ret <3 x i1> %r
310+
}

0 commit comments

Comments
 (0)