@@ -317,6 +317,12 @@ gpu.module @shuffles attributes {
317
317
// CHECK-SAME-DAG: will_return
318
318
// CHECK-NOT: memory_effects = #llvm.memory_effects
319
319
// CHECK-SAME: }
320
+ // CHECK: llvm.func spir_funccc @_Z20sub_group_shuffle_upDhj(f16, i32) -> f16 attributes {
321
+ // CHECK-SAME-DAG: no_unwind
322
+ // CHECK-SAME-DAG: convergent
323
+ // CHECK-SAME-DAG: will_return
324
+ // CHECK-NOT: memory_effects = #llvm.memory_effects
325
+ // CHECK-SAME: }
320
326
// CHECK: llvm.func spir_funccc @_Z21sub_group_shuffle_xorlj(i64, i32) -> i64 attributes {
321
327
// CHECK-SAME-DAG: no_unwind
322
328
// CHECK-SAME-DAG: convergent
@@ -329,26 +335,54 @@ gpu.module @shuffles attributes {
329
335
// CHECK-SAME-DAG: will_return
330
336
// CHECK-NOT: memory_effects = #llvm.memory_effects
331
337
// CHECK-SAME: }
338
+ // CHECK: llvm.func spir_funccc @_Z21sub_group_shuffle_xorsj(i16, i32) -> i16 attributes {
339
+ // CHECK-SAME-DAG: no_unwind
340
+ // CHECK-SAME-DAG: convergent
341
+ // CHECK-SAME-DAG: will_return
342
+ // CHECK-NOT: memory_effects = #llvm.memory_effects
343
+ // CHECK-SAME: }
344
+ // CHECK: llvm.func spir_funccc @_Z17sub_group_shufflecj(i8, i32) -> i8 attributes {
345
+ // CHECK-SAME-DAG: no_unwind
346
+ // CHECK-SAME-DAG: convergent
347
+ // CHECK-SAME-DAG: will_return
348
+ // CHECK-NOT: memory_effects = #llvm.memory_effects
349
+ // CHECK-SAME: }
332
350
333
351
// CHECK-LABEL: gpu_shuffles
334
- // CHECK-SAME: (%[[VAL_0:.*]]: i32, %[[VAL_1:.*]]: i32, %[[VAL_2:.*]]: i64, %[[VAL_3:.*]]: i32, %[[VAL_4:.*]]: f32, %[[VAL_5:.*]]: i32, %[[VAL_6:.*]]: f64, %[[VAL_7:.*]]: i32)
335
- func.func @gpu_shuffles (%val0: i32 , %id: i32 ,
336
- %val1: i64 , %mask: i32 ,
337
- %val2: f32 , %delta_up: i32 ,
338
- %val3: f64 , %delta_down: i32 ) {
352
+ // CHECK-SAME: (%[[I8_VAL:.*]]: i8, %[[I16_VAL:.*]]: i16,
353
+ // CHECK-SAME: %[[I32_VAL:.*]]: i32, %[[I64_VAL:.*]]: i64,
354
+ // CHECK-SAME: %[[F16_VAL:.*]]: f16, %[[F32_VAL:.*]]: f32,
355
+ // CHECK-SAME: %[[F64_VAL:.*]]: f64, %[[OFFSET:.*]]: i32) {
356
+ func.func @gpu_shuffles (%i8_val: i8 ,
357
+ %i16_val: i16 ,
358
+ %i32_val: i32 ,
359
+ %i64_val: i64 ,
360
+ %f16_val: f16 ,
361
+ %f32_val: f32 ,
362
+ %f64_val: f64 ,
363
+ %offset: i32 ) {
339
364
%width = arith.constant 16 : i32
340
- // CHECK: llvm.call spir_funccc @_Z17sub_group_shuffleij (%[[VAL_0 ]], %[[VAL_1 ]])
365
+ // CHECK: llvm.call spir_funccc @_Z17sub_group_shufflecj (%[[I8_VAL ]], %[[OFFSET ]])
341
366
// CHECK: llvm.mlir.constant(true) : i1
342
- // CHECK: llvm.call spir_funccc @_Z21sub_group_shuffle_xorlj (%[[VAL_2 ]], %[[VAL_3 ]])
367
+ // CHECK: llvm.call spir_funccc @_Z21sub_group_shuffle_xorsj (%[[I16_VAL ]], %[[OFFSET ]])
343
368
// CHECK: llvm.mlir.constant(true) : i1
344
- // CHECK: llvm.call spir_funccc @_Z20sub_group_shuffle_upfj (%[[VAL_4 ]], %[[VAL_5 ]])
369
+ // CHECK: llvm.call spir_funccc @_Z17sub_group_shuffleij (%[[I32_VAL ]], %[[OFFSET ]])
345
370
// CHECK: llvm.mlir.constant(true) : i1
346
- // CHECK: llvm.call spir_funccc @_Z22sub_group_shuffle_downdj (%[[VAL_6 ]], %[[VAL_7 ]])
371
+ // CHECK: llvm.call spir_funccc @_Z21sub_group_shuffle_xorlj (%[[I64_VAL ]], %[[OFFSET ]])
347
372
// CHECK: llvm.mlir.constant(true) : i1
348
- %shuffleResult0 , %valid0 = gpu.shuffle idx %val0 , %id , %width : i32
349
- %shuffleResult1 , %valid1 = gpu.shuffle xor %val1 , %mask , %width : i64
350
- %shuffleResult2 , %valid2 = gpu.shuffle up %val2 , %delta_up , %width : f32
351
- %shuffleResult3 , %valid3 = gpu.shuffle down %val3 , %delta_down , %width : f64
373
+ // CHECK: llvm.call spir_funccc @_Z20sub_group_shuffle_upDhj(%[[F16_VAL]], %[[OFFSET]])
374
+ // CHECK: llvm.mlir.constant(true) : i1
375
+ // CHECK: llvm.call spir_funccc @_Z20sub_group_shuffle_upfj(%[[F32_VAL]], %[[OFFSET]])
376
+ // CHECK: llvm.mlir.constant(true) : i1
377
+ // CHECK: llvm.call spir_funccc @_Z22sub_group_shuffle_downdj(%[[F64_VAL]], %[[OFFSET]])
378
+ // CHECK: llvm.mlir.constant(true) : i1
379
+ %shuffleResult0 , %valid0 = gpu.shuffle idx %i8_val , %offset , %width : i8
380
+ %shuffleResult1 , %valid1 = gpu.shuffle xor %i16_val , %offset , %width : i16
381
+ %shuffleResult2 , %valid2 = gpu.shuffle idx %i32_val , %offset , %width : i32
382
+ %shuffleResult3 , %valid3 = gpu.shuffle xor %i64_val , %offset , %width : i64
383
+ %shuffleResult4 , %valid4 = gpu.shuffle up %f16_val , %offset , %width : f16
384
+ %shuffleResult5 , %valid5 = gpu.shuffle up %f32_val , %offset , %width : f32
385
+ %shuffleResult6 , %valid6 = gpu.shuffle down %f64_val , %offset , %width : f64
352
386
return
353
387
}
354
388
}
@@ -378,6 +412,20 @@ gpu.module @shuffles_mismatch {
378
412
}
379
413
}
380
414
415
+ // -----
416
+
417
+ // Cannot convert due to value type not being supported by the conversion
418
+
419
+ gpu.module @not_supported_lowering {
420
+ func.func @gpu_shuffles (%val: i1 , %id: i32 ) {
421
+ %width = arith.constant 32 : i32
422
+ // expected-error@below {{failed to legalize operation 'gpu.shuffle' that was explicitly marked illegal}}
423
+ %shuffleResult , %valid = gpu.shuffle xor %val , %id , %width : i1
424
+ return
425
+ }
426
+ }
427
+
428
+
381
429
// -----
382
430
383
431
gpu.module @kernels {
0 commit comments