@@ -105,9 +105,10 @@ entry:
105
105
; CHECK: define spir_kernel void @test_add_v2
106
106
define spir_kernel void @test_add_v2 (i16 addrspace (1 )* %out1 , float %v1_1 , i16 zeroext %v2_1 ) #1 {
107
107
entry:
108
- ; CHECK: %[[SRC0BF:.*]] = fptrunc float %v1_1 to bfloat
109
108
; CHECK: %[[SRC1BF:.*]] = bitcast i16 %v2_1 to bfloat
110
- ; CHECK: %[[RES:.*]] = fadd bfloat %[[SRC0BF]], %[[SRC1BF]]
109
+ ; CHECK: %[[SRC1F:.*]] = fpext bfloat %[[SRC1BF]] to float
110
+ ; CHECK: %[[RESF:.*]] = fadd float %v1_1, %[[SRC1F]]
111
+ ; CHECK: %[[RES:.*]] = fptrunc float %[[RESF]] to bfloat
111
112
; CHECK: %{{.*}} = bitcast bfloat %[[RES]] to i16
112
113
%call = call spir_func zeroext i16 @_Z18__builtin_bf16_addft (float %v1_1 , i16 zeroext %v2_1 ) #2
113
114
%arrayidx = getelementptr inbounds i16 , i16 addrspace (1 )* %out1 , i64 0
@@ -120,8 +121,9 @@ entry:
120
121
define spir_kernel void @test_add_v3 (i16 addrspace (1 )* %out1 , i16 zeroext %v1_1 , float %v2_1 ) #1 {
121
122
entry:
122
123
; CHECK: %[[SRC0BF:.*]] = bitcast i16 %v1_1 to bfloat
123
- ; CHECK: %[[SRC1BF:.*]] = fptrunc float %v2_1 to bfloat
124
- ; CHECK: %[[RES:.*]] = fadd bfloat %[[SRC0BF]], %[[SRC1BF]]
124
+ ; CHECK: %[[SRC0F:.*]] = fpext bfloat %[[SRC0BF]] to float
125
+ ; CHECK: %[[RESF:.*]] = fadd float %[[SRC0F]], %v2_1
126
+ ; CHECK: %[[RES:.*]] = fptrunc float %[[RESF]] to bfloat
125
127
; CHECK: %{{.*}} = bitcast bfloat %[[RES]] to i16
126
128
%call = call spir_func zeroext i16 @_Z18__builtin_bf16_addtf (i16 zeroext %v1_1 , float %v2_1 ) #2
127
129
%arrayidx = getelementptr inbounds i16 , i16 addrspace (1 )* %out1 , i64 0
@@ -133,9 +135,10 @@ entry:
133
135
define spir_kernel void @test_addf_v1 (float addrspace (1 )* %out1 , i16 zeroext %v1_1 , i16 zeroext %v2_1 ) #1 {
134
136
entry:
135
137
; CHECK: %[[SRC0BF:.*]] = bitcast i16 %v1_1 to bfloat
138
+ ; CHECK: %[[SRC0F:.*]] = fpext bfloat %[[SRC0BF]] to float
136
139
; CHECK: %[[SRC1BF:.*]] = bitcast i16 %v2_1 to bfloat
137
- ; CHECK: %[[RES :.*]] = fadd bfloat %[[SRC0BF]], %[[ SRC1BF]]
138
- ; CHECK: %{{.*}} = fpext bfloat %[[RES]] to float
140
+ ; CHECK: %[[SRC1F :.*]] = fpext bfloat %[[SRC1BF]] to float
141
+ ; CHECK: %[[RES:.*]] = fadd float %[[SRC0F]], %[[SRC1F]]
139
142
%call = call spir_func float @_Z19__builtin_bf16_addftt (i16 zeroext %v1_1 , i16 zeroext %v2_1 ) #2
140
143
%arrayidx = getelementptr inbounds float , float addrspace (1 )* %out1 , i64 0
141
144
store float %call , float addrspace (1 )* %arrayidx , align 4
@@ -186,9 +189,10 @@ entry:
186
189
; CHECK: define spir_kernel void @test_sub_v2
187
190
define spir_kernel void @test_sub_v2 (i16 addrspace (1 )* %out1 , float %v1_1 , i16 zeroext %v2_1 ) #1 {
188
191
entry:
189
- ; CHECK: %[[SRC0BF:.*]] = fptrunc float %v1_1 to bfloat
190
192
; CHECK: %[[SRC1BF:.*]] = bitcast i16 %v2_1 to bfloat
191
- ; CHECK: %[[RES:.*]] = fsub bfloat %[[SRC0BF]], %[[SRC1BF]]
193
+ ; CHECK: %[[SRC1F:.*]] = fpext bfloat %[[SRC1BF]] to float
194
+ ; CHECK: %[[RESF:.*]] = fsub float %v1_1, %[[SRC1F]]
195
+ ; CHECK: %[[RES:.*]] = fptrunc float %[[RESF]] to bfloat
192
196
; CHECK: %{{.*}} = bitcast bfloat %[[RES]] to i16
193
197
%call = call spir_func zeroext i16 @_Z18__builtin_bf16_subft (float %v1_1 , i16 zeroext %v2_1 ) #2
194
198
%arrayidx = getelementptr inbounds i16 , i16 addrspace (1 )* %out1 , i64 0
@@ -201,8 +205,9 @@ entry:
201
205
define spir_kernel void @test_sub_v3 (i16 addrspace (1 )* %out1 , i16 zeroext %v1_1 , float %v2_1 ) #1 {
202
206
entry:
203
207
; CHECK: %[[SRC0BF:.*]] = bitcast i16 %v1_1 to bfloat
204
- ; CHECK: %[[SRC1BF:.*]] = fptrunc float %v2_1 to bfloat
205
- ; CHECK: %[[RES:.*]] = fsub bfloat %[[SRC0BF]], %[[SRC1BF]]
208
+ ; CHECK: %[[SRC0F:.*]] = fpext bfloat %[[SRC0BF]] to float
209
+ ; CHECK: %[[RESF:.*]] = fsub float %[[SRC0F]], %v2_1
210
+ ; CHECK: %[[RES:.*]] = fptrunc float %[[RESF]] to bfloat
206
211
; CHECK: %{{.*}} = bitcast bfloat %[[RES]] to i16
207
212
%call = call spir_func zeroext i16 @_Z18__builtin_bf16_subtf (i16 zeroext %v1_1 , float %v2_1 ) #2
208
213
%arrayidx = getelementptr inbounds i16 , i16 addrspace (1 )* %out1 , i64 0
@@ -214,9 +219,10 @@ entry:
214
219
define spir_kernel void @test_subf_v1 (float addrspace (1 )* %out1 , i16 zeroext %v1_1 , i16 zeroext %v2_1 ) #1 {
215
220
entry:
216
221
; CHECK: %[[SRC0BF:.*]] = bitcast i16 %v1_1 to bfloat
222
+ ; CHECK: %[[SRC0F:.*]] = fpext bfloat %[[SRC0BF]] to float
217
223
; CHECK: %[[SRC1BF:.*]] = bitcast i16 %v2_1 to bfloat
218
- ; CHECK: %[[RES :.*]] = fsub bfloat %[[SRC0BF]], %[[ SRC1BF]]
219
- ; CHECK: %{{.*}} = fpext bfloat %[[RES]] to float
224
+ ; CHECK: %[[SRC1F :.*]] = fpext bfloat %[[SRC1BF]] to float
225
+ ; CHECK: %[[RES:.*]] = fsub float %[[SRC0F]], %[[SRC1F]]
220
226
%call = call spir_func float @_Z19__builtin_bf16_subftt (i16 zeroext %v1_1 , i16 zeroext %v2_1 ) #2
221
227
%arrayidx = getelementptr inbounds float , float addrspace (1 )* %out1 , i64 0
222
228
store float %call , float addrspace (1 )* %arrayidx , align 4
@@ -267,9 +273,10 @@ entry:
267
273
; CHECK: define spir_kernel void @test_mul_v2
268
274
define spir_kernel void @test_mul_v2 (i16 addrspace (1 )* %out1 , float %v1_1 , i16 zeroext %v2_1 ) #1 {
269
275
entry:
270
- ; CHECK: %[[SRC0BF:.*]] = fptrunc float %v1_1 to bfloat
271
276
; CHECK: %[[SRC1BF:.*]] = bitcast i16 %v2_1 to bfloat
272
- ; CHECK: %[[RES:.*]] = fmul bfloat %[[SRC0BF]], %[[SRC1BF]]
277
+ ; CHECK: %[[SRC1F:.*]] = fpext bfloat %[[SRC1BF]] to float
278
+ ; CHECK: %[[RESF:.*]] = fmul float %v1_1, %[[SRC1F]]
279
+ ; CHECK: %[[RES:.*]] = fptrunc float %[[RESF]] to bfloat
273
280
; CHECK: %{{.*}} = bitcast bfloat %[[RES]] to i16
274
281
%call = call spir_func zeroext i16 @_Z18__builtin_bf16_mulft (float %v1_1 , i16 zeroext %v2_1 ) #2
275
282
%arrayidx = getelementptr inbounds i16 , i16 addrspace (1 )* %out1 , i64 0
@@ -282,8 +289,9 @@ entry:
282
289
define spir_kernel void @test_mul_v3 (i16 addrspace (1 )* %out1 , i16 zeroext %v1_1 , float %v2_1 ) #1 {
283
290
entry:
284
291
; CHECK: %[[SRC0BF:.*]] = bitcast i16 %v1_1 to bfloat
285
- ; CHECK: %[[SRC1BF:.*]] = fptrunc float %v2_1 to bfloat
286
- ; CHECK: %[[RES:.*]] = fmul bfloat %[[SRC0BF]], %[[SRC1BF]]
292
+ ; CHECK: %[[SRC0F:.*]] = fpext bfloat %[[SRC0BF]] to float
293
+ ; CHECK: %[[RESF:.*]] = fmul float %[[SRC0F]], %v2_1
294
+ ; CHECK: %[[RES:.*]] = fptrunc float %[[RESF]] to bfloat
287
295
; CHECK: %{{.*}} = bitcast bfloat %[[RES]] to i16
288
296
%call = call spir_func zeroext i16 @_Z18__builtin_bf16_multf (i16 zeroext %v1_1 , float %v2_1 ) #2
289
297
%arrayidx = getelementptr inbounds i16 , i16 addrspace (1 )* %out1 , i64 0
@@ -295,9 +303,10 @@ entry:
295
303
define spir_kernel void @test_mulf_v1 (float addrspace (1 )* %out1 , i16 zeroext %v1_1 , i16 zeroext %v2_1 ) #1 {
296
304
entry:
297
305
; CHECK: %[[SRC0BF:.*]] = bitcast i16 %v1_1 to bfloat
306
+ ; CHECK: %[[SRC0F:.*]] = fpext bfloat %[[SRC0BF]] to float
298
307
; CHECK: %[[SRC1BF:.*]] = bitcast i16 %v2_1 to bfloat
299
- ; CHECK: %[[RES :.*]] = fmul bfloat %[[SRC0BF]], %[[ SRC1BF]]
300
- ; CHECK: %{{.*}} = fpext bfloat %[[RES]] to float
308
+ ; CHECK: %[[SRC1F :.*]] = fpext bfloat %[[SRC1BF]] to float
309
+ ; CHECK: %[[RES:.*]] = fmul float %[[SRC0F]], %[[SRC1F]]
301
310
%call = call spir_func float @_Z19__builtin_bf16_mulftt (i16 zeroext %v1_1 , i16 zeroext %v2_1 ) #2
302
311
%arrayidx = getelementptr inbounds float , float addrspace (1 )* %out1 , i64 0
303
312
store float %call , float addrspace (1 )* %arrayidx , align 4
@@ -348,12 +357,14 @@ entry:
348
357
; Function Attrs: convergent nounwind
349
358
define spir_kernel void @test_mad_v2 (i16 addrspace (1 )* %out1 , float %v1_1 , i16 zeroext %v2_1 , i16 zeroext %v3_1 ) #1 {
350
359
entry:
351
- ; CHECK: %[[SRC0BF:.*]] = fptrunc float %v1_1 to bfloat
352
360
; CHECK: %[[SRC1BF:.*]] = bitcast i16 %v2_1 to bfloat
361
+ ; CHECK: %[[SRC1F:.*]] = fpext bfloat %[[SRC1BF]] to float
353
362
; CHECK: %[[SRC2BF:.*]] = bitcast i16 %v3_1 to bfloat
354
- ; CHECK: %[[FMULRES:.*]] = fmul bfloat %[[SRC0BF]], %[[SRC1BF]]
355
- ; CHECK: %[[FADDRES:.*]] = fadd bfloat %[[FMULRES]], %[[SRC2BF]]
356
- ; CHECK: %{{.*}} = bitcast bfloat %[[FADDRES]] to i16
363
+ ; CHECK: %[[SRC2F:.*]] = fpext bfloat %[[SRC2BF]] to float
364
+ ; CHECK: %[[FMULRES:.*]] = fmul float %v1_1, %[[SRC1F]]
365
+ ; CHECK: %[[FADDRES:.*]] = fadd float %[[FMULRES]], %[[SRC2F]]
366
+ ; CHECK: %[[RES:.*]] = fptrunc float %[[FADDRES]] to bfloat
367
+ ; CHECK: %{{.*}} = bitcast bfloat %[[RES]] to i16
357
368
%call = call spir_func zeroext i16 @_Z18__builtin_bf16_madftt (float %v1_1 , i16 zeroext %v2_1 , i16 zeroext %v3_1 ) #2
358
369
%arrayidx = getelementptr inbounds i16 , i16 addrspace (1 )* %out1 , i64 0
359
370
store i16 %call , i16 addrspace (1 )* %arrayidx , align 2
@@ -364,11 +375,13 @@ entry:
364
375
define spir_kernel void @test_mad_v3 (i16 addrspace (1 )* %out1 , i16 zeroext %v1_1 , i16 zeroext %v2_1 , float %v3_1 ) #1 {
365
376
entry:
366
377
; CHECK: %[[SRC0BF:.*]] = bitcast i16 %v1_1 to bfloat
378
+ ; CHECK: %[[SRC0F:.*]] = fpext bfloat %[[SRC0BF]] to float
367
379
; CHECK: %[[SRC1BF:.*]] = bitcast i16 %v2_1 to bfloat
368
- ; CHECK: %[[SRC2BF:.*]] = fptrunc float %v3_1 to bfloat
369
- ; CHECK: %[[FMULRES:.*]] = fmul bfloat %[[SRC0BF]], %[[SRC1BF]]
370
- ; CHECK: %[[FADDRES:.*]] = fadd bfloat %[[FMULRES]], %[[SRC2BF]]
371
- ; CHECK: %{{.*}} = bitcast bfloat %[[FADDRES]] to i16
380
+ ; CHECK: %[[SRC1F:.*]] = fpext bfloat %[[SRC1BF]] to float
381
+ ; CHECK: %[[FMULRES:.*]] = fmul float %[[SRC0F]], %[[SRC1F]]
382
+ ; CHECK: %[[FADDRES:.*]] = fadd float %[[FMULRES]], %v3_1
383
+ ; CHECK: %[[RES:.*]] = fptrunc float %[[FADDRES]] to bfloat
384
+ ; CHECK: %{{.*}} = bitcast bfloat %[[RES]] to i16
372
385
%call = call spir_func zeroext i16 @_Z18__builtin_bf16_madttf (i16 zeroext %v1_1 , i16 zeroext %v2_1 , float %v3_1 ) #2
373
386
%arrayidx = getelementptr inbounds i16 , i16 addrspace (1 )* %out1 , i64 0
374
387
store i16 %call , i16 addrspace (1 )* %arrayidx , align 2
@@ -379,11 +392,13 @@ entry:
379
392
define spir_kernel void @test_madf_v1 (float addrspace (1 )* %out1 , i16 zeroext %v1_1 , i16 zeroext %v2_1 , i16 zeroext %v3_1 ) #1 {
380
393
entry:
381
394
; CHECK: %[[SRC0BF:.*]] = bitcast i16 %v1_1 to bfloat
395
+ ; CHECK: %[[SRC0F:.*]] = fpext bfloat %[[SRC0BF]] to float
382
396
; CHECK: %[[SRC1BF:.*]] = bitcast i16 %v2_1 to bfloat
397
+ ; CHECK: %[[SRC1F:.*]] = fpext bfloat %[[SRC1BF]] to float
383
398
; CHECK: %[[SRC2BF:.*]] = bitcast i16 %v3_1 to bfloat
384
- ; CHECK: %[[FMULRES :.*]] = fmul bfloat %[[SRC0BF]], %[[SRC1BF]]
385
- ; CHECK: %[[FADDRES :.*]] = fadd bfloat %[[FMULRES ]], %[[SRC2BF ]]
386
- ; CHECK: %{{.*}} = fpext bfloat %[[FADDRES]] to float
399
+ ; CHECK: %[[SRC2F :.*]] = fpext bfloat %[[SRC2BF]] to float
400
+ ; CHECK: %[[FMULRES :.*]] = fmul float %[[SRC0F ]], %[[SRC1F ]]
401
+ ; CHECK: %[[FADDRES:.*]] = fadd float %[[FMULRES]], %[[SRC2F]]
387
402
%call = call spir_func float @_Z19__builtin_bf16_madfttt (i16 zeroext %v1_1 , i16 zeroext %v2_1 , i16 zeroext %v3_1 ) #2
388
403
%arrayidx = getelementptr inbounds float , float addrspace (1 )* %out1 , i64 0
389
404
store float %call , float addrspace (1 )* %arrayidx , align 4
0 commit comments