@@ -659,7 +659,7 @@ gpu.module @test_module {
659659
660660gpu.module @test_module {
661661 // CHECK-LABEL: func @gpu_shuffle()
662- func.func @gpu_shuffle () -> (f32 , f32 ) {
662+ func.func @gpu_shuffle () -> (f32 , f32 , f32 ) {
663663 // CHECK: %[[#VALUE:]] = llvm.mlir.constant(1.000000e+00 : f32) : f32
664664 %arg0 = arith.constant 1.0 : f32
665665 // CHECK: %[[#OFFSET:]] = llvm.mlir.constant(4 : i32) : i32
@@ -693,7 +693,21 @@ gpu.module @test_module {
693693 // CHECK: %[[#PERMUTE:]] = rocdl.ds_bpermute %[[#ALIGNED_DST_LANE]], %[[#CAST_VALUE]] : (i32, i32) -> i32
694694 // CHECK: %[[#CAST_SHFL_VALUE:]] = llvm.bitcast %[[#PERMUTE]] : i32 to f32
695695 %shfli , %predi = gpu.shuffle idx %arg0 , %arg1 , %arg2 : f32
696- func.return %shfl , %shfli : f32 , f32
696+ // CHECK: %[[#LANE_ID:]] = rocdl.mbcnt.hi
697+ // CHECK: %[[#ZERO:]] = llvm.mlir.constant(0 : i32) : i32
698+ // CHECK: %[[#NEG_WIDTH:]] = llvm.sub %[[#ZERO]], %[[#WIDTH]] : i32
699+ // CHECK: %[[#ADD:]] = llvm.add %[[#LANE_ID]], %[[#WIDTH]] : i32
700+ // CHECK: %[[#WARP_OR_ZERO:]] = llvm.and %[[#ADD]], %[[#NEG_WIDTH]] : i32
701+ // CHECK: %[[#DOWN:]] = llvm.add %[[#LANE_ID]], %{{.*}} : i32
702+ // CHECK: %[[#CMP:]] = llvm.icmp "slt" %[[#DOWN]], %[[#WARP_OR_ZERO]] : i32
703+ // CHECK: %[[#DST_LANE:]] = llvm.select %[[#CMP]], %[[#DOWN]], %{{.*}} : i1, i32
704+ // CHECK: %[[#TWO:]] = llvm.mlir.constant(2 : i32) : i32
705+ // CHECK: %[[#ALIGNED_DST_LANE:]] = llvm.shl %[[#DST_LANE]], %[[#TWO]] : i32
706+ // CHECK: %[[#CAST_VALUE:]] = llvm.bitcast %[[#VALUE]] : f32 to i32
707+ // CHECK: %[[#PERMUTE:]] = rocdl.ds_bpermute %[[#ALIGNED_DST_LANE]], %[[#CAST_VALUE]] : (i32, i32) -> i32
708+ // CHECK: %[[#CAST_SHFL_VALUE:]] = llvm.bitcast %[[#PERMUTE]] : i32 to f32
709+ %shfld , %predd = gpu.shuffle down %arg0 , %arg1 , %arg2 : f32
710+ func.return %shfl , %shfli , %shfld : f32 , f32 , f32
697711 }
698712}
699713
0 commit comments