@@ -6583,3 +6583,42 @@ define i32 @prng_poison_i32() {
65836583 %prng = call i32 @llvm.amdgcn.prng.b32 (i32 poison)
65846584 ret i32 %prng
65856585}
6586+
6587+ ; --------------------------------------------------------------------
6588+ ; llvm.amdgcn.ds.bpermute
6589+ ; --------------------------------------------------------------------
6590+
6591+ define amdgpu_kernel void @ds_bpermute_uniform_src (ptr addrspace (1 ) %out , i32 %lane ) {
6592+ ; CHECK-LABEL: @ds_bpermute_uniform_src(
6593+ ; CHECK-NEXT: store i32 7, ptr addrspace(1) [[OUT:%.*]], align 4
6594+ ; CHECK-NEXT: ret void
6595+ ;
6596+ %v = call i32 @llvm.amdgcn.ds.bpermute (i32 %lane , i32 7 )
6597+ store i32 %v , ptr addrspace (1 ) %out
6598+ ret void
6599+ }
6600+
6601+ define amdgpu_kernel void @ds_bpermute_constant_lane (ptr addrspace (1 ) %out , i32 %src ) {
6602+ ; CHECK-LABEL: @ds_bpermute_constant_lane(
6603+ ; CHECK-NEXT: [[V:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[SRC:%.*]], i32 7)
6604+ ; CHECK-NEXT: store i32 [[V]], ptr addrspace(1) [[OUT:%.*]], align 4
6605+ ; CHECK-NEXT: ret void
6606+ ;
6607+ %v = call i32 @llvm.amdgcn.ds.bpermute (i32 28 , i32 %src )
6608+ store i32 %v , ptr addrspace (1 ) %out
6609+ ret void
6610+ }
6611+
6612+ define amdgpu_kernel void @ds_bpermute_uniform_lane (ptr addrspace (1 ) %out , i32 %lanearg , i32 %src ) {
6613+ ; CHECK-LABEL: @ds_bpermute_uniform_lane(
6614+ ; CHECK-NEXT: [[LANE:%.*]] = call i32 @llvm.amdgcn.readfirstlane.i32(i32 [[LANEARG:%.*]])
6615+ ; CHECK-NEXT: [[TMP1:%.*]] = lshr i32 [[LANE]], 2
6616+ ; CHECK-NEXT: [[V:%.*]] = call i32 @llvm.amdgcn.readlane.i32(i32 [[SRC:%.*]], i32 [[TMP1]])
6617+ ; CHECK-NEXT: store i32 [[V]], ptr addrspace(1) [[OUT:%.*]], align 4
6618+ ; CHECK-NEXT: ret void
6619+ ;
6620+ %lane = call i32 @llvm.amdgcn.readfirstlane (i32 %lanearg )
6621+ %v = call i32 @llvm.amdgcn.ds.bpermute (i32 %lane , i32 %src )
6622+ store i32 %v , ptr addrspace (1 ) %out
6623+ ret void
6624+ }
0 commit comments