204 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -mtriple=amdgcn-amd-amdhsa -S -passes=amdgpu-lower-kernel-attributes,instcombine,infer-alignment %s | FileCheck -enable-var-scope -check-prefix=GCN %s3 4; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn5define amdgpu_kernel void @get_local_size_x(ptr addrspace(1) %out) #0 {6; GCN-LABEL: @get_local_size_x(7; GCN-NEXT: [[IMPLICITARG_PTR:%.*]] = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()8; GCN-NEXT: [[GEP_LOCAL_SIZE:%.*]] = getelementptr inbounds nuw i8, ptr addrspace(4) [[IMPLICITARG_PTR]], i64 129; GCN-NEXT: [[LOCAL_SIZE:%.*]] = load i16, ptr addrspace(4) [[GEP_LOCAL_SIZE]], align 410; GCN-NEXT: store i16 [[LOCAL_SIZE]], ptr addrspace(1) [[OUT:%.*]], align 211; GCN-NEXT: ret void12;13 %group.id = tail call i32 @llvm.amdgcn.workgroup.id.x()14 %implicitarg.ptr = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()15 %block.count.x = load i32, ptr addrspace(4) %implicitarg.ptr, align 416 %cmp.id.count = icmp ult i32 %group.id, %block.count.x17 %local.size.offset = select i1 %cmp.id.count, i64 12, i64 1818 %gep.local.size = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 %local.size.offset19 %local.size = load i16, ptr addrspace(4) %gep.local.size, align 220 store i16 %local.size, ptr addrspace(1) %out21 ret void22}23 24; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn25define amdgpu_kernel void @get_local_size_y(ptr addrspace(1) %out) #0 {26; GCN-LABEL: @get_local_size_y(27; GCN-NEXT: [[IMPLICITARG_PTR:%.*]] = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()28; GCN-NEXT: [[GEP_LOCAL_SIZE:%.*]] = getelementptr inbounds nuw i8, ptr addrspace(4) [[IMPLICITARG_PTR]], i64 1429; GCN-NEXT: [[LOCAL_SIZE:%.*]] = load i16, ptr addrspace(4) [[GEP_LOCAL_SIZE]], align 230; GCN-NEXT: store i16 [[LOCAL_SIZE]], ptr addrspace(1) [[OUT:%.*]], align 231; GCN-NEXT: ret void32;33 %group.id = tail call i32 @llvm.amdgcn.workgroup.id.y()34 %implicitarg.ptr = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()35 %gep.block.count.y = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 436 %block.count.y = load i32, ptr addrspace(4) %gep.block.count.y, align 437 %cmp.id.count = icmp ult i32 %group.id, %block.count.y38 %local.size.offset = select i1 %cmp.id.count, i64 14, i64 2039 %gep.local.size = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 %local.size.offset40 %local.size = load i16, ptr addrspace(4) %gep.local.size, align 241 store i16 %local.size, ptr addrspace(1) %out42 ret void43}44 45; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn46define amdgpu_kernel void @get_local_size_z(ptr addrspace(1) %out) #0 {47; GCN-LABEL: @get_local_size_z(48; GCN-NEXT: [[IMPLICITARG_PTR:%.*]] = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()49; GCN-NEXT: [[GEP_LOCAL_SIZE:%.*]] = getelementptr inbounds nuw i8, ptr addrspace(4) [[IMPLICITARG_PTR]], i64 1650; GCN-NEXT: [[LOCAL_SIZE:%.*]] = load i16, ptr addrspace(4) [[GEP_LOCAL_SIZE]], align 451; GCN-NEXT: store i16 [[LOCAL_SIZE]], ptr addrspace(1) [[OUT:%.*]], align 252; GCN-NEXT: ret void53;54 %group.id = tail call i32 @llvm.amdgcn.workgroup.id.z()55 %implicitarg.ptr = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()56 %gep.block.count.z = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 857 %block.count.z = load i32, ptr addrspace(4) %gep.block.count.z, align 458 %cmp.id.count = icmp ult i32 %group.id, %block.count.z59 %local.size.offset = select i1 %cmp.id.count, i64 16, i64 2260 %gep.local.size = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 %local.size.offset61 %local.size = load i16, ptr addrspace(4) %gep.local.size, align 262 store i16 %local.size, ptr addrspace(1) %out63 ret void64}65 66; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn67define amdgpu_kernel void @get_remainder_x(ptr addrspace(1) %out) #0 {68; GCN-LABEL: @get_remainder_x(69; GCN-NEXT: store i16 0, ptr addrspace(1) [[OUT:%.*]], align 270; GCN-NEXT: ret void71;72 %implicitarg.ptr = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()73 %gep.x = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 1874 %remainder.x = load i16, ptr addrspace(4) %gep.x, align 275 store i16 %remainder.x, ptr addrspace(1) %out76 ret void77}78 79; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn80define amdgpu_kernel void @get_remainder_y(ptr addrspace(1) %out) #0 {81; GCN-LABEL: @get_remainder_y(82; GCN-NEXT: store i16 0, ptr addrspace(1) [[OUT:%.*]], align 283; GCN-NEXT: ret void84;85 %implicitarg.ptr = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()86 %gep.y = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 1887 %remainder.y = load i16, ptr addrspace(4) %gep.y, align 288 store i16 %remainder.y, ptr addrspace(1) %out89 ret void90}91 92; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn93define amdgpu_kernel void @get_remainder_z(ptr addrspace(1) %out) #0 {94; GCN-LABEL: @get_remainder_z(95; GCN-NEXT: store i16 0, ptr addrspace(1) [[OUT:%.*]], align 296; GCN-NEXT: ret void97;98 %implicitarg.ptr = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()99 %gep.z = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 18100 %remainder.z = load i16, ptr addrspace(4) %gep.z, align 2101 store i16 %remainder.z, ptr addrspace(1) %out102 ret void103}104 105; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn106define amdgpu_kernel void @get_work_group_size_x(ptr addrspace(1) %out) #0 {107; GCN-LABEL: @get_work_group_size_x(108; GCN-NEXT: [[IMPLICITARG_PTR:%.*]] = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()109; GCN-NEXT: [[GEP_X:%.*]] = getelementptr inbounds nuw i8, ptr addrspace(4) [[IMPLICITARG_PTR]], i64 12110; GCN-NEXT: [[GROUP_SIZE_X:%.*]] = load i16, ptr addrspace(4) [[GEP_X]], align 4111; GCN-NEXT: store i16 [[GROUP_SIZE_X]], ptr addrspace(1) [[OUT:%.*]], align 2112; GCN-NEXT: ret void113;114 %implicitarg.ptr = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()115 %gep.x = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 12116 %group.size.x = load i16, ptr addrspace(4) %gep.x, align 2117 store i16 %group.size.x, ptr addrspace(1) %out118 ret void119}120 121; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn122define amdgpu_kernel void @get_work_group_size_y(ptr addrspace(1) %out) #0 {123; GCN-LABEL: @get_work_group_size_y(124; GCN-NEXT: [[IMPLICITARG_PTR:%.*]] = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()125; GCN-NEXT: [[GEP_Y:%.*]] = getelementptr inbounds nuw i8, ptr addrspace(4) [[IMPLICITARG_PTR]], i64 14126; GCN-NEXT: [[GROUP_SIZE_Y:%.*]] = load i16, ptr addrspace(4) [[GEP_Y]], align 2127; GCN-NEXT: store i16 [[GROUP_SIZE_Y]], ptr addrspace(1) [[OUT:%.*]], align 2128; GCN-NEXT: ret void129;130 %implicitarg.ptr = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()131 %gep.y = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 14132 %group.size.y = load i16, ptr addrspace(4) %gep.y, align 2133 store i16 %group.size.y, ptr addrspace(1) %out134 ret void135}136 137; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn138define amdgpu_kernel void @get_work_group_size_z(ptr addrspace(1) %out) #0 {139; GCN-LABEL: @get_work_group_size_z(140; GCN-NEXT: [[IMPLICITARG_PTR:%.*]] = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()141; GCN-NEXT: [[GEP_Z:%.*]] = getelementptr inbounds nuw i8, ptr addrspace(4) [[IMPLICITARG_PTR]], i64 16142; GCN-NEXT: [[GROUP_SIZE_Z:%.*]] = load i16, ptr addrspace(4) [[GEP_Z]], align 4143; GCN-NEXT: store i16 [[GROUP_SIZE_Z]], ptr addrspace(1) [[OUT:%.*]], align 2144; GCN-NEXT: ret void145;146 %implicitarg.ptr = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()147 %gep.z = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 16148 %group.size.z = load i16, ptr addrspace(4) %gep.z, align 2149 store i16 %group.size.z, ptr addrspace(1) %out150 ret void151}152 153; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn154define amdgpu_kernel void @get_work_group_size_x_reqd(ptr addrspace(1) %out) #0 !reqd_work_group_size !0 {155; GCN-LABEL: @get_work_group_size_x_reqd(156; GCN-NEXT: store i16 8, ptr addrspace(1) [[OUT:%.*]], align 2157; GCN-NEXT: ret void158;159 %implicitarg.ptr = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()160 %gep.x = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 12161 %group.size.x = load i16, ptr addrspace(4) %gep.x, align 2162 store i16 %group.size.x, ptr addrspace(1) %out163 ret void164}165 166; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn167define amdgpu_kernel void @get_work_group_size_y_reqd(ptr addrspace(1) %out) #0 !reqd_work_group_size !0 {168; GCN-LABEL: @get_work_group_size_y_reqd(169; GCN-NEXT: store i16 16, ptr addrspace(1) [[OUT:%.*]], align 2170; GCN-NEXT: ret void171;172 %implicitarg.ptr = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()173 %gep.y = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 14174 %group.size.y = load i16, ptr addrspace(4) %gep.y, align 2175 store i16 %group.size.y, ptr addrspace(1) %out176 ret void177}178 179; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn180define amdgpu_kernel void @get_work_group_size_z_reqd(ptr addrspace(1) %out) #0 !reqd_work_group_size !0 {181; GCN-LABEL: @get_work_group_size_z_reqd(182; GCN-NEXT: store i16 2, ptr addrspace(1) [[OUT:%.*]], align 2183; GCN-NEXT: ret void184;185 %implicitarg.ptr = tail call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()186 %gep.z = getelementptr inbounds i8, ptr addrspace(4) %implicitarg.ptr, i64 16187 %group.size.z = load i16, ptr addrspace(4) %gep.z, align 2188 store i16 %group.size.z, ptr addrspace(1) %out189 ret void190}191 192 193declare ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr() #1194declare i32 @llvm.amdgcn.workgroup.id.x() #1195declare i32 @llvm.amdgcn.workgroup.id.y() #1196declare i32 @llvm.amdgcn.workgroup.id.z() #1197 198!llvm.module.flags = !{!1}199 200attributes #0 = { nounwind "uniform-work-group-size"="true" }201attributes #1 = { nounwind readnone speculatable }202!0 = !{i32 8, i32 16, i32 2}203!1 = !{i32 1, !"amdhsa_code_object_version", i32 500}204