|
| 1 | +; RUN: llvm-as %s -o %t.bc |
| 2 | +; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_KHR_bfloat16 --spirv-ext=+SPV_INTEL_bfloat16_arithmetic -o %t.spv |
| 3 | +; RUN: llvm-spirv %t.spv -to-text -o - | FileCheck %s --check-prefix=CHECK-SPIRV |
| 4 | + |
| 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 | +; RUN: not llvm-spirv %t.bc --spirv-ext=+SPV_KHR_bfloat16 2>&1 >/dev/null | FileCheck %s --check-prefix=CHECK-ERROR |
| 9 | +; RUN: not llvm-spirv %t.bc --spirv-ext=+SPV_INTEL_bfloat16_arithmetic 2>&1 >/dev/null | FileCheck %s --check-prefix=CHECK-ERROR |
| 10 | +; CHECK-ERROR: RequiresExtension: Feature requires the following SPIR-V extension: |
| 11 | + |
| 12 | +source_filename = "bfloat16.cpp" |
| 13 | +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" |
| 14 | +target triple = "spirv64-unknown-unknown" |
| 15 | + |
| 16 | +; CHECK-SPIRV: Capability BFloat16TypeKHR |
| 17 | +; CHECK-SPIRV: Capability BFloat16ArithmeticINTEL |
| 18 | +; CHECK-SPIRV: Extension "SPV_INTEL_bfloat16_arithmetic" |
| 19 | +; CHECK-SPIRV: Extension "SPV_KHR_bfloat16" |
| 20 | +; CHECK-SPIRV: 4 TypeFloat [[BFLOAT:[0-9]+]] 16 0 |
| 21 | +; CHECK-SPIRV: 5 Function [[#]] [[#]] [[#]] [[#]] |
| 22 | +; CHECK-SPIRV: 7 Phi [[BFLOAT]] [[#]] [[#]] [[#]] [[#]] [[#]] |
| 23 | +; CHECK-SPIRV: 2 ReturnValue [[#]] |
| 24 | +; CHECK-SPIRV: 4 Variable [[#]] [[ADDR1:[0-9]+]] |
| 25 | +; CHECK-SPIRV: 4 Variable [[#]] [[ADDR2:[0-9]+]] |
| 26 | +; CHECK-SPIRV: 4 Variable [[#]] [[ADDR3:[0-9]+]] |
| 27 | +; CHECK-SPIRV: 6 Load [[BFLOAT]] [[DATA1:[0-9]+]] [[ADDR1]] |
| 28 | +; CHECK-SPIRV: 6 Load [[BFLOAT]] [[DATA2:[0-9]+]] [[ADDR2]] |
| 29 | +; CHECK-SPIRV: 6 Load [[BFLOAT]] [[DATA3:[0-9]+]] [[ADDR3]] |
| 30 | +; Undef |
| 31 | +; Constant |
| 32 | +; ConstantComposite |
| 33 | +; ConstantNull |
| 34 | +; SpecConstant |
| 35 | +; SpecConstantComposite |
| 36 | +; CHECK-SPIRV: 4 ConvertFToU [[#]] [[#]] [[DATA1]] |
| 37 | +; CHECK-SPIRV: 4 ConvertFToS [[#]] [[#]] [[DATA1]] |
| 38 | +; CHECK-SPIRV: 4 ConvertSToF [[BFLOAT]] [[#]] [[#]] |
| 39 | +; CHECK-SPIRV: 4 ConvertUToF [[BFLOAT]] [[#]] [[#]] |
| 40 | +; Bitcast |
| 41 | +; CHECK-SPIRV: 4 FNegate [[BFLOAT]] [[#]] [[DATA1]] |
| 42 | +; CHECK-SPIRV: 5 FAdd [[BFLOAT]] [[#]] [[DATA1]] [[DATA2]] |
| 43 | +; CHECK-SPIRV: 5 FSub [[BFLOAT]] [[#]] [[DATA1]] [[DATA2]] |
| 44 | +; CHECK-SPIRV: 5 FMul [[BFLOAT]] [[#]] [[DATA1]] [[DATA2]] |
| 45 | +; CHECK-SPIRV: 5 FDiv [[BFLOAT]] [[#]] [[DATA1]] [[DATA2]] |
| 46 | +; CHECK-SPIRV: 5 FRem [[BFLOAT]] [[#]] [[DATA1]] [[DATA2]] |
| 47 | +; FMod |
| 48 | +; VectorTimesScalar |
| 49 | +; CHECK-SPIRV: 4 IsNan [[#]] [[#]] [[DATA1]] |
| 50 | +; CHECK-SPIRV: 4 IsInf [[#]] [[#]] [[DATA1]] |
| 51 | +; IsFinite |
| 52 | +; CHECK-SPIRV: 4 IsNormal [[#]] [[#]] [[DATA1]] |
| 53 | +; CHECK-SPIRV: 5 Ordered [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 54 | +; CHECK-SPIRV: 5 Unordered [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 55 | +; CHECK-SPIRV: 6 Select [[BFLOAT]] [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 56 | +; CHECK-SPIRV: 5 FOrdEqual [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 57 | +; CHECK-SPIRV: 5 FUnordEqual [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 58 | +; CHECK-SPIRV: 5 FOrdNotEqual [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 59 | +; CHECK-SPIRV: 5 FUnordNotEqual [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 60 | +; CHECK-SPIRV: 5 FOrdLessThan [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 61 | +; CHECK-SPIRV: 5 FUnordLessThan [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 62 | +; CHECK-SPIRV: 5 FOrdGreaterThan [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 63 | +; CHECK-SPIRV: 5 FUnordGreaterThan [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 64 | +; CHECK-SPIRV: 5 FOrdLessThanEqual [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 65 | +; CHECK-SPIRV: 5 FUnordLessThanEqual [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 66 | +; CHECK-SPIRV: 5 FOrdGreaterThanEqual [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 67 | +; CHECK-SPIRV: 5 FUnordGreaterThanEqual [[#]] [[#]] [[DATA1]] [[DATA2]] |
| 68 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] fabs [[DATA1]] |
| 69 | +; CHECK-SPIRV: 8 ExtInst [[BFLOAT]] [[#]] [[#]] fclamp [[DATA1]] [[DATA2]] [[DATA3]] |
| 70 | +; CHECK-SPIRV: 8 ExtInst [[BFLOAT]] [[#]] [[#]] fma [[DATA1]] [[DATA2]] [[DATA3]] |
| 71 | +; CHECK-SPIRV: 7 ExtInst [[BFLOAT]] [[#]] [[#]] fmax [[DATA1]] [[DATA2]] |
| 72 | +; CHECK-SPIRV: 7 ExtInst [[BFLOAT]] [[#]] [[#]] fmin [[DATA1]] [[DATA2]] |
| 73 | +; CHECK-SPIRV: 8 ExtInst [[BFLOAT]] [[#]] [[#]] mad [[DATA1]] [[DATA2]] [[DATA3]] |
| 74 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] nan [[DATA1]] |
| 75 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] native_cos [[DATA1]] |
| 76 | +; CHECK-SPIRV: 7 ExtInst [[BFLOAT]] [[#]] [[#]] native_divide [[DATA1]] [[DATA2]] |
| 77 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] native_exp [[DATA1]] |
| 78 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] native_exp10 [[DATA1]] |
| 79 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] native_exp2 [[DATA1]] |
| 80 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] native_log [[DATA1]] |
| 81 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] native_log10 [[DATA1]] |
| 82 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] native_log2 [[DATA1]] |
| 83 | +; CHECK-SPIRV: 7 ExtInst [[BFLOAT]] [[#]] [[#]] native_powr [[DATA1]] [[DATA2]] |
| 84 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] native_recip [[DATA1]] |
| 85 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] native_rsqrt [[DATA1]] |
| 86 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] native_sin [[DATA1]] |
| 87 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] native_sqrt [[DATA1]] |
| 88 | +; CHECK-SPIRV: 6 ExtInst [[BFLOAT]] [[#]] [[#]] native_tan [[DATA1]] |
| 89 | + |
| 90 | +; CHECK-LLVM: define spir_func void @OpPhi(bfloat %data1, bfloat %data2) |
| 91 | +; CHECK-LLVM: %OpPhi = phi bfloat [ %data1, %blockA ], [ %data2, %blockB ] |
| 92 | +; CHECK-LLVM: ret bfloat %OpReturnValue |
| 93 | +; CHECK-LLVM: [[ADDR1:[%a-z0-9]+]] = alloca bfloat |
| 94 | +; CHECK-LLVM: [[ADDR2:[%a-z0-9]+]] = alloca bfloat |
| 95 | +; CHECK-LLVM: [[ADDR3:[%a-z0-9]+]] = alloca bfloat |
| 96 | +; CHECK-LLVM: [[DATA1:[%a-z0-9]+]] = load bfloat, ptr [[ADDR1]] |
| 97 | +; CHECK-LLVM: [[DATA2:[%a-z0-9]+]] = load bfloat, ptr [[ADDR2]] |
| 98 | +; CHECK-LLVM: [[DATA3:[%a-z0-9]+]] = load bfloat, ptr [[ADDR3]] |
| 99 | +; %OpUndef |
| 100 | +; %OpConstant |
| 101 | +; %OpConstantComposite |
| 102 | +; %OpConstantNull |
| 103 | +; %OpSpecConstant |
| 104 | +; %OpSpecConstantComposite |
| 105 | +; CHECK-LLVM: %OpConvertFToU = fptoui bfloat [[DATA1]] to i32 |
| 106 | +; CHECK-LLVM: %OpConvertFToS = fptosi bfloat [[DATA1]] to i32 |
| 107 | +; CHECK-LLVM: %OpConvertSToF = sitofp i32 0 to bfloat |
| 108 | +; CHECK-LLVM: %OpConvertUToF = uitofp i32 0 to bfloat |
| 109 | +; %OpBitcast |
| 110 | +; CHECK-LLVM: %OpFNegate = fneg bfloat [[DATA1]] |
| 111 | +; CHECK-LLVM: %OpFAdd = fadd bfloat [[DATA1]], [[DATA2]] |
| 112 | +; CHECK-LLVM: %OpFSub = fsub bfloat [[DATA1]], [[DATA2]] |
| 113 | +; CHECK-LLVM: %OpFMul = fmul bfloat [[DATA1]], [[DATA2]] |
| 114 | +; CHECK-LLVM: %OpFDiv = fdiv bfloat [[DATA1]], [[DATA2]] |
| 115 | +; CHECK-LLVM: %OpFRem = frem bfloat [[DATA1]], [[DATA2]] |
| 116 | +; %OpFMod |
| 117 | +; %OpVectorTimesScalar |
| 118 | +; CHECK-LLVM: %[[#]] = call spir_func i32 @_Z5isnanDF16b(bfloat [[DATA1]]) |
| 119 | +; CHECK-LLVM: %[[#]] = call spir_func i32 @_Z5isinfDF16b(bfloat [[DATA1]]) |
| 120 | +; %OpIsFinite |
| 121 | +; CHECK-LLVM: %[[#]] = call spir_func i32 @_Z8isnormalDF16b(bfloat [[DATA1]]) |
| 122 | +; CHECK-LLVM: %OpOrdered = fcmp ord bfloat [[DATA1]], [[DATA2]] |
| 123 | +; CHECK-LLVM: %OpUnordered = fcmp uno bfloat [[DATA1]], [[DATA2]] |
| 124 | +; CHECK-LLVM: %OpSelect = select i1 true, bfloat [[DATA1]], bfloat [[DATA2]] |
| 125 | +; CHECK-LLVM: %OpFOrdEqual = fcmp oeq bfloat [[DATA1]], [[DATA2]] |
| 126 | +; CHECK-LLVM: %OpFUnordEqual = fcmp ueq bfloat [[DATA1]], [[DATA2]] |
| 127 | +; CHECK-LLVM: %OpFOrdNotEqual = fcmp one bfloat [[DATA1]], [[DATA2]] |
| 128 | +; CHECK-LLVM: %OpFUnordNotEqual = fcmp une bfloat [[DATA1]], [[DATA2]] |
| 129 | +; CHECK-LLVM: %OpFOrdLessThan = fcmp olt bfloat [[DATA1]], [[DATA2]] |
| 130 | +; CHECK-LLVM: %OpFUnordLessThan = fcmp ult bfloat [[DATA1]], [[DATA2]] |
| 131 | +; CHECK-LLVM: %OpFOrdGreaterThan = fcmp ogt bfloat [[DATA1]], [[DATA2]] |
| 132 | +; CHECK-LLVM: %OpFUnordGreaterThan = fcmp ugt bfloat [[DATA1]], [[DATA2]] |
| 133 | +; CHECK-LLVM: %OpFOrdLessThanEqual = fcmp ole bfloat [[DATA1]], [[DATA2]] |
| 134 | +; CHECK-LLVM: %OpFUnordLessThanEqual = fcmp ule bfloat [[DATA1]], [[DATA2]] |
| 135 | +; CHECK-LLVM: %OpFOrdGreaterThanEqual = fcmp oge bfloat [[DATA1]], [[DATA2]] |
| 136 | +; CHECK-LLVM: %OpFUnordGreaterThanEqual = fcmp uge bfloat [[DATA1]], [[DATA2]] |
| 137 | +; CHECK-LLVM: %fabs = call spir_func bfloat @_Z4fabsDF16b(bfloat [[DATA1]]) |
| 138 | +; CHECK-LLVM: %fclamp = call spir_func bfloat @_Z5clampDF16bDF16bDF16b(bfloat [[DATA1]], bfloat [[DATA2]], bfloat [[DATA3]]) |
| 139 | +; CHECK-LLVM: %fma = call spir_func bfloat @_Z3fmaDF16bDF16bDF16b(bfloat [[DATA1]], bfloat [[DATA2]], bfloat [[DATA3]]) |
| 140 | +; CHECK-LLVM: %fmax = call spir_func bfloat @_Z4fmaxDF16bDF16b(bfloat [[DATA1]], bfloat [[DATA2]]) |
| 141 | +; CHECK-LLVM: %fmin = call spir_func bfloat @_Z4fminDF16bDF16b(bfloat [[DATA1]], bfloat [[DATA2]]) |
| 142 | +; CHECK-LLVM: %mad = call spir_func bfloat @_Z3madDF16bDF16bDF16b(bfloat [[DATA1]], bfloat [[DATA2]], bfloat [[DATA3]]) |
| 143 | +; CHECK-LLVM: %nan = call spir_func bfloat @_Z3nanDF16b(bfloat [[DATA1]]) |
| 144 | +; CHECK-LLVM: %native_cos = call spir_func bfloat @_Z10native_cosDF16b(bfloat [[DATA1]]) |
| 145 | +; CHECK-LLVM: %native_divide = call spir_func bfloat @_Z13native_divideDF16bDF16b(bfloat [[DATA1]], bfloat [[DATA2]]) |
| 146 | +; CHECK-LLVM: %native_exp = call spir_func bfloat @_Z10native_expDF16b(bfloat [[DATA1]]) |
| 147 | +; CHECK-LLVM: %native_exp10 = call spir_func bfloat @_Z12native_exp10DF16b(bfloat [[DATA1]]) |
| 148 | +; CHECK-LLVM: %native_exp2 = call spir_func bfloat @_Z11native_exp2DF16b(bfloat [[DATA1]]) |
| 149 | +; CHECK-LLVM: %native_log = call spir_func bfloat @_Z10native_logDF16b(bfloat [[DATA1]]) |
| 150 | +; CHECK-LLVM: %native_log10 = call spir_func bfloat @_Z12native_log10DF16b(bfloat [[DATA1]]) |
| 151 | +; CHECK-LLVM: %native_log2 = call spir_func bfloat @_Z11native_log2DF16b(bfloat [[DATA1]]) |
| 152 | +; CHECK-LLVM: %native_powr = call spir_func bfloat @_Z11native_powrDF16bDF16b(bfloat [[DATA1]], bfloat [[DATA2]]) |
| 153 | +; CHECK-LLVM: %native_recip = call spir_func bfloat @_Z12native_recipDF16b(bfloat [[DATA1]]) |
| 154 | +; CHECK-LLVM: %native_rsqrt = call spir_func bfloat @_Z12native_rsqrtDF16b(bfloat [[DATA1]]) |
| 155 | +; CHECK-LLVM: %native_sin = call spir_func bfloat @_Z10native_sinDF16b(bfloat [[DATA1]]) |
| 156 | +; CHECK-LLVM: %native_sqrt = call spir_func bfloat @_Z11native_sqrtDF16b(bfloat [[DATA1]]) |
| 157 | +; CHECK-LLVM: %native_tan = call spir_func bfloat @_Z10native_tanDF16b(bfloat [[DATA1]]) |
| 158 | + |
| 159 | +declare spir_func bfloat @_Z5clampDF16bDF16bDF16b(bfloat, bfloat, bfloat) |
| 160 | +declare spir_func bfloat @_Z3nanDF16b(bfloat) |
| 161 | +declare spir_func bfloat @_Z10native_cosDF16b(bfloat) |
| 162 | +declare spir_func bfloat @_Z13native_divideDF16bDF16b(bfloat, bfloat) |
| 163 | +declare spir_func bfloat @_Z10native_expDF16b(bfloat) |
| 164 | +declare spir_func bfloat @_Z12native_exp10DF16b(bfloat) |
| 165 | +declare spir_func bfloat @_Z11native_exp2DF16b(bfloat) |
| 166 | +declare spir_func bfloat @_Z10native_logDF16b(bfloat) |
| 167 | +declare spir_func bfloat @_Z12native_log10DF16b(bfloat) |
| 168 | +declare spir_func bfloat @_Z11native_log2DF16b(bfloat) |
| 169 | +declare spir_func bfloat @_Z11native_powrDF16bDF16b(bfloat, bfloat) |
| 170 | +declare spir_func bfloat @_Z12native_recipDF16b(bfloat) |
| 171 | +declare spir_func bfloat @_Z12native_rsqrtDF16b(bfloat) |
| 172 | +declare spir_func bfloat @_Z10native_sinDF16b(bfloat) |
| 173 | +declare spir_func bfloat @_Z11native_sqrtDF16b(bfloat) |
| 174 | +declare spir_func bfloat @_Z10native_tanDF16b(bfloat) |
| 175 | + |
| 176 | +define spir_func void @OpPhi(bfloat %data1, bfloat %data2) { |
| 177 | + br label %blockA |
| 178 | +blockA: |
| 179 | + br label %phi |
| 180 | +blockB: |
| 181 | + br label %phi |
| 182 | +phi: |
| 183 | + %OpPhi = phi bfloat [ %data1, %blockA ], [ %data2, %blockB ] |
| 184 | + ret void |
| 185 | +} |
| 186 | + |
| 187 | +define spir_func bfloat @OpReturnValue(bfloat %OpReturnValue) { |
| 188 | + ret bfloat %OpReturnValue |
| 189 | +} |
| 190 | + |
| 191 | +define spir_kernel void @testMath() { |
| 192 | +entry: |
| 193 | + %addr1 = alloca bfloat |
| 194 | + %addr2 = alloca bfloat |
| 195 | + %addr3 = alloca bfloat |
| 196 | + %data1 = load bfloat, ptr %addr1 |
| 197 | + %data2 = load bfloat, ptr %addr2 |
| 198 | + %data3 = load bfloat, ptr %addr3 |
| 199 | + ; %OpUndef |
| 200 | + ; %OpConstant |
| 201 | + ; %OpConstantComposite |
| 202 | + ; %OpConstantNull |
| 203 | + ; %OpSpecConstant |
| 204 | + ; %OpSpecConstantComposite |
| 205 | + %OpConvertFToU = fptoui bfloat %data1 to i32 |
| 206 | + %OpConvertFToS = fptosi bfloat %data1 to i32 |
| 207 | + %OpConvertSToF = sitofp i32 0 to bfloat |
| 208 | + %OpConvertUToF = uitofp i32 0 to bfloat |
| 209 | + ; %OpBitcast |
| 210 | + %OpFNegate = fneg bfloat %data1 |
| 211 | + %OpFAdd = fadd bfloat %data1, %data2 |
| 212 | + %OpFSub = fsub bfloat %data1, %data2 |
| 213 | + %OpFMul = fmul bfloat %data1, %data2 |
| 214 | + %OpFDiv = fdiv bfloat %data1, %data2 |
| 215 | + %OpFRem = frem bfloat %data1, %data2 |
| 216 | + ; %OpFMod |
| 217 | + ; %OpVectorTimesScalar |
| 218 | + %OpIsNan = call i1 @llvm.is.fpclass.bfloat(bfloat %data1, i32 3) |
| 219 | + %OpIsInf = call i1 @llvm.is.fpclass.bfloat(bfloat %data1, i32 516) |
| 220 | + ; %OpIsFinite |
| 221 | + %OpIsNormal = call i1 @llvm.is.fpclass.bfloat(bfloat %data1, i32 264) |
| 222 | + %OpOrdered = fcmp ord bfloat %data1, %data2 |
| 223 | + %OpUnordered = fcmp uno bfloat %data1, %data2 |
| 224 | + %OpSelect = select i1 true, bfloat %data1, bfloat %data2 |
| 225 | + %OpFOrdEqual = fcmp oeq bfloat %data1, %data2 |
| 226 | + %OpFUnordEqual = fcmp ueq bfloat %data1, %data2 |
| 227 | + %OpFOrdNotEqual = fcmp one bfloat %data1, %data2 |
| 228 | + %OpFUnordNotEqual = fcmp une bfloat %data1, %data2 |
| 229 | + %OpFOrdLessThan = fcmp olt bfloat %data1, %data2 |
| 230 | + %OpFUnordLessThan = fcmp ult bfloat %data1, %data2 |
| 231 | + %OpFOrdGreaterThan = fcmp ogt bfloat %data1, %data2 |
| 232 | + %OpFUnordGreaterThan = fcmp ugt bfloat %data1, %data2 |
| 233 | + %OpFOrdLessThanEqual = fcmp ole bfloat %data1, %data2 |
| 234 | + %OpFUnordLessThanEqual = fcmp ule bfloat %data1, %data2 |
| 235 | + %OpFOrdGreaterThanEqual = fcmp oge bfloat %data1, %data2 |
| 236 | + %OpFUnordGreaterThanEqual = fcmp uge bfloat %data1, %data2 |
| 237 | + %fabs = call bfloat @llvm.fabs.bfloat(bfloat %data1) |
| 238 | + %fclamp = call spir_func bfloat @_Z5clampDF16bDF16bDF16b(bfloat %data1, bfloat %data2, bfloat %data3) |
| 239 | + %fma = call bfloat @llvm.fma.bfloat(bfloat %data1, bfloat %data2, bfloat %data3) |
| 240 | + %fmax = call bfloat @llvm.maxnum.bfloat(bfloat %data1, bfloat %data2) |
| 241 | + %fmin = call bfloat @llvm.minnum.bfloat(bfloat %data1, bfloat %data2) |
| 242 | + %mad = call bfloat @llvm.fmuladd.bfloat(bfloat %data1, bfloat %data2, bfloat %data3) |
| 243 | + %nan = call spir_func bfloat @_Z3nanDF16b(bfloat %data1) |
| 244 | + %native_cos = call spir_func bfloat @_Z10native_cosDF16b(bfloat %data1) |
| 245 | + %native_divide = call spir_func bfloat @_Z13native_divideDF16bDF16b(bfloat %data1, bfloat %data2) |
| 246 | + %native_exp = call spir_func bfloat @_Z10native_expDF16b(bfloat %data1) |
| 247 | + %native_exp10 = call spir_func bfloat @_Z12native_exp10DF16b(bfloat %data1) |
| 248 | + %native_exp2 = call spir_func bfloat @_Z11native_exp2DF16b(bfloat %data1) |
| 249 | + %native_log = call spir_func bfloat @_Z10native_logDF16b(bfloat %data1) |
| 250 | + %native_log10 = call spir_func bfloat @_Z12native_log10DF16b(bfloat %data1) |
| 251 | + %native_log2 = call spir_func bfloat @_Z11native_log2DF16b(bfloat %data1) |
| 252 | + %native_powr = call spir_func bfloat @_Z11native_powrDF16bDF16b(bfloat %data1, bfloat %data2) |
| 253 | + %native_recip = call spir_func bfloat @_Z12native_recipDF16b(bfloat %data1) |
| 254 | + %native_rsqrt = call spir_func bfloat @_Z12native_rsqrtDF16b(bfloat %data1) |
| 255 | + %native_sin = call spir_func bfloat @_Z10native_sinDF16b(bfloat %data1) |
| 256 | + %native_sqrt = call spir_func bfloat @_Z11native_sqrtDF16b(bfloat %data1) |
| 257 | + %native_tan = call spir_func bfloat @_Z10native_tanDF16b(bfloat %data1) |
| 258 | + ret void |
| 259 | +} |
| 260 | + |
| 261 | +!opencl.enable.FP_CONTRACT = !{} |
| 262 | +!opencl.spir.version = !{!0} |
| 263 | +!opencl.ocl.version = !{!1} |
| 264 | +!opencl.used.extensions = !{!2} |
| 265 | +!opencl.used.optional.core.features = !{!3} |
| 266 | +!opencl.compiler.options = !{!3} |
| 267 | + |
| 268 | +!0 = !{i32 1, i32 2} |
| 269 | +!1 = !{i32 2, i32 0} |
| 270 | +!2 = !{!"cl_khr_fp16"} |
| 271 | +!3 = !{} |
0 commit comments