xref: /llvm-project/llvm/test/CodeGen/SPIRV/transcoding/RelationalOperators.ll (revision 4bd9d98bc2be3548418dc67accc662cbeb10a2e1)
1fa2a7a25SAleksandr Bezzubikov; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
2fa2a7a25SAleksandr Bezzubikov
3*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#bool:]] = OpTypeBool
4*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#bool2:]] = OpTypeVector %[[#bool]] 2
5fa2a7a25SAleksandr Bezzubikov
6fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
7*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
8*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
9*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpUGreaterThan %[[#bool2]] %[[#A]] %[[#B]]
10fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
11fa2a7a25SAleksandr Bezzubikov
12*4bd9d98bSAndrey Tretyakov;; kernel void testUGreaterThan(uint2 a, uint2 b, global int2 *res) {
13*4bd9d98bSAndrey Tretyakov;;   res[0] = a > b;
14*4bd9d98bSAndrey Tretyakov;; }
15fa2a7a25SAleksandr Bezzubikov
16*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testUGreaterThan(<2 x i32> noundef %a, <2 x i32> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
17fa2a7a25SAleksandr Bezzubikoventry:
18fa2a7a25SAleksandr Bezzubikov  %cmp = icmp ugt <2 x i32> %a, %b
19fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
20*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
21fa2a7a25SAleksandr Bezzubikov  ret void
22fa2a7a25SAleksandr Bezzubikov}
23fa2a7a25SAleksandr Bezzubikov
24fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
25*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
26*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
27*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpSGreaterThan %[[#bool2]] %[[#A]] %[[#B]]
28fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
29fa2a7a25SAleksandr Bezzubikov
30*4bd9d98bSAndrey Tretyakov;; kernel void testSGreaterThan(int2 a, int2 b, global int2 *res) {
31*4bd9d98bSAndrey Tretyakov;;   res[0] = a > b;
32*4bd9d98bSAndrey Tretyakov;; }
33fa2a7a25SAleksandr Bezzubikov
34*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testSGreaterThan(<2 x i32> noundef %a, <2 x i32> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
35fa2a7a25SAleksandr Bezzubikoventry:
36fa2a7a25SAleksandr Bezzubikov  %cmp = icmp sgt <2 x i32> %a, %b
37fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
38*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
39fa2a7a25SAleksandr Bezzubikov  ret void
40fa2a7a25SAleksandr Bezzubikov}
41fa2a7a25SAleksandr Bezzubikov
42fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
43*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
44*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
45*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpUGreaterThanEqual %[[#bool2]] %[[#A]] %[[#B]]
46fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
47fa2a7a25SAleksandr Bezzubikov
48*4bd9d98bSAndrey Tretyakov;; kernel void testUGreaterThanEqual(uint2 a, uint2 b, global int2 *res) {
49*4bd9d98bSAndrey Tretyakov;;   res[0] = a >= b;
50*4bd9d98bSAndrey Tretyakov;; }
51fa2a7a25SAleksandr Bezzubikov
52*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testUGreaterThanEqual(<2 x i32> noundef %a, <2 x i32> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
53fa2a7a25SAleksandr Bezzubikoventry:
54fa2a7a25SAleksandr Bezzubikov  %cmp = icmp uge <2 x i32> %a, %b
55fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
56*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
57fa2a7a25SAleksandr Bezzubikov  ret void
58fa2a7a25SAleksandr Bezzubikov}
59fa2a7a25SAleksandr Bezzubikov
60fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
61*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
62*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
63*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpSGreaterThanEqual %[[#bool2]] %[[#A]] %[[#B]]
64fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
65fa2a7a25SAleksandr Bezzubikov
66*4bd9d98bSAndrey Tretyakov;; kernel void testSGreaterThanEqual(int2 a, int2 b, global int2 *res) {
67*4bd9d98bSAndrey Tretyakov;;   res[0] = a >= b;
68*4bd9d98bSAndrey Tretyakov;; }
69fa2a7a25SAleksandr Bezzubikov
70*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testSGreaterThanEqual(<2 x i32> noundef %a, <2 x i32> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
71fa2a7a25SAleksandr Bezzubikoventry:
72fa2a7a25SAleksandr Bezzubikov  %cmp = icmp sge <2 x i32> %a, %b
73fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
74*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
75fa2a7a25SAleksandr Bezzubikov  ret void
76fa2a7a25SAleksandr Bezzubikov}
77fa2a7a25SAleksandr Bezzubikov
78fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
79*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
80*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
81*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpULessThan %[[#bool2]] %[[#A]] %[[#B]]
82fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
83fa2a7a25SAleksandr Bezzubikov
84*4bd9d98bSAndrey Tretyakov;; kernel void testULessThan(uint2 a, uint2 b, global int2 *res) {
85*4bd9d98bSAndrey Tretyakov;;   res[0] = a < b;
86*4bd9d98bSAndrey Tretyakov;; }
87fa2a7a25SAleksandr Bezzubikov
88*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testULessThan(<2 x i32> noundef %a, <2 x i32> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
89fa2a7a25SAleksandr Bezzubikoventry:
90fa2a7a25SAleksandr Bezzubikov  %cmp = icmp ult <2 x i32> %a, %b
91fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
92*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
93fa2a7a25SAleksandr Bezzubikov  ret void
94fa2a7a25SAleksandr Bezzubikov}
95fa2a7a25SAleksandr Bezzubikov
96fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
97*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
98*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
99*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpSLessThan %[[#bool2]] %[[#A]] %[[#B]]
100fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
101fa2a7a25SAleksandr Bezzubikov
102*4bd9d98bSAndrey Tretyakov;; kernel void testSLessThan(int2 a, int2 b, global int2 *res) {
103*4bd9d98bSAndrey Tretyakov;;   res[0] = a < b;
104*4bd9d98bSAndrey Tretyakov;; }
105fa2a7a25SAleksandr Bezzubikov
106*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testSLessThan(<2 x i32> noundef %a, <2 x i32> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
107fa2a7a25SAleksandr Bezzubikoventry:
108fa2a7a25SAleksandr Bezzubikov  %cmp = icmp slt <2 x i32> %a, %b
109fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
110*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
111fa2a7a25SAleksandr Bezzubikov  ret void
112fa2a7a25SAleksandr Bezzubikov}
113fa2a7a25SAleksandr Bezzubikov
114fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
115*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
116*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
117*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpULessThanEqual %[[#bool2]] %[[#A]] %[[#B]]
118fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
119fa2a7a25SAleksandr Bezzubikov
120*4bd9d98bSAndrey Tretyakov;; kernel void testULessThanEqual(uint2 a, uint2 b, global int2 *res) {
121*4bd9d98bSAndrey Tretyakov;;   res[0] = a <= b;
122*4bd9d98bSAndrey Tretyakov;; }
123fa2a7a25SAleksandr Bezzubikov
124*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testULessThanEqual(<2 x i32> noundef %a, <2 x i32> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
125fa2a7a25SAleksandr Bezzubikoventry:
126fa2a7a25SAleksandr Bezzubikov  %cmp = icmp ule <2 x i32> %a, %b
127fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
128*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
129fa2a7a25SAleksandr Bezzubikov  ret void
130fa2a7a25SAleksandr Bezzubikov}
131fa2a7a25SAleksandr Bezzubikov
132fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
133*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
134*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
135*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpSLessThanEqual %[[#bool2]] %[[#A]] %[[#B]]
136fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
137fa2a7a25SAleksandr Bezzubikov
138*4bd9d98bSAndrey Tretyakov;; kernel void testSLessThanEqual(int2 a, int2 b, global int2 *res) {
139*4bd9d98bSAndrey Tretyakov;;   res[0] = a <= b;
140*4bd9d98bSAndrey Tretyakov;; }
141fa2a7a25SAleksandr Bezzubikov
142*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testSLessThanEqual(<2 x i32> noundef %a, <2 x i32> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
143fa2a7a25SAleksandr Bezzubikoventry:
144fa2a7a25SAleksandr Bezzubikov  %cmp = icmp sle <2 x i32> %a, %b
145fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
146*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
147fa2a7a25SAleksandr Bezzubikov  ret void
148fa2a7a25SAleksandr Bezzubikov}
149fa2a7a25SAleksandr Bezzubikov
150fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
151*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
152*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
153*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpFOrdEqual %[[#bool2]] %[[#A]] %[[#B]]
154fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
155fa2a7a25SAleksandr Bezzubikov
156*4bd9d98bSAndrey Tretyakov;; kernel void testFOrdEqual(float2 a, float2 b, global int2 *res) {
157*4bd9d98bSAndrey Tretyakov;;   res[0] = a == b;
158*4bd9d98bSAndrey Tretyakov;; }
159fa2a7a25SAleksandr Bezzubikov
160*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testFOrdEqual(<2 x float> noundef %a, <2 x float> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
161fa2a7a25SAleksandr Bezzubikoventry:
162fa2a7a25SAleksandr Bezzubikov  %cmp = fcmp oeq <2 x float> %a, %b
163fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
164*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
165fa2a7a25SAleksandr Bezzubikov  ret void
166fa2a7a25SAleksandr Bezzubikov}
167fa2a7a25SAleksandr Bezzubikov
168fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
169*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
170*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
171*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpFUnordNotEqual %[[#bool2]] %[[#A]] %[[#B]]
172fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
173fa2a7a25SAleksandr Bezzubikov
174*4bd9d98bSAndrey Tretyakov;; kernel void testFUnordNotEqual(float2 a, float2 b, global int2 *res) {
175*4bd9d98bSAndrey Tretyakov;;   res[0] = a != b;
176*4bd9d98bSAndrey Tretyakov;; }
177fa2a7a25SAleksandr Bezzubikov
178*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testFUnordNotEqual(<2 x float> noundef %a, <2 x float> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
179fa2a7a25SAleksandr Bezzubikoventry:
180fa2a7a25SAleksandr Bezzubikov  %cmp = fcmp une <2 x float> %a, %b
181fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
182*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
183fa2a7a25SAleksandr Bezzubikov  ret void
184fa2a7a25SAleksandr Bezzubikov}
185fa2a7a25SAleksandr Bezzubikov
186fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
187*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
188*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
189*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpFOrdGreaterThan %[[#bool2]] %[[#A]] %[[#B]]
190fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
191fa2a7a25SAleksandr Bezzubikov
192*4bd9d98bSAndrey Tretyakov;; kernel void testFOrdGreaterThan(float2 a, float2 b, global int2 *res) {
193*4bd9d98bSAndrey Tretyakov;;   res[0] = a > b;
194*4bd9d98bSAndrey Tretyakov;; }
195fa2a7a25SAleksandr Bezzubikov
196*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testFOrdGreaterThan(<2 x float> noundef %a, <2 x float> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
197fa2a7a25SAleksandr Bezzubikoventry:
198fa2a7a25SAleksandr Bezzubikov  %cmp = fcmp ogt <2 x float> %a, %b
199fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
200*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
201fa2a7a25SAleksandr Bezzubikov  ret void
202fa2a7a25SAleksandr Bezzubikov}
203fa2a7a25SAleksandr Bezzubikov
204fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
205*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
206*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
207*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpFOrdGreaterThanEqual %[[#bool2]] %[[#A]] %[[#B]]
208fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
209fa2a7a25SAleksandr Bezzubikov
210*4bd9d98bSAndrey Tretyakov;; kernel void testFOrdGreaterThanEqual(float2 a, float2 b, global int2 *res) {
211*4bd9d98bSAndrey Tretyakov;;   res[0] = a >= b;
212*4bd9d98bSAndrey Tretyakov;; }
213fa2a7a25SAleksandr Bezzubikov
214*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testFOrdGreaterThanEqual(<2 x float> noundef %a, <2 x float> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
215fa2a7a25SAleksandr Bezzubikoventry:
216fa2a7a25SAleksandr Bezzubikov  %cmp = fcmp oge <2 x float> %a, %b
217fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
218*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
219fa2a7a25SAleksandr Bezzubikov  ret void
220fa2a7a25SAleksandr Bezzubikov}
221fa2a7a25SAleksandr Bezzubikov
222fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
223*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
224*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
225*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpFOrdLessThan %[[#bool2]] %[[#A]] %[[#B]]
226fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
227fa2a7a25SAleksandr Bezzubikov
228*4bd9d98bSAndrey Tretyakov;; kernel void testFOrdLessThan(float2 a, float2 b, global int2 *res) {
229*4bd9d98bSAndrey Tretyakov;;   res[0] = a < b;
230*4bd9d98bSAndrey Tretyakov;; }
231fa2a7a25SAleksandr Bezzubikov
232*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testFOrdLessThan(<2 x float> noundef %a, <2 x float> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
233fa2a7a25SAleksandr Bezzubikoventry:
234fa2a7a25SAleksandr Bezzubikov  %cmp = fcmp olt <2 x float> %a, %b
235fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
236*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
237fa2a7a25SAleksandr Bezzubikov  ret void
238fa2a7a25SAleksandr Bezzubikov}
239fa2a7a25SAleksandr Bezzubikov
240fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunction
241*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#A:]] = OpFunctionParameter %[[#]]
242*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV-NEXT: %[[#B:]] = OpFunctionParameter %[[#]]
243*4bd9d98bSAndrey Tretyakov; CHECK-SPIRV:      %[[#]] = OpFOrdLessThanEqual %[[#bool2]] %[[#A]] %[[#B]]
244fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV:      OpFunctionEnd
245fa2a7a25SAleksandr Bezzubikov
246*4bd9d98bSAndrey Tretyakov;; kernel void testFOrdLessThanEqual(float2 a, float2 b, global int2 *res) {
247*4bd9d98bSAndrey Tretyakov;;   res[0] = a <= b;
248*4bd9d98bSAndrey Tretyakov;; }
249fa2a7a25SAleksandr Bezzubikov
250*4bd9d98bSAndrey Tretyakovdefine dso_local spir_kernel void @testFOrdLessThanEqual(<2 x float> noundef %a, <2 x float> noundef %b, <2 x i32> addrspace(1)* nocapture noundef writeonly %res) local_unnamed_addr {
251fa2a7a25SAleksandr Bezzubikoventry:
252fa2a7a25SAleksandr Bezzubikov  %cmp = fcmp ole <2 x float> %a, %b
253fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
254*4bd9d98bSAndrey Tretyakov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8
255fa2a7a25SAleksandr Bezzubikov  ret void
256fa2a7a25SAleksandr Bezzubikov}
257