brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · f5668ce Raw
153 lines · plain
1; RUN: opt -mtriple amdgcn-unknown-amdhsa -passes='print<uniformity>' -disable-output %s 2>&1 | FileCheck %s2 3declare i32 @llvm.amdgcn.workitem.id.x() #04declare i32 @llvm.amdgcn.workitem.id.y() #05declare i32 @llvm.amdgcn.workitem.id.z() #06declare i32 @llvm.amdgcn.mbcnt.lo(i32, i32) #07declare i32 @llvm.amdgcn.mbcnt.hi(i32, i32) #08 9; CHECK: DIVERGENT:  %id.x = call i32 @llvm.amdgcn.workitem.id.x()10define amdgpu_kernel void @workitem_id_x() #1 {11  %id.x = call i32 @llvm.amdgcn.workitem.id.x()12  store volatile i32 %id.x, ptr addrspace(1) undef13  ret void14}15 16; CHECK: DIVERGENT:  %id.y = call i32 @llvm.amdgcn.workitem.id.y()17define amdgpu_kernel void @workitem_id_y() #1 {18  %id.y = call i32 @llvm.amdgcn.workitem.id.y()19  store volatile i32 %id.y, ptr addrspace(1) undef20  ret void21}22 23; CHECK: DIVERGENT:  %id.z = call i32 @llvm.amdgcn.workitem.id.z()24define amdgpu_kernel void @workitem_id_z() #1 {25  %id.z = call i32 @llvm.amdgcn.workitem.id.z()26  store volatile i32 %id.z, ptr addrspace(1) undef27  ret void28}29 30; CHECK: DIVERGENT:  %mbcnt.lo = call i32 @llvm.amdgcn.mbcnt.lo(i32 0, i32 0)31define amdgpu_kernel void @mbcnt_lo() #1 {32  %mbcnt.lo = call i32 @llvm.amdgcn.mbcnt.lo(i32 0, i32 0)33  store volatile i32 %mbcnt.lo, ptr addrspace(1) undef34  ret void35}36 37; CHECK: DIVERGENT:  %mbcnt.hi = call i32 @llvm.amdgcn.mbcnt.hi(i32 0, i32 0)38define amdgpu_kernel void @mbcnt_hi() #1 {39  %mbcnt.hi = call i32 @llvm.amdgcn.mbcnt.hi(i32 0, i32 0)40  store volatile i32 %mbcnt.hi, ptr addrspace(1) undef41  ret void42}43 44; CHECK-LABEL: UniformityInfo for function 'workitem_id_x_singlethreaded':45; CHECK-NOT: DIVERGENT46define amdgpu_kernel void @workitem_id_x_singlethreaded() #2 {47  %id.x = call i32 @llvm.amdgcn.workitem.id.x()48  store volatile i32 %id.x, ptr addrspace(1) undef49  ret void50}51 52; CHECK-LABEL: UniformityInfo for function 'workitem_id_y_singlethreaded':53; CHECK-NOT: DIVERGENT54define amdgpu_kernel void @workitem_id_y_singlethreaded() #2 {55  %id.x = call i32 @llvm.amdgcn.workitem.id.y()56  store volatile i32 %id.x, ptr addrspace(1) undef57  ret void58}59 60; CHECK-LABEL: UniformityInfo for function 'workitem_id_z_singlethreaded':61; CHECK-NOT: DIVERGENT62define amdgpu_kernel void @workitem_id_z_singlethreaded() #2 {63  %id.x = call i32 @llvm.amdgcn.workitem.id.y()64  store volatile i32 %id.x, ptr addrspace(1) undef65  ret void66}67 68; CHECK-LABEL: UniformityInfo for function 'workitem_id_x_singlethreaded_md':69; CHECK-NOT: DIVERGENT70define amdgpu_kernel void @workitem_id_x_singlethreaded_md() !reqd_work_group_size !0 {71  %id.x = call i32 @llvm.amdgcn.workitem.id.x()72  store volatile i32 %id.x, ptr addrspace(1) undef73  ret void74}75 76; CHECK-LABEL: UniformityInfo for function 'workitem_id_y_singlethreaded_md':77; CHECK-NOT: DIVERGENT78define amdgpu_kernel void @workitem_id_y_singlethreaded_md() !reqd_work_group_size !0 {79  %id.x = call i32 @llvm.amdgcn.workitem.id.y()80  store volatile i32 %id.x, ptr addrspace(1) undef81  ret void82}83 84; CHECK-LABEL: UniformityInfo for function 'workitem_id_z_singlethreaded_md':85; CHECK-NOT: DIVERGENT86define amdgpu_kernel void @workitem_id_z_singlethreaded_md() !reqd_work_group_size !0 {87  %id.x = call i32 @llvm.amdgcn.workitem.id.y()88  store volatile i32 %id.x, ptr addrspace(1) undef89  ret void90}91 92; CHECK-LABEL: UniformityInfo for function 'workitem_id_x_not_singlethreaded_dimx':93; CHECK: DIVERGENT:  %id.x = call i32 @llvm.amdgcn.workitem.id.x()94define amdgpu_kernel void @workitem_id_x_not_singlethreaded_dimx() !reqd_work_group_size !1 {95  %id.x = call i32 @llvm.amdgcn.workitem.id.x()96  store volatile i32 %id.x, ptr addrspace(1) undef97  ret void98}99 100; CHECK-LABEL: UniformityInfo for function 'workitem_id_x_not_singlethreaded_dimy':101; CHECK: DIVERGENT:  %id.x = call i32 @llvm.amdgcn.workitem.id.x()102define amdgpu_kernel void @workitem_id_x_not_singlethreaded_dimy() !reqd_work_group_size !2 {103  %id.x = call i32 @llvm.amdgcn.workitem.id.x()104  store volatile i32 %id.x, ptr addrspace(1) undef105  ret void106}107 108; CHECK-LABEL: UniformityInfo for function 'workitem_id_x_not_singlethreaded_dimz':109; CHECK: DIVERGENT:  %id.x = call i32 @llvm.amdgcn.workitem.id.x()110define amdgpu_kernel void @workitem_id_x_not_singlethreaded_dimz() !reqd_work_group_size !3 {111  %id.x = call i32 @llvm.amdgcn.workitem.id.x()112  store volatile i32 %id.x, ptr addrspace(1) undef113  ret void114}115 116; CHECK-LABEL: UniformityInfo for function 'workitem_id_z_uniform_len_1'117; CHECK-NOT: DIVERGENT118define amdgpu_kernel void @workitem_id_z_uniform_len_1(ptr %o) !reqd_work_group_size !4 {119  %id.z = call i32 @llvm.amdgcn.workitem.id.z()120  store i32 %id.z, ptr %o121  ret void122}123 124; CHECK-LABEL: UniformityInfo for function 'workitem_id_x_div_wavefront_size'125; CHECK: DIVERGENT: %id.x = call i32 @llvm.amdgcn.workitem.id.x()126; CHECK-NOT: DIVERGENT127define amdgpu_kernel void @workitem_id_x_div_wavefront_size(ptr %o) #3 !reqd_work_group_size !5 {128  %id.x = call i32 @llvm.amdgcn.workitem.id.x()129  %id.sg = lshr i32 %id.x, 6130  store i32 %id.sg, ptr %o131  ret void132}133 134; CHECK-LABEL: UniformityInfo for function 'workitem_id_y_uniform_in_subgroup'135; CHECK-NOT: DIVERGENT136define amdgpu_kernel void @workitem_id_y_uniform_in_subgroup(ptr %o) #3 !reqd_work_group_size !5 {137  %id.y = call i32 @llvm.amdgcn.workitem.id.y()138  store i32 %id.y, ptr %o139  ret void140}141 142attributes #0 = { nounwind readnone }143attributes #1 = { nounwind }144attributes #2 = { "amdgpu-flat-work-group-size"="1,1" }145attributes #3 = { "target-cpu"="gfx900" "amdgpu-flat-work-group-size"="256,256" }146 147!0 = !{i32 1, i32 1, i32 1}148!1 = !{i32 2, i32 1, i32 1}149!2 = !{i32 1, i32 2, i32 1}150!3 = !{i32 1, i32 1, i32 2}151!4 = !{i32 64, i32 1, i32 1}152!5 = !{i32 128, i32 2, i32 1}153