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