@@ -228,3 +228,38 @@ entry:
228
228
store i32 %call1 , i32 addrspace (1 )* %arrayidx2 , align 4
229
229
ret void
230
230
}
231
+
232
+ define spir_kernel void @fptosi64_kernel (double addrspace (1 )* %inA , i64 addrspace (1 )* %out , <8 x i32 > %r0 , <8 x i32 > %payloadHeader , <3 x i32 > %enqueuedLocalSize , i16 %localIdX , i16 %localIdY , i16 %localIdZ , i8* %privateBase , i32 %bufferOffset , i32 %bufferOffset1 , i32 %bindlessOffset , i32 %bindlessOffset2 ) #0 {
233
+ ; CHECK-LABEL: @fptosi64_kernel(
234
+ ; CHECK: entry:
235
+ ; CHECK: [[DPEmuFlag:%.*]] = alloca i32
236
+ ; CHECK: [[TMP0:%.*]] = extractelement <8 x i32> %payloadHeader, i64 0
237
+ ; CHECK: [[TMP1:%.*]] = extractelement <3 x i32> %enqueuedLocalSize, i64 0
238
+ ; CHECK: [[TMP2:%.*]] = extractelement <8 x i32> %r0, i64 1
239
+ ; CHECK: [[MUL:%.*]] = mul i32 [[TMP1]], [[TMP2]]
240
+ ; CHECK: [[LOCAL_ID_X:%.*]] = zext i16 %localIdX to i32
241
+ ; CHECK: [[ADD0:%.*]] = add i32 [[MUL]], [[LOCAL_ID_X]]
242
+ ; CHECK: [[ADD1:%.*]] = add i32 [[ADD0]], [[TMP0]]
243
+ ; CHECK: [[CONV0:%.*]] = zext i32 [[ADD1]] to i64
244
+ ; CHECK: [[ARRAY_IDX0:%.*]] = getelementptr inbounds double, double addrspace(1)* %inA, i64 [[CONV0]]
245
+ ; CHECK: [[TMP3:%.*]] = load double, double addrspace(1)* [[ARRAY_IDX0]], align 8
246
+ ; CHECK: [[CALL_TMP:%.*]] = call i64 @__igcbuiltin_dp_to_int64(double [[TMP3]], i32 3, i32 0, i32* [[DPEmuFlag]])
247
+ ; CHECK: [[ARRAY_IDX1:%.*]] = getelementptr inbounds i64, i64 addrspace(1)* %out, i64 [[CONV0]]
248
+ ; CHECK: store i64 [[CALL_TMP]], i64 addrspace(1)* [[ARRAY_IDX1]], align 8
249
+ ; CHECK: ret void
250
+ entry:
251
+ %payloadHeader.scalar = extractelement <8 x i32 > %payloadHeader , i64 0
252
+ %enqueuedLocalSize.scalar = extractelement <3 x i32 > %enqueuedLocalSize , i64 0
253
+ %r0.scalar19 = extractelement <8 x i32 > %r0 , i64 1
254
+ %0 = mul i32 %enqueuedLocalSize.scalar , %r0.scalar19
255
+ %localIdX4 = zext i16 %localIdX to i32
256
+ %1 = add i32 %0 , %localIdX4
257
+ %2 = add i32 %1 , %payloadHeader.scalar
258
+ %3 = zext i32 %2 to i64
259
+ %arrayidx = getelementptr inbounds double , double addrspace (1 )* %inA , i64 %3
260
+ %4 = load double , double addrspace (1 )* %arrayidx , align 8
261
+ %call1 = fptosi double %4 to i64
262
+ %arrayidx2 = getelementptr inbounds i64 , i64 addrspace (1 )* %out , i64 %3
263
+ store i64 %call1 , i64 addrspace (1 )* %arrayidx2 , align 8
264
+ ret void
265
+ }
0 commit comments