720 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-globals2; RUN: opt -mtriple=amdgcn-unknown-amdhsa -S -passes=amdgpu-attributor < %s | FileCheck -check-prefixes=ATTRIBUTOR_HSA %s3 4; TODO: The test contains UB which is refined by the Attributor and should be removed.5 6declare i32 @llvm.amdgcn.workgroup.id.x() #07declare i32 @llvm.amdgcn.workgroup.id.y() #08declare i32 @llvm.amdgcn.workgroup.id.z() #09 10declare i32 @llvm.amdgcn.workitem.id.x() #011declare i32 @llvm.amdgcn.workitem.id.y() #012declare i32 @llvm.amdgcn.workitem.id.z() #013 14declare ptr addrspace(4) @llvm.amdgcn.dispatch.ptr() #015declare ptr addrspace(4) @llvm.amdgcn.queue.ptr() #016declare ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr() #017declare ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr() #018declare i64 @llvm.amdgcn.dispatch.id() #019 20define void @use_workitem_id_x() #1 {21; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workitem_id_x22; ATTRIBUTOR_HSA-SAME: () #[[ATTR1:[0-9]+]] {23; ATTRIBUTOR_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.x()24; ATTRIBUTOR_HSA-NEXT: store volatile i32 [[VAL]], ptr addrspace(1) poison, align 425; ATTRIBUTOR_HSA-NEXT: ret void26;27 %val = call i32 @llvm.amdgcn.workitem.id.x()28 store volatile i32 %val, ptr addrspace(1) poison29 ret void30}31 32define void @use_workitem_id_y() #1 {33; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workitem_id_y34; ATTRIBUTOR_HSA-SAME: () #[[ATTR2:[0-9]+]] {35; ATTRIBUTOR_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.y()36; ATTRIBUTOR_HSA-NEXT: store volatile i32 [[VAL]], ptr addrspace(1) poison, align 437; ATTRIBUTOR_HSA-NEXT: ret void38;39 %val = call i32 @llvm.amdgcn.workitem.id.y()40 store volatile i32 %val, ptr addrspace(1) poison41 ret void42}43 44define void @use_workitem_id_z() #1 {45; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workitem_id_z46; ATTRIBUTOR_HSA-SAME: () #[[ATTR3:[0-9]+]] {47; ATTRIBUTOR_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.z()48; ATTRIBUTOR_HSA-NEXT: store volatile i32 [[VAL]], ptr addrspace(1) poison, align 449; ATTRIBUTOR_HSA-NEXT: ret void50;51 %val = call i32 @llvm.amdgcn.workitem.id.z()52 store volatile i32 %val, ptr addrspace(1) poison53 ret void54}55 56define void @use_workgroup_id_x() #1 {57; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_x58; ATTRIBUTOR_HSA-SAME: () #[[ATTR4:[0-9]+]] {59; ATTRIBUTOR_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workgroup.id.x()60; ATTRIBUTOR_HSA-NEXT: store volatile i32 [[VAL]], ptr addrspace(1) poison, align 461; ATTRIBUTOR_HSA-NEXT: ret void62;63 %val = call i32 @llvm.amdgcn.workgroup.id.x()64 store volatile i32 %val, ptr addrspace(1) poison65 ret void66}67 68define void @use_workgroup_id_y() #1 {69; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_y70; ATTRIBUTOR_HSA-SAME: () #[[ATTR5:[0-9]+]] {71; ATTRIBUTOR_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workgroup.id.y()72; ATTRIBUTOR_HSA-NEXT: store volatile i32 [[VAL]], ptr addrspace(1) poison, align 473; ATTRIBUTOR_HSA-NEXT: ret void74;75 %val = call i32 @llvm.amdgcn.workgroup.id.y()76 store volatile i32 %val, ptr addrspace(1) poison77 ret void78}79 80define void @use_workgroup_id_z() #1 {81; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_z82; ATTRIBUTOR_HSA-SAME: () #[[ATTR6:[0-9]+]] {83; ATTRIBUTOR_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workgroup.id.z()84; ATTRIBUTOR_HSA-NEXT: store volatile i32 [[VAL]], ptr addrspace(1) poison, align 485; ATTRIBUTOR_HSA-NEXT: ret void86;87 %val = call i32 @llvm.amdgcn.workgroup.id.z()88 store volatile i32 %val, ptr addrspace(1) poison89 ret void90}91 92define void @use_dispatch_ptr() #1 {93; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_dispatch_ptr94; ATTRIBUTOR_HSA-SAME: () #[[ATTR7:[0-9]+]] {95; ATTRIBUTOR_HSA-NEXT: [[DISPATCH_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()96; ATTRIBUTOR_HSA-NEXT: store volatile ptr addrspace(4) [[DISPATCH_PTR]], ptr addrspace(1) poison, align 897; ATTRIBUTOR_HSA-NEXT: ret void98;99 %dispatch.ptr = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()100 store volatile ptr addrspace(4) %dispatch.ptr, ptr addrspace(1) poison101 ret void102}103 104define void @use_queue_ptr() #1 {105; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_queue_ptr106; ATTRIBUTOR_HSA-SAME: () #[[ATTR8:[0-9]+]] {107; ATTRIBUTOR_HSA-NEXT: [[QUEUE_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.queue.ptr()108; ATTRIBUTOR_HSA-NEXT: store volatile ptr addrspace(4) [[QUEUE_PTR]], ptr addrspace(1) poison, align 8109; ATTRIBUTOR_HSA-NEXT: ret void110;111 %queue.ptr = call ptr addrspace(4) @llvm.amdgcn.queue.ptr()112 store volatile ptr addrspace(4) %queue.ptr, ptr addrspace(1) poison113 ret void114}115 116define void @use_dispatch_id() #1 {117; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_dispatch_id118; ATTRIBUTOR_HSA-SAME: () #[[ATTR9:[0-9]+]] {119; ATTRIBUTOR_HSA-NEXT: [[VAL:%.*]] = call i64 @llvm.amdgcn.dispatch.id()120; ATTRIBUTOR_HSA-NEXT: store volatile i64 [[VAL]], ptr addrspace(1) poison, align 8121; ATTRIBUTOR_HSA-NEXT: ret void122;123 %val = call i64 @llvm.amdgcn.dispatch.id()124 store volatile i64 %val, ptr addrspace(1) poison125 ret void126}127 128define void @use_workgroup_id_y_workgroup_id_z() #1 {129; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_workgroup_id_y_workgroup_id_z130; ATTRIBUTOR_HSA-SAME: () #[[ATTR10:[0-9]+]] {131; ATTRIBUTOR_HSA-NEXT: [[VAL0:%.*]] = call i32 @llvm.amdgcn.workgroup.id.y()132; ATTRIBUTOR_HSA-NEXT: [[VAL1:%.*]] = call i32 @llvm.amdgcn.workgroup.id.z()133; ATTRIBUTOR_HSA-NEXT: store volatile i32 [[VAL0]], ptr addrspace(1) poison, align 4134; ATTRIBUTOR_HSA-NEXT: store volatile i32 [[VAL1]], ptr addrspace(1) poison, align 4135; ATTRIBUTOR_HSA-NEXT: ret void136;137 %val0 = call i32 @llvm.amdgcn.workgroup.id.y()138 %val1 = call i32 @llvm.amdgcn.workgroup.id.z()139 store volatile i32 %val0, ptr addrspace(1) poison140 store volatile i32 %val1, ptr addrspace(1) poison141 ret void142}143 144define void @func_indirect_use_workitem_id_x() #1 {145; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_x146; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] {147; ATTRIBUTOR_HSA-NEXT: call void @use_workitem_id_x()148; ATTRIBUTOR_HSA-NEXT: ret void149;150 call void @use_workitem_id_x()151 ret void152}153 154define void @kernel_indirect_use_workitem_id_x() #1 {155; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kernel_indirect_use_workitem_id_x156; ATTRIBUTOR_HSA-SAME: () #[[ATTR1]] {157; ATTRIBUTOR_HSA-NEXT: call void @use_workitem_id_x()158; ATTRIBUTOR_HSA-NEXT: ret void159;160 call void @use_workitem_id_x()161 ret void162}163 164define void @func_indirect_use_workitem_id_y() #1 {165; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_y166; ATTRIBUTOR_HSA-SAME: () #[[ATTR2]] {167; ATTRIBUTOR_HSA-NEXT: call void @use_workitem_id_y()168; ATTRIBUTOR_HSA-NEXT: ret void169;170 call void @use_workitem_id_y()171 ret void172}173 174define void @func_indirect_use_workitem_id_z() #1 {175; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workitem_id_z176; ATTRIBUTOR_HSA-SAME: () #[[ATTR3]] {177; ATTRIBUTOR_HSA-NEXT: call void @use_workitem_id_z()178; ATTRIBUTOR_HSA-NEXT: ret void179;180 call void @use_workitem_id_z()181 ret void182}183 184define void @func_indirect_use_workgroup_id_x() #1 {185; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_x186; ATTRIBUTOR_HSA-SAME: () #[[ATTR4]] {187; ATTRIBUTOR_HSA-NEXT: call void @use_workgroup_id_x()188; ATTRIBUTOR_HSA-NEXT: ret void189;190 call void @use_workgroup_id_x()191 ret void192}193 194define void @kernel_indirect_use_workgroup_id_x() #1 {195; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kernel_indirect_use_workgroup_id_x196; ATTRIBUTOR_HSA-SAME: () #[[ATTR4]] {197; ATTRIBUTOR_HSA-NEXT: call void @use_workgroup_id_x()198; ATTRIBUTOR_HSA-NEXT: ret void199;200 call void @use_workgroup_id_x()201 ret void202}203 204define void @func_indirect_use_workgroup_id_y() #1 {205; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_y206; ATTRIBUTOR_HSA-SAME: () #[[ATTR5]] {207; ATTRIBUTOR_HSA-NEXT: call void @use_workgroup_id_y()208; ATTRIBUTOR_HSA-NEXT: ret void209;210 call void @use_workgroup_id_y()211 ret void212}213 214define void @func_indirect_use_workgroup_id_z() #1 {215; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_z216; ATTRIBUTOR_HSA-SAME: () #[[ATTR6]] {217; ATTRIBUTOR_HSA-NEXT: call void @use_workgroup_id_z()218; ATTRIBUTOR_HSA-NEXT: ret void219;220 call void @use_workgroup_id_z()221 ret void222}223 224define void @func_indirect_indirect_use_workgroup_id_y() #1 {225; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_indirect_use_workgroup_id_y226; ATTRIBUTOR_HSA-SAME: () #[[ATTR5]] {227; ATTRIBUTOR_HSA-NEXT: call void @func_indirect_use_workgroup_id_y()228; ATTRIBUTOR_HSA-NEXT: ret void229;230 call void @func_indirect_use_workgroup_id_y()231 ret void232}233 234define void @indirect_x2_use_workgroup_id_y() #1 {235; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@indirect_x2_use_workgroup_id_y236; ATTRIBUTOR_HSA-SAME: () #[[ATTR5]] {237; ATTRIBUTOR_HSA-NEXT: call void @func_indirect_indirect_use_workgroup_id_y()238; ATTRIBUTOR_HSA-NEXT: ret void239;240 call void @func_indirect_indirect_use_workgroup_id_y()241 ret void242}243 244define void @func_indirect_use_dispatch_ptr() #1 {245; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_ptr246; ATTRIBUTOR_HSA-SAME: () #[[ATTR7]] {247; ATTRIBUTOR_HSA-NEXT: call void @use_dispatch_ptr()248; ATTRIBUTOR_HSA-NEXT: ret void249;250 call void @use_dispatch_ptr()251 ret void252}253 254define void @func_indirect_use_queue_ptr() #1 {255; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_queue_ptr256; ATTRIBUTOR_HSA-SAME: () #[[ATTR8]] {257; ATTRIBUTOR_HSA-NEXT: call void @use_queue_ptr()258; ATTRIBUTOR_HSA-NEXT: ret void259;260 call void @use_queue_ptr()261 ret void262}263 264define void @func_indirect_use_dispatch_id() #1 {265; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_id266; ATTRIBUTOR_HSA-SAME: () #[[ATTR9]] {267; ATTRIBUTOR_HSA-NEXT: call void @use_dispatch_id()268; ATTRIBUTOR_HSA-NEXT: ret void269;270 call void @use_dispatch_id()271 ret void272}273 274define void @func_indirect_use_workgroup_id_y_workgroup_id_z() #1 {275; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_workgroup_id_y_workgroup_id_z276; ATTRIBUTOR_HSA-SAME: () #[[ATTR11:[0-9]+]] {277; ATTRIBUTOR_HSA-NEXT: call void @func_indirect_use_workgroup_id_y_workgroup_id_z()278; ATTRIBUTOR_HSA-NEXT: ret void279;280 call void @func_indirect_use_workgroup_id_y_workgroup_id_z()281 ret void282}283 284define void @recursive_use_workitem_id_y() #1 {285; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@recursive_use_workitem_id_y286; ATTRIBUTOR_HSA-SAME: () #[[ATTR2]] {287; ATTRIBUTOR_HSA-NEXT: [[VAL:%.*]] = call i32 @llvm.amdgcn.workitem.id.y()288; ATTRIBUTOR_HSA-NEXT: store volatile i32 [[VAL]], ptr addrspace(1) poison, align 4289; ATTRIBUTOR_HSA-NEXT: call void @recursive_use_workitem_id_y()290; ATTRIBUTOR_HSA-NEXT: ret void291;292 %val = call i32 @llvm.amdgcn.workitem.id.y()293 store volatile i32 %val, ptr addrspace(1) poison294 call void @recursive_use_workitem_id_y()295 ret void296}297 298define void @call_recursive_use_workitem_id_y() #1 {299; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@call_recursive_use_workitem_id_y300; ATTRIBUTOR_HSA-SAME: () #[[ATTR2]] {301; ATTRIBUTOR_HSA-NEXT: call void @recursive_use_workitem_id_y()302; ATTRIBUTOR_HSA-NEXT: ret void303;304 call void @recursive_use_workitem_id_y()305 ret void306}307 308define void @use_group_to_flat_addrspacecast(ptr addrspace(3) %ptr) #1 {309; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast310; ATTRIBUTOR_HSA-SAME: (ptr addrspace(3) [[PTR:%.*]]) #[[ATTR12:[0-9]+]] {311; ATTRIBUTOR_HSA-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr addrspace(4)312; ATTRIBUTOR_HSA-NEXT: store volatile i32 0, ptr addrspace(4) [[STOF]], align 4313; ATTRIBUTOR_HSA-NEXT: ret void314;315 %stof = addrspacecast ptr addrspace(3) %ptr to ptr addrspace(4)316 store volatile i32 0, ptr addrspace(4) %stof317 ret void318}319 320 321define void @use_group_to_flat_addrspacecast_gfx9(ptr addrspace(3) %ptr) #2 {322; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast_gfx9323; ATTRIBUTOR_HSA-SAME: (ptr addrspace(3) [[PTR:%.*]]) #[[ATTR13:[0-9]+]] {324; ATTRIBUTOR_HSA-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr addrspace(4)325; ATTRIBUTOR_HSA-NEXT: store volatile i32 0, ptr addrspace(4) [[STOF]], align 4326; ATTRIBUTOR_HSA-NEXT: ret void327;328 %stof = addrspacecast ptr addrspace(3) %ptr to ptr addrspace(4)329 store volatile i32 0, ptr addrspace(4) %stof330 ret void331}332 333define void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(ptr addrspace(3) %ptr) #2 {334; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_group_to_flat_addrspacecast_queue_ptr_gfx9335; ATTRIBUTOR_HSA-SAME: (ptr addrspace(3) [[PTR:%.*]]) #[[ATTR14:[0-9]+]] {336; ATTRIBUTOR_HSA-NEXT: [[STOF:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr addrspace(4)337; ATTRIBUTOR_HSA-NEXT: store volatile i32 0, ptr addrspace(4) [[STOF]], align 4338; ATTRIBUTOR_HSA-NEXT: call void @func_indirect_use_queue_ptr()339; ATTRIBUTOR_HSA-NEXT: ret void340;341 %stof = addrspacecast ptr addrspace(3) %ptr to ptr addrspace(4)342 store volatile i32 0, ptr addrspace(4) %stof343 call void @func_indirect_use_queue_ptr()344 ret void345}346 347define void @indirect_use_group_to_flat_addrspacecast() #1 {348; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast349; ATTRIBUTOR_HSA-SAME: () #[[ATTR12]] {350; ATTRIBUTOR_HSA-NEXT: call void @use_group_to_flat_addrspacecast(ptr addrspace(3) null)351; ATTRIBUTOR_HSA-NEXT: ret void352;353 call void @use_group_to_flat_addrspacecast(ptr addrspace(3) null)354 ret void355}356 357define void @indirect_use_group_to_flat_addrspacecast_gfx9() #1 {358; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast_gfx9359; ATTRIBUTOR_HSA-SAME: () #[[ATTR11]] {360; ATTRIBUTOR_HSA-NEXT: call void @use_group_to_flat_addrspacecast_gfx9(ptr addrspace(3) null)361; ATTRIBUTOR_HSA-NEXT: ret void362;363 call void @use_group_to_flat_addrspacecast_gfx9(ptr addrspace(3) null)364 ret void365}366 367define void @indirect_use_group_to_flat_addrspacecast_queue_ptr_gfx9() #1 {368; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@indirect_use_group_to_flat_addrspacecast_queue_ptr_gfx9369; ATTRIBUTOR_HSA-SAME: () #[[ATTR8]] {370; ATTRIBUTOR_HSA-NEXT: call void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(ptr addrspace(3) null)371; ATTRIBUTOR_HSA-NEXT: ret void372;373 call void @use_group_to_flat_addrspacecast_queue_ptr_gfx9(ptr addrspace(3) null)374 ret void375}376 377define void @use_kernarg_segment_ptr() #1 {378; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_kernarg_segment_ptr379; ATTRIBUTOR_HSA-SAME: () #[[ATTR11]] {380; ATTRIBUTOR_HSA-NEXT: [[KERNARG_SEGMENT_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr()381; ATTRIBUTOR_HSA-NEXT: store volatile ptr addrspace(4) [[KERNARG_SEGMENT_PTR]], ptr addrspace(1) poison, align 8382; ATTRIBUTOR_HSA-NEXT: ret void383;384 %kernarg.segment.ptr = call ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr()385 store volatile ptr addrspace(4) %kernarg.segment.ptr, ptr addrspace(1) poison386 ret void387}388define void @func_indirect_use_kernarg_segment_ptr() #1 {389; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_kernarg_segment_ptr390; ATTRIBUTOR_HSA-SAME: () #[[ATTR11]] {391; ATTRIBUTOR_HSA-NEXT: call void @use_kernarg_segment_ptr()392; ATTRIBUTOR_HSA-NEXT: ret void393;394 call void @use_kernarg_segment_ptr()395 ret void396}397 398define amdgpu_kernel void @kern_use_implicitarg_ptr() #1 {399; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_use_implicitarg_ptr400; ATTRIBUTOR_HSA-SAME: () #[[ATTR12]] {401; ATTRIBUTOR_HSA-NEXT: [[IMPLICITARG_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()402; ATTRIBUTOR_HSA-NEXT: store volatile ptr addrspace(4) [[IMPLICITARG_PTR]], ptr addrspace(1) poison, align 8403; ATTRIBUTOR_HSA-NEXT: ret void404;405 %implicitarg.ptr = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()406 store volatile ptr addrspace(4) %implicitarg.ptr, ptr addrspace(1) poison407 ret void408}409 410define void @use_implicitarg_ptr() #1 {411; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_implicitarg_ptr412; ATTRIBUTOR_HSA-SAME: () #[[ATTR12]] {413; ATTRIBUTOR_HSA-NEXT: [[IMPLICITARG_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()414; ATTRIBUTOR_HSA-NEXT: store volatile ptr addrspace(4) [[IMPLICITARG_PTR]], ptr addrspace(1) poison, align 8415; ATTRIBUTOR_HSA-NEXT: ret void416;417 %implicitarg.ptr = call ptr addrspace(4) @llvm.amdgcn.implicitarg.ptr()418 store volatile ptr addrspace(4) %implicitarg.ptr, ptr addrspace(1) poison419 ret void420}421 422define void @func_indirect_use_implicitarg_ptr() #1 {423; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_implicitarg_ptr424; ATTRIBUTOR_HSA-SAME: () #[[ATTR12]] {425; ATTRIBUTOR_HSA-NEXT: call void @use_implicitarg_ptr()426; ATTRIBUTOR_HSA-NEXT: ret void427;428 call void @use_implicitarg_ptr()429 ret void430}431 432declare void @external.func() #3433 434; This function gets deleted.435define internal void @defined.func() #3 {436; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@defined.func437; ATTRIBUTOR_HSA-SAME: () #[[ATTR16:[0-9]+]] {438; ATTRIBUTOR_HSA-NEXT: ret void439;440 ret void441}442 443define void @func_call_external() #3 {444; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_call_external445; ATTRIBUTOR_HSA-SAME: () #[[ATTR15:[0-9]+]] {446; ATTRIBUTOR_HSA-NEXT: call void @external.func()447; ATTRIBUTOR_HSA-NEXT: ret void448;449 call void @external.func()450 ret void451}452 453define void @func_call_defined() #3 {454; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_call_defined455; ATTRIBUTOR_HSA-SAME: () #[[ATTR16]] {456; ATTRIBUTOR_HSA-NEXT: call void @defined.func()457; ATTRIBUTOR_HSA-NEXT: ret void458;459 call void @defined.func()460 ret void461}462define void @func_call_asm() #3 {463; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_call_asm464; ATTRIBUTOR_HSA-SAME: () #[[ATTR16]] {465; ATTRIBUTOR_HSA-NEXT: call void asm sideeffect "", ""() #[[ATTR24:[0-9]+]]466; ATTRIBUTOR_HSA-NEXT: ret void467;468 call void asm sideeffect "", ""() #3469 ret void470}471 472define amdgpu_kernel void @kern_call_external() #3 {473; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_call_external474; ATTRIBUTOR_HSA-SAME: () #[[ATTR15]] {475; ATTRIBUTOR_HSA-NEXT: call void @external.func()476; ATTRIBUTOR_HSA-NEXT: ret void477;478 call void @external.func()479 ret void480}481 482define amdgpu_kernel void @func_kern_defined() #3 {483; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_kern_defined484; ATTRIBUTOR_HSA-SAME: () #[[ATTR16]] {485; ATTRIBUTOR_HSA-NEXT: call void @defined.func()486; ATTRIBUTOR_HSA-NEXT: ret void487;488 call void @defined.func()489 ret void490}491 492define i32 @use_dispatch_ptr_ret_type() #1 {493; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@use_dispatch_ptr_ret_type494; ATTRIBUTOR_HSA-SAME: () #[[ATTR7]] {495; ATTRIBUTOR_HSA-NEXT: [[DISPATCH_PTR:%.*]] = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()496; ATTRIBUTOR_HSA-NEXT: store volatile ptr addrspace(4) [[DISPATCH_PTR]], ptr addrspace(1) poison, align 8497; ATTRIBUTOR_HSA-NEXT: ret i32 0498;499 %dispatch.ptr = call ptr addrspace(4) @llvm.amdgcn.dispatch.ptr()500 store volatile ptr addrspace(4) %dispatch.ptr, ptr addrspace(1) poison501 ret i32 0502}503 504define float @func_indirect_use_dispatch_ptr_constexpr_cast_func() #1 {505; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_use_dispatch_ptr_constexpr_cast_func506; ATTRIBUTOR_HSA-SAME: () #[[ATTR7]] {507; ATTRIBUTOR_HSA-NEXT: [[F:%.*]] = call float @use_dispatch_ptr_ret_type()508; ATTRIBUTOR_HSA-NEXT: [[FADD:%.*]] = fadd float [[F]], 1.000000e+00509; ATTRIBUTOR_HSA-NEXT: ret float [[FADD]]510;511 %f = call float @use_dispatch_ptr_ret_type()512 %fadd = fadd float %f, 1.0513 ret float %fadd514}515 516define float @func_indirect_call(ptr %fptr) #3 {517; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_call518; ATTRIBUTOR_HSA-SAME: (ptr [[FPTR:%.*]]) #[[ATTR15]] {519; ATTRIBUTOR_HSA-NEXT: [[F:%.*]] = call float [[FPTR]]()520; ATTRIBUTOR_HSA-NEXT: [[FADD:%.*]] = fadd float [[F]], 1.000000e+00521; ATTRIBUTOR_HSA-NEXT: ret float [[FADD]]522;523 %f = call float %fptr()524 %fadd = fadd float %f, 1.0525 ret float %fadd526}527 528declare float @extern() #3529define float @func_extern_call() #3 {530; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_extern_call531; ATTRIBUTOR_HSA-SAME: () #[[ATTR15]] {532; ATTRIBUTOR_HSA-NEXT: [[F:%.*]] = call float @extern()533; ATTRIBUTOR_HSA-NEXT: [[FADD:%.*]] = fadd float [[F]], 1.000000e+00534; ATTRIBUTOR_HSA-NEXT: ret float [[FADD]]535;536 %f = call float @extern()537 %fadd = fadd float %f, 1.0538 ret float %fadd539}540 541define float @func_null_call(ptr %fptr) #3 {542; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_null_call543; ATTRIBUTOR_HSA-SAME: (ptr [[FPTR:%.*]]) #[[ATTR15]] {544; ATTRIBUTOR_HSA-NEXT: [[F:%.*]] = call float null()545; ATTRIBUTOR_HSA-NEXT: [[FADD:%.*]] = fadd float [[F]], 1.000000e+00546; ATTRIBUTOR_HSA-NEXT: ret float [[FADD]]547;548 %f = call float null()549 %fadd = fadd float %f, 1.0550 ret float %fadd551}552 553declare float @llvm.amdgcn.rcp.f32(float) #0554 555; Calls some other recognized intrinsic556define float @func_other_intrinsic_call(float %arg) #3 {557; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_other_intrinsic_call558; ATTRIBUTOR_HSA-SAME: (float [[ARG:%.*]]) #[[ATTR16]] {559; ATTRIBUTOR_HSA-NEXT: [[F:%.*]] = call float @llvm.amdgcn.rcp.f32(float [[ARG]])560; ATTRIBUTOR_HSA-NEXT: [[FADD:%.*]] = fadd float [[F]], 1.000000e+00561; ATTRIBUTOR_HSA-NEXT: ret float [[FADD]]562;563 %f = call float @llvm.amdgcn.rcp.f32(float %arg)564 %fadd = fadd float %f, 1.0565 ret float %fadd566}567 568; Hostcall needs to be enabled for sanitizers569define amdgpu_kernel void @kern_sanitize_address() #4 {570; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_sanitize_address571; ATTRIBUTOR_HSA-SAME: () #[[ATTR17:[0-9]+]] {572; ATTRIBUTOR_HSA-NEXT: store volatile i32 0, ptr addrspace(1) null, align 4573; ATTRIBUTOR_HSA-NEXT: ret void574;575 store volatile i32 0, ptr addrspace(1) null576 ret void577}578 579; Hostcall needs to be enabled for sanitizers580define void @func_sanitize_address() #4 {581; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_sanitize_address582; ATTRIBUTOR_HSA-SAME: () #[[ATTR17]] {583; ATTRIBUTOR_HSA-NEXT: store volatile i32 0, ptr addrspace(1) null, align 4584; ATTRIBUTOR_HSA-NEXT: ret void585;586 store volatile i32 0, ptr addrspace(1) null587 ret void588}589 590; Hostcall needs to be enabled for sanitizers591define void @func_indirect_sanitize_address() #3 {592; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@func_indirect_sanitize_address593; ATTRIBUTOR_HSA-SAME: () #[[ATTR18:[0-9]+]] {594; ATTRIBUTOR_HSA-NEXT: call void @func_sanitize_address()595; ATTRIBUTOR_HSA-NEXT: ret void596;597 call void @func_sanitize_address()598 ret void599}600 601; Hostcall needs to be enabled for sanitizers602define amdgpu_kernel void @kern_indirect_sanitize_address() #3 {603; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_indirect_sanitize_address604; ATTRIBUTOR_HSA-SAME: () #[[ATTR18]] {605; ATTRIBUTOR_HSA-NEXT: call void @func_sanitize_address()606; ATTRIBUTOR_HSA-NEXT: ret void607;608 call void @func_sanitize_address()609 ret void610}611 612; Marked with amdgpu-no-implicitarg-ptr, and613; sanitize_address. sanitize_address wins and requires the pointer.614declare void @extern_func_sanitize_address() #5615 616define amdgpu_kernel void @kern_decl_sanitize_address() #3 {617; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_decl_sanitize_address618; ATTRIBUTOR_HSA-SAME: () #[[ATTR15]] {619; ATTRIBUTOR_HSA-NEXT: call void @extern_func_sanitize_address()620; ATTRIBUTOR_HSA-NEXT: ret void621;622 call void @extern_func_sanitize_address()623 ret void624}625 626declare void @enqueue_block_decl() #6627 628define internal void @enqueue_block_def() #6 {629; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@enqueue_block_def630; ATTRIBUTOR_HSA-SAME: () #[[ATTR21:[0-9]+]] {631; ATTRIBUTOR_HSA-NEXT: ret void632;633 ret void634}635 636define amdgpu_kernel void @kern_call_enqueued_block_decl() {637; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_call_enqueued_block_decl638; ATTRIBUTOR_HSA-SAME: () #[[ATTR22:[0-9]+]] {639; ATTRIBUTOR_HSA-NEXT: call void @enqueue_block_decl()640; ATTRIBUTOR_HSA-NEXT: ret void641;642 call void @enqueue_block_decl()643 ret void644}645 646define amdgpu_kernel void @kern_call_enqueued_block_def() {647; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_call_enqueued_block_def648; ATTRIBUTOR_HSA-SAME: () #[[ATTR23:[0-9]+]] {649; ATTRIBUTOR_HSA-NEXT: call void @enqueue_block_def()650; ATTRIBUTOR_HSA-NEXT: ret void651;652 call void @enqueue_block_def()653 ret void654}655 656define void @unused_enqueue_block() {657; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@unused_enqueue_block658; ATTRIBUTOR_HSA-SAME: () #[[ATTR23]] {659; ATTRIBUTOR_HSA-NEXT: ret void660;661 ret void662}663 664define internal void @known_func() {665; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@known_func666; ATTRIBUTOR_HSA-SAME: () #[[ATTR23]] {667; ATTRIBUTOR_HSA-NEXT: ret void668;669 ret void670}671 672; Should never happen673define amdgpu_kernel void @kern_callsite_enqueue_block() {674; ATTRIBUTOR_HSA-LABEL: define {{[^@]+}}@kern_callsite_enqueue_block675; ATTRIBUTOR_HSA-SAME: () #[[ATTR23]] {676; ATTRIBUTOR_HSA-NEXT: call void @known_func() #[[ATTR25:[0-9]+]]677; ATTRIBUTOR_HSA-NEXT: ret void678;679 call void @known_func() #6680 ret void681}682 683attributes #0 = { nounwind readnone speculatable }684attributes #1 = { nounwind "target-cpu"="fiji" }685attributes #2 = { nounwind "target-cpu"="gfx900" }686attributes #3 = { nounwind }687attributes #4 = { nounwind sanitize_address }688attributes #5 = { nounwind sanitize_address "amdgpu-no-implicitarg-ptr" }689attributes #6 = { "enqueued-block" }690 691 692;.693; ATTRIBUTOR_HSA: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }694; ATTRIBUTOR_HSA: attributes #[[ATTR1]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }695; ATTRIBUTOR_HSA: attributes #[[ATTR2]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }696; ATTRIBUTOR_HSA: attributes #[[ATTR3]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "target-cpu"="fiji" "uniform-work-group-size"="false" }697; ATTRIBUTOR_HSA: attributes #[[ATTR4]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }698; ATTRIBUTOR_HSA: attributes #[[ATTR5]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }699; ATTRIBUTOR_HSA: attributes #[[ATTR6]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }700; ATTRIBUTOR_HSA: attributes #[[ATTR7]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }701; ATTRIBUTOR_HSA: attributes #[[ATTR8]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }702; ATTRIBUTOR_HSA: attributes #[[ATTR9]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }703; ATTRIBUTOR_HSA: attributes #[[ATTR10]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }704; ATTRIBUTOR_HSA: attributes #[[ATTR11]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }705; ATTRIBUTOR_HSA: attributes #[[ATTR12]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="fiji" "uniform-work-group-size"="false" }706; ATTRIBUTOR_HSA: attributes #[[ATTR13]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx900" "uniform-work-group-size"="false" }707; ATTRIBUTOR_HSA: attributes #[[ATTR14]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "target-cpu"="gfx900" "uniform-work-group-size"="false" }708; ATTRIBUTOR_HSA: attributes #[[ATTR15]] = { nounwind "uniform-work-group-size"="false" }709; ATTRIBUTOR_HSA: attributes #[[ATTR16]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="false" }710; ATTRIBUTOR_HSA: attributes #[[ATTR17]] = { nounwind sanitize_address "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-heap-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="false" }711; ATTRIBUTOR_HSA: attributes #[[ATTR18]] = { nounwind "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-heap-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="false" }712; ATTRIBUTOR_HSA: attributes #[[ATTR19:[0-9]+]] = { nounwind sanitize_address "amdgpu-no-implicitarg-ptr" "uniform-work-group-size"="false" }713; ATTRIBUTOR_HSA: attributes #[[ATTR20:[0-9]+]] = { "enqueued-block" "uniform-work-group-size"="false" }714; ATTRIBUTOR_HSA: attributes #[[ATTR21]] = { "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "enqueued-block" "uniform-work-group-size"="false" }715; ATTRIBUTOR_HSA: attributes #[[ATTR22]] = { "uniform-work-group-size"="false" }716; ATTRIBUTOR_HSA: attributes #[[ATTR23]] = { "amdgpu-no-cluster-id-x" "amdgpu-no-cluster-id-y" "amdgpu-no-cluster-id-z" "amdgpu-no-completion-action" "amdgpu-no-default-queue" "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-flat-scratch-init" "amdgpu-no-heap-ptr" "amdgpu-no-hostcall-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-multigrid-sync-arg" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" "uniform-work-group-size"="false" }717; ATTRIBUTOR_HSA: attributes #[[ATTR24]] = { nounwind }718; ATTRIBUTOR_HSA: attributes #[[ATTR25]] = { "enqueued-block" }719;.720