Skip to content

Commit c824c6f

Browse files
author
Dmitry Sidorov
committed
Fix BFloat16 mangling (#3355)
The translator follows itanium mangling and per https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling __bf16 mangling should be 'DF16b'. Signed-off-by: Sidorov, Dmitry <dmitry.sidorov@intel.com>
1 parent b50fc5c commit c824c6f

File tree

8 files changed

+294
-16
lines changed

8 files changed

+294
-16
lines changed

lib/SPIRV/Mangler/ManglingUtils.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ static const char *PrimitiveNames[PRIMITIVE_NUM] = {
9393
"intel_sub_group_avc_ime_result_dual_reference_streamin_t"
9494
};
9595

96+
// clang-format off
9697
const char *MangledTypes[PRIMITIVE_NUM] = {
9798
"b", // BOOL
9899
"h", // UCHAR
@@ -106,7 +107,7 @@ const char *MangledTypes[PRIMITIVE_NUM] = {
106107
"Dh", // HALF
107108
"f", // FLOAT
108109
"d", // DOUBLE
109-
"u6__bf16", // __BF16
110+
"DF16b", // __BF16
110111
"v", // VOID
111112
"z", // VarArg
112113
"14ocl_image1d_ro", // PRIMITIVE_IMAGE1D_RO_T
@@ -175,6 +176,7 @@ const char *MangledTypes[PRIMITIVE_NUM] = {
175176
"55ocl_intel_sub_group_avc_ime_single_reference_streamin_t", // PRIMITIVE_SUB_GROUP_AVC_IME_SINGLE_REF_STREAMIN_T
176177
"53ocl_intel_sub_group_avc_ime_dual_reference_streamin_t" // PRIMITIVE_SUB_GROUP_AVC_IME_DUAL_REF_STREAMIN_T
177178
};
179+
// clang-format on
178180

179181
const char *ReadableAttribute[ATTR_NUM] = {
180182
"restrict", "volatile", "const", "__private",

lib/SPIRV/SPIRVUtil.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,11 @@ ParamType lastFuncParamType(StringRef MangledName) {
525525
char Mangled = Copy.back();
526526
std::string Mangled2 = Copy.substr(Copy.size() - 2);
527527

528+
std::string Mangled5 = Copy.substr(Copy.size() - 5);
529+
if (Mangled5 == "DF16b") {
530+
return ParamType::FLOAT;
531+
}
532+
528533
if (isMangledTypeFP(Mangled) || isMangledTypeHalf(Mangled2)) {
529534
return ParamType::FLOAT;
530535
} else if (isMangledTypeUnsigned(Mangled)) {
Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,271 @@
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 = !{}

test/extensions/INTEL/SPV_INTEL_shader_atomic_bfloat16/AtomicFAddEXT.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ define dso_local spir_func bfloat @test_AtomicFAddEXT_bfloat(ptr addrspace(4) al
2121
entry:
2222
%0 = addrspacecast ptr addrspace(4) %Arg to ptr addrspace(1)
2323
; CHECK-SPIRV: AtomicFAddEXT [[BFLOAT]]
24-
; CHECK-LLVM-SPV: call spir_func bfloat @_Z21__spirv_AtomicFAddEXTPU3AS1u6__bf16iiu6__bf16({{.*}}bfloat
25-
%ret = tail call spir_func bfloat @_Z21__spirv_AtomicFAddEXTPU3AS1u6__bf16iiu6__bf16(ptr addrspace(1) %0, i32 1, i32 896, bfloat 1.000000e+00)
24+
; CHECK-LLVM-SPV: call spir_func bfloat @_Z21__spirv_AtomicFAddEXTPU3AS1DF16biiDF16b({{.*}}bfloat
25+
%ret = tail call spir_func bfloat @_Z21__spirv_AtomicFAddEXTPU3AS1DF16biiDF16b(ptr addrspace(1) %0, i32 1, i32 896, bfloat 1.000000e+00)
2626
ret bfloat %ret
2727
}
2828

2929
; Function Attrs: convergent
30-
declare dso_local spir_func bfloat @_Z21__spirv_AtomicFAddEXTPU3AS1u6__bf16iiu6__bf16(ptr addrspace(1), i32, i32, bfloat)
30+
declare dso_local spir_func bfloat @_Z21__spirv_AtomicFAddEXTPU3AS1DF16biiDF16b(ptr addrspace(1), i32, i32, bfloat)

test/extensions/INTEL/SPV_INTEL_shader_atomic_bfloat16/AtomicFMaxEXT.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ define dso_local spir_func bfloat @test_AtomicFMaxEXT_bfloat(ptr addrspace(4) al
2121
entry:
2222
%0 = addrspacecast ptr addrspace(4) %Arg to ptr addrspace(1)
2323
; CHECK-SPIRV: AtomicFMaxEXT [[BFLOAT]]
24-
; CHECK-LLVM-SPV: call spir_func bfloat @_Z21__spirv_AtomicFMaxEXTPU3AS1u6__bf16iiu6__bf16({{.*}}bfloat
25-
%ret = tail call spir_func bfloat @_Z21__spirv_AtomicFMaxEXTPU3AS1u6__bf16iiu6__bf16(ptr addrspace(1) %0, i32 1, i32 896, bfloat 1.000000e+00)
24+
; CHECK-LLVM-SPV: call spir_func bfloat @_Z21__spirv_AtomicFMaxEXTPU3AS1DF16biiDF16b({{.*}}bfloat
25+
%ret = tail call spir_func bfloat @_Z21__spirv_AtomicFMaxEXTPU3AS1DF16biiDF16b(ptr addrspace(1) %0, i32 1, i32 896, bfloat 1.000000e+00)
2626
ret bfloat %ret
2727
}
2828

2929
; Function Attrs: convergent
30-
declare dso_local spir_func bfloat @_Z21__spirv_AtomicFMaxEXTPU3AS1u6__bf16iiu6__bf16(ptr addrspace(1), i32, i32, bfloat)
30+
declare dso_local spir_func bfloat @_Z21__spirv_AtomicFMaxEXTPU3AS1DF16biiDF16b(ptr addrspace(1), i32, i32, bfloat)

test/extensions/INTEL/SPV_INTEL_shader_atomic_bfloat16/AtomicFMinEXT.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ define dso_local spir_func bfloat @test_AtomicFMinEXT_bfloat(ptr addrspace(4) al
2121
entry:
2222
%0 = addrspacecast ptr addrspace(4) %Arg to ptr addrspace(1)
2323
; CHECK-SPIRV: AtomicFMinEXT [[BFLOAT]]
24-
; CHECK-LLVM-SPV: call spir_func bfloat @_Z21__spirv_AtomicFMinEXTPU3AS1u6__bf16iiu6__bf16({{.*}}bfloat
25-
%ret = tail call spir_func bfloat @_Z21__spirv_AtomicFMinEXTPU3AS1u6__bf16iiu6__bf16(ptr addrspace(1) %0, i32 1, i32 896, bfloat 1.000000e+00)
24+
; CHECK-LLVM-SPV: call spir_func bfloat @_Z21__spirv_AtomicFMinEXTPU3AS1DF16biiDF16b({{.*}}bfloat
25+
%ret = tail call spir_func bfloat @_Z21__spirv_AtomicFMinEXTPU3AS1DF16biiDF16b(ptr addrspace(1) %0, i32 1, i32 896, bfloat 1.000000e+00)
2626
ret bfloat %ret
2727
}
2828

2929
; Function Attrs: convergent
30-
declare dso_local spir_func bfloat @_Z21__spirv_AtomicFMinEXTPU3AS1u6__bf16iiu6__bf16(ptr addrspace(1), i32, i32, bfloat)
30+
declare dso_local spir_func bfloat @_Z21__spirv_AtomicFMinEXTPU3AS1DF16biiDF16b(ptr addrspace(1), i32, i32, bfloat)

0 commit comments

Comments
 (0)