1; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV 2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %} 3 4;; This test checks following SYCL relational builtins with half and half2 types: 5;; isfinite, isinf, isnan, isnormal, signbit, isequal, isnotequal, isgreater 6;; isgreaterequal, isless, islessequal, islessgreater, isordered, isunordered 7 8; CHECK-SPIRV: %[[#BoolTypeID:]] = OpTypeBool 9; CHECK-SPIRV: %[[#BoolVectorTypeID:]] = OpTypeVector %[[#BoolTypeID]] 2 10 11; CHECK-SPIRV: OpIsFinite %[[#BoolTypeID]] 12; CHECK-SPIRV: OpIsInf %[[#BoolTypeID]] 13; CHECK-SPIRV: OpIsNan %[[#BoolTypeID]] 14; CHECK-SPIRV: OpIsNormal %[[#BoolTypeID]] 15; CHECK-SPIRV: OpSignBitSet %[[#BoolTypeID]] 16; CHECK-SPIRV: OpFOrdEqual %[[#BoolTypeID]] 17; CHECK-SPIRV: OpFUnordNotEqual %[[#BoolTypeID]] 18; CHECK-SPIRV: OpFOrdGreaterThan %[[#BoolTypeID]] 19; CHECK-SPIRV: OpFOrdGreaterThanEqual %[[#BoolTypeID]] 20; CHECK-SPIRV: OpFOrdLessThan %[[#BoolTypeID]] 21; CHECK-SPIRV: OpFOrdLessThanEqual %[[#BoolTypeID]] 22; CHECK-SPIRV: OpFOrdNotEqual %[[#BoolTypeID]] 23; CHECK-SPIRV: OpOrdered %[[#BoolTypeID]] 24; CHECK-SPIRV: OpUnordered %[[#BoolTypeID]] 25 26; CHECK-SPIRV: OpIsFinite %[[#BoolVectorTypeID]] 27; CHECK-SPIRV: OpIsInf %[[#BoolVectorTypeID]] 28; CHECK-SPIRV: OpIsNan %[[#BoolVectorTypeID]] 29; CHECK-SPIRV: OpIsNormal %[[#BoolVectorTypeID]] 30; CHECK-SPIRV: OpSignBitSet %[[#BoolVectorTypeID]] 31; CHECK-SPIRV: OpFOrdEqual %[[#BoolVectorTypeID]] 32; CHECK-SPIRV: OpFUnordNotEqual %[[#BoolVectorTypeID]] 33; CHECK-SPIRV: OpFOrdGreaterThan %[[#BoolVectorTypeID]] 34; CHECK-SPIRV: OpFOrdGreaterThanEqual %[[#BoolVectorTypeID]] 35; CHECK-SPIRV: OpFOrdLessThan %[[#BoolVectorTypeID]] 36; CHECK-SPIRV: OpFOrdLessThanEqual %[[#BoolVectorTypeID]] 37; CHECK-SPIRV: OpFOrdNotEqual %[[#BoolVectorTypeID]] 38; CHECK-SPIRV: OpOrdered %[[#BoolVectorTypeID]] 39; CHECK-SPIRV: OpUnordered %[[#BoolVectorTypeID]] 40 41define dso_local spir_func void @test_scalar(i32 addrspace(4)* nocapture writeonly %out, half %h) local_unnamed_addr { 42entry: 43 %call = tail call spir_func i32 @_Z8isfiniteDh(half %h) 44 %call1 = tail call spir_func i32 @_Z5isinfDh(half %h) 45 %add = add nsw i32 %call1, %call 46 %call2 = tail call spir_func i32 @_Z5isnanDh(half %h) 47 %add3 = add nsw i32 %add, %call2 48 %call4 = tail call spir_func i32 @_Z8isnormalDh(half %h) 49 %add5 = add nsw i32 %add3, %call4 50 %call6 = tail call spir_func i32 @_Z7signbitDh(half %h) 51 %add7 = add nsw i32 %add5, %call6 52 %call8 = tail call spir_func i32 @_Z7isequalDhDh(half %h, half %h) 53 %add9 = add nsw i32 %add7, %call8 54 %call10 = tail call spir_func i32 @_Z10isnotequalDhDh(half %h, half %h) 55 %add11 = add nsw i32 %add9, %call10 56 %call12 = tail call spir_func i32 @_Z9isgreaterDhDh(half %h, half %h) 57 %add13 = add nsw i32 %add11, %call12 58 %call14 = tail call spir_func i32 @_Z14isgreaterequalDhDh(half %h, half %h) 59 %add15 = add nsw i32 %add13, %call14 60 %call16 = tail call spir_func i32 @_Z6islessDhDh(half %h, half %h) 61 %add17 = add nsw i32 %add15, %call16 62 %call18 = tail call spir_func i32 @_Z11islessequalDhDh(half %h, half %h) 63 %add19 = add nsw i32 %add17, %call18 64 %call20 = tail call spir_func i32 @_Z13islessgreaterDhDh(half %h, half %h) 65 %add21 = add nsw i32 %add19, %call20 66 %call22 = tail call spir_func i32 @_Z9isorderedDhDh(half %h, half %h) 67 %add23 = add nsw i32 %add21, %call22 68 %call24 = tail call spir_func i32 @_Z11isunorderedDhDh(half %h, half %h) 69 %add25 = add nsw i32 %add23, %call24 70 store i32 %add25, i32 addrspace(4)* %out, align 4 71 ret void 72} 73 74declare spir_func i32 @_Z8isfiniteDh(half) local_unnamed_addr 75 76declare spir_func i32 @_Z5isinfDh(half) local_unnamed_addr 77 78declare spir_func i32 @_Z5isnanDh(half) local_unnamed_addr 79 80declare spir_func i32 @_Z8isnormalDh(half) local_unnamed_addr 81 82declare spir_func i32 @_Z7signbitDh(half) local_unnamed_addr 83 84declare spir_func i32 @_Z7isequalDhDh(half, half) local_unnamed_addr 85 86declare spir_func i32 @_Z10isnotequalDhDh(half, half) local_unnamed_addr 87 88declare spir_func i32 @_Z9isgreaterDhDh(half, half) local_unnamed_addr 89 90declare spir_func i32 @_Z14isgreaterequalDhDh(half, half) local_unnamed_addr 91 92declare spir_func i32 @_Z6islessDhDh(half, half) local_unnamed_addr 93 94declare spir_func i32 @_Z11islessequalDhDh(half, half) local_unnamed_addr 95 96declare spir_func i32 @_Z13islessgreaterDhDh(half, half) local_unnamed_addr 97 98declare spir_func i32 @_Z9isorderedDhDh(half, half) local_unnamed_addr 99 100declare spir_func i32 @_Z11isunorderedDhDh(half, half) local_unnamed_addr 101 102define dso_local spir_func void @test_vector(<2 x i16> addrspace(4)* nocapture writeonly %out, <2 x half> %h) local_unnamed_addr { 103entry: 104 %call = tail call spir_func <2 x i16> @_Z8isfiniteDv2_Dh(<2 x half> %h) 105 %call1 = tail call spir_func <2 x i16> @_Z5isinfDv2_Dh(<2 x half> %h) 106 %add = add <2 x i16> %call1, %call 107 %call2 = tail call spir_func <2 x i16> @_Z5isnanDv2_Dh(<2 x half> %h) 108 %add3 = add <2 x i16> %add, %call2 109 %call4 = tail call spir_func <2 x i16> @_Z8isnormalDv2_Dh(<2 x half> %h) 110 %add5 = add <2 x i16> %add3, %call4 111 %call6 = tail call spir_func <2 x i16> @_Z7signbitDv2_Dh(<2 x half> %h) 112 %add7 = add <2 x i16> %add5, %call6 113 %call8 = tail call spir_func <2 x i16> @_Z7isequalDv2_DhS_(<2 x half> %h, <2 x half> %h) 114 %add9 = add <2 x i16> %add7, %call8 115 %call10 = tail call spir_func <2 x i16> @_Z10isnotequalDv2_DhS_(<2 x half> %h, <2 x half> %h) 116 %add11 = add <2 x i16> %add9, %call10 117 %call12 = tail call spir_func <2 x i16> @_Z9isgreaterDv2_DhS_(<2 x half> %h, <2 x half> %h) 118 %add13 = add <2 x i16> %add11, %call12 119 %call14 = tail call spir_func <2 x i16> @_Z14isgreaterequalDv2_DhS_(<2 x half> %h, <2 x half> %h) 120 %add15 = add <2 x i16> %add13, %call14 121 %call16 = tail call spir_func <2 x i16> @_Z6islessDv2_DhS_(<2 x half> %h, <2 x half> %h) 122 %add17 = add <2 x i16> %add15, %call16 123 %call18 = tail call spir_func <2 x i16> @_Z11islessequalDv2_DhS_(<2 x half> %h, <2 x half> %h) 124 %add19 = add <2 x i16> %add17, %call18 125 %call20 = tail call spir_func <2 x i16> @_Z13islessgreaterDv2_DhS_(<2 x half> %h, <2 x half> %h) 126 %add21 = add <2 x i16> %add19, %call20 127 %call22 = tail call spir_func <2 x i16> @_Z9isorderedDv2_DhS_(<2 x half> %h, <2 x half> %h) 128 %add23 = add <2 x i16> %add21, %call22 129 %call24 = tail call spir_func <2 x i16> @_Z11isunorderedDv2_DhS_(<2 x half> %h, <2 x half> %h) 130 %add25 = add <2 x i16> %add23, %call24 131 store <2 x i16> %add25, <2 x i16> addrspace(4)* %out, align 4 132 ret void 133} 134 135declare spir_func <2 x i16> @_Z8isfiniteDv2_Dh(<2 x half>) local_unnamed_addr 136 137declare spir_func <2 x i16> @_Z5isinfDv2_Dh(<2 x half>) local_unnamed_addr 138 139declare spir_func <2 x i16> @_Z5isnanDv2_Dh(<2 x half>) local_unnamed_addr 140 141declare spir_func <2 x i16> @_Z8isnormalDv2_Dh(<2 x half>) local_unnamed_addr 142 143declare spir_func <2 x i16> @_Z7signbitDv2_Dh(<2 x half>) local_unnamed_addr 144 145declare spir_func <2 x i16> @_Z7isequalDv2_DhS_(<2 x half>, <2 x half>) local_unnamed_addr 146 147declare spir_func <2 x i16> @_Z10isnotequalDv2_DhS_(<2 x half>, <2 x half>) local_unnamed_addr 148 149declare spir_func <2 x i16> @_Z9isgreaterDv2_DhS_(<2 x half>, <2 x half>) local_unnamed_addr 150 151declare spir_func <2 x i16> @_Z14isgreaterequalDv2_DhS_(<2 x half>, <2 x half>) local_unnamed_addr 152 153declare spir_func <2 x i16> @_Z6islessDv2_DhS_(<2 x half>, <2 x half>) local_unnamed_addr 154 155declare spir_func <2 x i16> @_Z11islessequalDv2_DhS_(<2 x half>, <2 x half>) local_unnamed_addr 156 157declare spir_func <2 x i16> @_Z13islessgreaterDv2_DhS_(<2 x half>, <2 x half>) local_unnamed_addr 158 159declare spir_func <2 x i16> @_Z9isorderedDv2_DhS_(<2 x half>, <2 x half>) local_unnamed_addr 160 161declare spir_func <2 x i16> @_Z11isunorderedDv2_DhS_(<2 x half>, <2 x half>) local_unnamed_addr 162