@@ -660,7 +660,7 @@ gpu.module @test_module {
660
660
661
661
gpu.module @test_module {
662
662
// CHECK-LABEL: func @gpu_shuffle()
663
- func.func @gpu_shuffle () -> (f32 , f32 , f32 ) {
663
+ func.func @gpu_shuffle () -> (f32 , f32 , f32 , f32 ) {
664
664
// CHECK: %[[#VALUE:]] = llvm.mlir.constant(1.000000e+00 : f32) : f32
665
665
%arg0 = arith.constant 1.0 : f32
666
666
// CHECK: %[[#OFFSET:]] = llvm.mlir.constant(4 : i32) : i32
@@ -693,7 +693,22 @@ gpu.module @test_module {
693
693
// CHECK: %[[#CAST_VALUE:]] = llvm.bitcast %[[#VALUE]] : f32 to i32
694
694
// CHECK: %[[#PERMUTE:]] = rocdl.ds_bpermute %[[#ALIGNED_DST_LANE]], %[[#CAST_VALUE]] : (i32, i32) -> i32
695
695
// CHECK: %[[#CAST_SHFL_VALUE:]] = llvm.bitcast %[[#PERMUTE]] : i32 to f32
696
- %shfli , %predi = gpu.shuffle idx %arg0 , %arg1 , %arg2 : f32
696
+ %shfli , %predi = gpu.shuffle idx %arg0 , %arg1 , %arg2 : f32
697
+ // *** UP mode shuffle ***
698
+ // CHECK: %[[#LANE_ID:]] = rocdl.mbcnt.hi
699
+ // CHECK: %[[#ZERO:]] = llvm.mlir.constant(0 : i32) : i32
700
+ // CHECK: %[[#NEG_WIDTH:]] = llvm.sub %[[#ZERO]], %[[#WIDTH]] : i32
701
+ // CHECK: %[[#ADD:]] = llvm.add %[[#LANE_ID]], %[[#WIDTH]] : i32
702
+ // CHECK: %[[#WARP_OR_ZERO:]] = llvm.and %[[#ADD]], %[[#NEG_WIDTH]] : i32
703
+ // CHECK: %[[#UP:]] = llvm.sub %[[#LANE_ID]], %{{.*}} : i32
704
+ // CHECK: %[[#CMP:]] = llvm.icmp "slt" %[[#UP]], %[[#WARP_OR_ZERO]] : i32
705
+ // CHECK: %[[#DST_LANE:]] = llvm.select %[[#CMP]], %[[#UP]], %{{.*}} : i1, i32
706
+ // CHECK: %[[#TWO:]] = llvm.mlir.constant(2 : i32) : i32
707
+ // CHECK: %[[#ALIGNED_DST_LANE:]] = llvm.shl %[[#DST_LANE]], %[[#TWO]] : i32
708
+ // CHECK: %[[#CAST_VALUE:]] = llvm.bitcast %[[#VALUE]] : f32 to i32
709
+ // CHECK: %[[#PERMUTE:]] = rocdl.ds_bpermute %[[#ALIGNED_DST_LANE]], %[[#CAST_VALUE]] : (i32, i32) -> i32
710
+ // CHECK: %[[#CAST_SHFL_VALUE:]] = llvm.bitcast %[[#PERMUTE]] : i32 to f32
711
+ %shflu , %predu = gpu.shuffle up %arg0 , %arg1 , %arg2 : f32
697
712
// CHECK: %[[#LANE_ID:]] = rocdl.mbcnt.hi
698
713
// CHECK: %[[#ZERO:]] = llvm.mlir.constant(0 : i32) : i32
699
714
// CHECK: %[[#NEG_WIDTH:]] = llvm.sub %[[#ZERO]], %[[#WIDTH]] : i32
@@ -708,7 +723,7 @@ gpu.module @test_module {
708
723
// CHECK: %[[#PERMUTE:]] = rocdl.ds_bpermute %[[#ALIGNED_DST_LANE]], %[[#CAST_VALUE]] : (i32, i32) -> i32
709
724
// CHECK: %[[#CAST_SHFL_VALUE:]] = llvm.bitcast %[[#PERMUTE]] : i32 to f32
710
725
%shfld , %predd = gpu.shuffle down %arg0 , %arg1 , %arg2 : f32
711
- func.return %shfl , %shfli , %shfld : f32 , f32 , f32
726
+ func.return %shfl , %shfli , %shflu , % shfld : f32 , f32 , f32 , f32
712
727
}
713
728
714
729
// CHECK-LABEL: func @gpu_shuffle_vec
0 commit comments