@@ -660,7 +660,7 @@ gpu.module @test_module {
660660
661661gpu.module @test_module {
662662 // CHECK-LABEL: func @gpu_shuffle()
663- func.func @gpu_shuffle () -> (f32 , f32 , f32 ) {
663+ func.func @gpu_shuffle () -> (f32 , f32 , f32 , f32 ) {
664664 // CHECK: %[[#VALUE:]] = llvm.mlir.constant(1.000000e+00 : f32) : f32
665665 %arg0 = arith.constant 1.0 : f32
666666 // CHECK: %[[#OFFSET:]] = llvm.mlir.constant(4 : i32) : i32
@@ -693,7 +693,22 @@ gpu.module @test_module {
693693 // CHECK: %[[#CAST_VALUE:]] = llvm.bitcast %[[#VALUE]] : f32 to i32
694694 // CHECK: %[[#PERMUTE:]] = rocdl.ds_bpermute %[[#ALIGNED_DST_LANE]], %[[#CAST_VALUE]] : (i32, i32) -> i32
695695 // 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
697712 // CHECK: %[[#LANE_ID:]] = rocdl.mbcnt.hi
698713 // CHECK: %[[#ZERO:]] = llvm.mlir.constant(0 : i32) : i32
699714 // CHECK: %[[#NEG_WIDTH:]] = llvm.sub %[[#ZERO]], %[[#WIDTH]] : i32
@@ -708,7 +723,7 @@ gpu.module @test_module {
708723 // CHECK: %[[#PERMUTE:]] = rocdl.ds_bpermute %[[#ALIGNED_DST_LANE]], %[[#CAST_VALUE]] : (i32, i32) -> i32
709724 // CHECK: %[[#CAST_SHFL_VALUE:]] = llvm.bitcast %[[#PERMUTE]] : i32 to f32
710725 %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
712727 }
713728
714729 // CHECK-LABEL: func @gpu_shuffle_vec
0 commit comments