1*fa2a7a25SAleksandr Bezzubikov; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
2*fa2a7a25SAleksandr Bezzubikov
3*fa2a7a25SAleksandr Bezzubikov; ModuleID = 'RelationalOperators.cl'
4*fa2a7a25SAleksandr Bezzubikovsource_filename = "RelationalOperators.cl"
5*fa2a7a25SAleksandr Bezzubikovtarget datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
6*fa2a7a25SAleksandr Bezzubikovtarget triple = "spirv32-unknown-unknown"
7*fa2a7a25SAleksandr Bezzubikov
8*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %[[bool:[0-9]+]] = OpTypeBool
9*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %[[bool2:[0-9]+]] = OpTypeVector %[[bool]] 2
10*fa2a7a25SAleksandr Bezzubikov
11*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
12*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
13*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
14*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpUGreaterThan %[[bool2]] %[[A]] %[[B]]
15*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
16*fa2a7a25SAleksandr Bezzubikov
17*fa2a7a25SAleksandr Bezzubikov; kernel void testUGreaterThan(uint2 a, uint2 b, global int2 *res) {
18*fa2a7a25SAleksandr Bezzubikov;   res[0] = a > b;
19*fa2a7a25SAleksandr Bezzubikov; }
20*fa2a7a25SAleksandr Bezzubikov
21*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
22*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !5 !kernel_arg_base_type !6 !kernel_arg_type_qual !7 {
23*fa2a7a25SAleksandr Bezzubikoventry:
24*fa2a7a25SAleksandr Bezzubikov  %cmp = icmp ugt <2 x i32> %a, %b
25*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
26*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
27*fa2a7a25SAleksandr Bezzubikov  ret void
28*fa2a7a25SAleksandr Bezzubikov}
29*fa2a7a25SAleksandr Bezzubikov
30*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
31*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
32*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
33*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpSGreaterThan %[[bool2]] %[[A]] %[[B]]
34*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
35*fa2a7a25SAleksandr Bezzubikov
36*fa2a7a25SAleksandr Bezzubikov; kernel void testSGreaterThan(int2 a, int2 b, global int2 *res) {
37*fa2a7a25SAleksandr Bezzubikov;   res[0] = a > b;
38*fa2a7a25SAleksandr Bezzubikov; }
39*fa2a7a25SAleksandr Bezzubikov
40*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
41*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !11 !kernel_arg_base_type !12 !kernel_arg_type_qual !7 {
42*fa2a7a25SAleksandr Bezzubikoventry:
43*fa2a7a25SAleksandr Bezzubikov  %cmp = icmp sgt <2 x i32> %a, %b
44*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
45*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
46*fa2a7a25SAleksandr Bezzubikov  ret void
47*fa2a7a25SAleksandr Bezzubikov}
48*fa2a7a25SAleksandr Bezzubikov
49*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
50*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
51*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
52*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpUGreaterThanEqual %[[bool2]] %[[A]] %[[B]]
53*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
54*fa2a7a25SAleksandr Bezzubikov
55*fa2a7a25SAleksandr Bezzubikov; kernel void testUGreaterThanEqual(uint2 a, uint2 b, global int2 *res) {
56*fa2a7a25SAleksandr Bezzubikov;   res[0] = a >= b;
57*fa2a7a25SAleksandr Bezzubikov; }
58*fa2a7a25SAleksandr Bezzubikov
59*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
60*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !5 !kernel_arg_base_type !6 !kernel_arg_type_qual !7 {
61*fa2a7a25SAleksandr Bezzubikoventry:
62*fa2a7a25SAleksandr Bezzubikov  %cmp = icmp uge <2 x i32> %a, %b
63*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
64*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
65*fa2a7a25SAleksandr Bezzubikov  ret void
66*fa2a7a25SAleksandr Bezzubikov}
67*fa2a7a25SAleksandr Bezzubikov
68*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
69*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
70*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
71*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpSGreaterThanEqual %[[bool2]] %[[A]] %[[B]]
72*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
73*fa2a7a25SAleksandr Bezzubikov
74*fa2a7a25SAleksandr Bezzubikov; kernel void testSGreaterThanEqual(int2 a, int2 b, global int2 *res) {
75*fa2a7a25SAleksandr Bezzubikov;   res[0] = a >= b;
76*fa2a7a25SAleksandr Bezzubikov; }
77*fa2a7a25SAleksandr Bezzubikov
78*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
79*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !11 !kernel_arg_base_type !12 !kernel_arg_type_qual !7 {
80*fa2a7a25SAleksandr Bezzubikoventry:
81*fa2a7a25SAleksandr Bezzubikov  %cmp = icmp sge <2 x i32> %a, %b
82*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
83*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
84*fa2a7a25SAleksandr Bezzubikov  ret void
85*fa2a7a25SAleksandr Bezzubikov}
86*fa2a7a25SAleksandr Bezzubikov
87*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
88*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
89*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
90*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpULessThan %[[bool2]] %[[A]] %[[B]]
91*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
92*fa2a7a25SAleksandr Bezzubikov
93*fa2a7a25SAleksandr Bezzubikov; kernel void testULessThan(uint2 a, uint2 b, global int2 *res) {
94*fa2a7a25SAleksandr Bezzubikov;   res[0] = a < b;
95*fa2a7a25SAleksandr Bezzubikov; }
96*fa2a7a25SAleksandr Bezzubikov
97*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
98*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !5 !kernel_arg_base_type !6 !kernel_arg_type_qual !7 {
99*fa2a7a25SAleksandr Bezzubikoventry:
100*fa2a7a25SAleksandr Bezzubikov  %cmp = icmp ult <2 x i32> %a, %b
101*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
102*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
103*fa2a7a25SAleksandr Bezzubikov  ret void
104*fa2a7a25SAleksandr Bezzubikov}
105*fa2a7a25SAleksandr Bezzubikov
106*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
107*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
108*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
109*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpSLessThan %[[bool2]] %[[A]] %[[B]]
110*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
111*fa2a7a25SAleksandr Bezzubikov
112*fa2a7a25SAleksandr Bezzubikov; kernel void testSLessThan(int2 a, int2 b, global int2 *res) {
113*fa2a7a25SAleksandr Bezzubikov;   res[0] = a < b;
114*fa2a7a25SAleksandr Bezzubikov; }
115*fa2a7a25SAleksandr Bezzubikov
116*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
117*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !11 !kernel_arg_base_type !12 !kernel_arg_type_qual !7 {
118*fa2a7a25SAleksandr Bezzubikoventry:
119*fa2a7a25SAleksandr Bezzubikov  %cmp = icmp slt <2 x i32> %a, %b
120*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
121*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
122*fa2a7a25SAleksandr Bezzubikov  ret void
123*fa2a7a25SAleksandr Bezzubikov}
124*fa2a7a25SAleksandr Bezzubikov
125*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
126*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
127*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
128*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpULessThanEqual %[[bool2]] %[[A]] %[[B]]
129*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
130*fa2a7a25SAleksandr Bezzubikov
131*fa2a7a25SAleksandr Bezzubikov; kernel void testULessThanEqual(uint2 a, uint2 b, global int2 *res) {
132*fa2a7a25SAleksandr Bezzubikov;   res[0] = a <= b;
133*fa2a7a25SAleksandr Bezzubikov; }
134*fa2a7a25SAleksandr Bezzubikov
135*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
136*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !5 !kernel_arg_base_type !6 !kernel_arg_type_qual !7 {
137*fa2a7a25SAleksandr Bezzubikoventry:
138*fa2a7a25SAleksandr Bezzubikov  %cmp = icmp ule <2 x i32> %a, %b
139*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
140*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
141*fa2a7a25SAleksandr Bezzubikov  ret void
142*fa2a7a25SAleksandr Bezzubikov}
143*fa2a7a25SAleksandr Bezzubikov
144*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
145*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
146*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
147*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpSLessThanEqual %[[bool2]] %[[A]] %[[B]]
148*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
149*fa2a7a25SAleksandr Bezzubikov
150*fa2a7a25SAleksandr Bezzubikov; kernel void testSLessThanEqual(int2 a, int2 b, global int2 *res) {
151*fa2a7a25SAleksandr Bezzubikov;   res[0] = a <= b;
152*fa2a7a25SAleksandr Bezzubikov; }
153*fa2a7a25SAleksandr Bezzubikov
154*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
155*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !11 !kernel_arg_base_type !12 !kernel_arg_type_qual !7 {
156*fa2a7a25SAleksandr Bezzubikoventry:
157*fa2a7a25SAleksandr Bezzubikov  %cmp = icmp sle <2 x i32> %a, %b
158*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
159*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
160*fa2a7a25SAleksandr Bezzubikov  ret void
161*fa2a7a25SAleksandr Bezzubikov}
162*fa2a7a25SAleksandr Bezzubikov
163*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
164*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
165*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
166*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpFOrdEqual %[[bool2]] %[[A]] %[[B]]
167*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
168*fa2a7a25SAleksandr Bezzubikov
169*fa2a7a25SAleksandr Bezzubikov; kernel void testFOrdEqual(float2 a, float2 b, global int2 *res) {
170*fa2a7a25SAleksandr Bezzubikov;   res[0] = a == b;
171*fa2a7a25SAleksandr Bezzubikov; }
172*fa2a7a25SAleksandr Bezzubikov
173*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
174*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !13 !kernel_arg_base_type !14 !kernel_arg_type_qual !7 {
175*fa2a7a25SAleksandr Bezzubikoventry:
176*fa2a7a25SAleksandr Bezzubikov  %cmp = fcmp oeq <2 x float> %a, %b
177*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
178*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
179*fa2a7a25SAleksandr Bezzubikov  ret void
180*fa2a7a25SAleksandr Bezzubikov}
181*fa2a7a25SAleksandr Bezzubikov
182*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
183*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
184*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
185*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpFUnordNotEqual %[[bool2]] %[[A]] %[[B]]
186*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
187*fa2a7a25SAleksandr Bezzubikov
188*fa2a7a25SAleksandr Bezzubikov; kernel void testFUnordNotEqual(float2 a, float2 b, global int2 *res) {
189*fa2a7a25SAleksandr Bezzubikov;   res[0] = a != b;
190*fa2a7a25SAleksandr Bezzubikov; }
191*fa2a7a25SAleksandr Bezzubikov
192*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
193*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !13 !kernel_arg_base_type !14 !kernel_arg_type_qual !7 {
194*fa2a7a25SAleksandr Bezzubikoventry:
195*fa2a7a25SAleksandr Bezzubikov  %cmp = fcmp une <2 x float> %a, %b
196*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
197*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
198*fa2a7a25SAleksandr Bezzubikov  ret void
199*fa2a7a25SAleksandr Bezzubikov}
200*fa2a7a25SAleksandr Bezzubikov
201*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
202*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
203*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
204*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpFOrdGreaterThan %[[bool2]] %[[A]] %[[B]]
205*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
206*fa2a7a25SAleksandr Bezzubikov
207*fa2a7a25SAleksandr Bezzubikov; kernel void testFOrdGreaterThan(float2 a, float2 b, global int2 *res) {
208*fa2a7a25SAleksandr Bezzubikov;   res[0] = a > b;
209*fa2a7a25SAleksandr Bezzubikov; }
210*fa2a7a25SAleksandr Bezzubikov
211*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
212*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !13 !kernel_arg_base_type !14 !kernel_arg_type_qual !7 {
213*fa2a7a25SAleksandr Bezzubikoventry:
214*fa2a7a25SAleksandr Bezzubikov  %cmp = fcmp ogt <2 x float> %a, %b
215*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
216*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
217*fa2a7a25SAleksandr Bezzubikov  ret void
218*fa2a7a25SAleksandr Bezzubikov}
219*fa2a7a25SAleksandr Bezzubikov
220*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
221*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
222*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
223*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpFOrdGreaterThanEqual %[[bool2]] %[[A]] %[[B]]
224*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
225*fa2a7a25SAleksandr Bezzubikov
226*fa2a7a25SAleksandr Bezzubikov; kernel void testFOrdGreaterThanEqual(float2 a, float2 b, global int2 *res) {
227*fa2a7a25SAleksandr Bezzubikov;   res[0] = a >= b;
228*fa2a7a25SAleksandr Bezzubikov; }
229*fa2a7a25SAleksandr Bezzubikov
230*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
231*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !13 !kernel_arg_base_type !14 !kernel_arg_type_qual !7 {
232*fa2a7a25SAleksandr Bezzubikoventry:
233*fa2a7a25SAleksandr Bezzubikov  %cmp = fcmp oge <2 x float> %a, %b
234*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
235*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
236*fa2a7a25SAleksandr Bezzubikov  ret void
237*fa2a7a25SAleksandr Bezzubikov}
238*fa2a7a25SAleksandr Bezzubikov
239*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
240*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
241*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
242*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpFOrdLessThan %[[bool2]] %[[A]] %[[B]]
243*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
244*fa2a7a25SAleksandr Bezzubikov
245*fa2a7a25SAleksandr Bezzubikov; kernel void testFOrdLessThan(float2 a, float2 b, global int2 *res) {
246*fa2a7a25SAleksandr Bezzubikov;   res[0] = a < b;
247*fa2a7a25SAleksandr Bezzubikov; }
248*fa2a7a25SAleksandr Bezzubikov
249*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
250*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !13 !kernel_arg_base_type !14 !kernel_arg_type_qual !7 {
251*fa2a7a25SAleksandr Bezzubikoventry:
252*fa2a7a25SAleksandr Bezzubikov  %cmp = fcmp olt <2 x float> %a, %b
253*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
254*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
255*fa2a7a25SAleksandr Bezzubikov  ret void
256*fa2a7a25SAleksandr Bezzubikov}
257*fa2a7a25SAleksandr Bezzubikov
258*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunction
259*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[A:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
260*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV-NEXT: %[[B:[0-9]+]] = OpFunctionParameter %{{[0-9]+}}
261*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: %{{[0-9]+}} = OpFOrdLessThanEqual %[[bool2]] %[[A]] %[[B]]
262*fa2a7a25SAleksandr Bezzubikov; CHECK-SPIRV: OpFunctionEnd
263*fa2a7a25SAleksandr Bezzubikov
264*fa2a7a25SAleksandr Bezzubikov; kernel void testFOrdLessThanEqual(float2 a, float2 b, global int2 *res) {
265*fa2a7a25SAleksandr Bezzubikov;   res[0] = a <= b;
266*fa2a7a25SAleksandr Bezzubikov; }
267*fa2a7a25SAleksandr Bezzubikov
268*fa2a7a25SAleksandr Bezzubikov; Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn writeonly
269*fa2a7a25SAleksandr Bezzubikovdefine 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 #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !13 !kernel_arg_base_type !14 !kernel_arg_type_qual !7 {
270*fa2a7a25SAleksandr Bezzubikoventry:
271*fa2a7a25SAleksandr Bezzubikov  %cmp = fcmp ole <2 x float> %a, %b
272*fa2a7a25SAleksandr Bezzubikov  %sext = sext <2 x i1> %cmp to <2 x i32>
273*fa2a7a25SAleksandr Bezzubikov  store <2 x i32> %sext, <2 x i32> addrspace(1)* %res, align 8, !tbaa !8
274*fa2a7a25SAleksandr Bezzubikov  ret void
275*fa2a7a25SAleksandr Bezzubikov}
276*fa2a7a25SAleksandr Bezzubikov
277*fa2a7a25SAleksandr Bezzubikovattributes #0 = { mustprogress nofree norecurse nosync nounwind willreturn writeonly "frame-pointer"="none" "min-legal-vector-width"="64" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "uniform-work-group-size"="false" }
278*fa2a7a25SAleksandr Bezzubikov
279*fa2a7a25SAleksandr Bezzubikov!llvm.module.flags = !{!0}
280*fa2a7a25SAleksandr Bezzubikov!opencl.ocl.version = !{!1}
281*fa2a7a25SAleksandr Bezzubikov!opencl.spir.version = !{!1}
282*fa2a7a25SAleksandr Bezzubikov!llvm.ident = !{!2}
283*fa2a7a25SAleksandr Bezzubikov
284*fa2a7a25SAleksandr Bezzubikov!0 = !{i32 1, !"wchar_size", i32 4}
285*fa2a7a25SAleksandr Bezzubikov!1 = !{i32 2, i32 0}
286*fa2a7a25SAleksandr Bezzubikov!2 = !{!"clang version 14.0.0 (https://github.com/llvm/llvm-project.git 881b6a009fb6e2dd5fb924524cd6eacd14148a08)"}
287*fa2a7a25SAleksandr Bezzubikov!3 = !{i32 0, i32 0, i32 1}
288*fa2a7a25SAleksandr Bezzubikov!4 = !{!"none", !"none", !"none"}
289*fa2a7a25SAleksandr Bezzubikov!5 = !{!"uint2", !"uint2", !"int2*"}
290*fa2a7a25SAleksandr Bezzubikov!6 = !{!"uint __attribute__((ext_vector_type(2)))", !"uint __attribute__((ext_vector_type(2)))", !"int __attribute__((ext_vector_type(2)))*"}
291*fa2a7a25SAleksandr Bezzubikov!7 = !{!"", !"", !""}
292*fa2a7a25SAleksandr Bezzubikov!8 = !{!9, !9, i64 0}
293*fa2a7a25SAleksandr Bezzubikov!9 = !{!"omnipotent char", !10, i64 0}
294*fa2a7a25SAleksandr Bezzubikov!10 = !{!"Simple C/C++ TBAA"}
295*fa2a7a25SAleksandr Bezzubikov!11 = !{!"int2", !"int2", !"int2*"}
296*fa2a7a25SAleksandr Bezzubikov!12 = !{!"int __attribute__((ext_vector_type(2)))", !"int __attribute__((ext_vector_type(2)))", !"int __attribute__((ext_vector_type(2)))*"}
297*fa2a7a25SAleksandr Bezzubikov!13 = !{!"float2", !"float2", !"int2*"}
298*fa2a7a25SAleksandr Bezzubikov!14 = !{!"float __attribute__((ext_vector_type(2)))", !"float __attribute__((ext_vector_type(2)))", !"int __attribute__((ext_vector_type(2)))*"}
299