1; RUN: opt -O1 -S -mtriple=amdgcn-unknown-amdhsa -amdgpu-internalize-symbols < %s | FileCheck -check-prefix=ALL -check-prefix=OPT %s 2; RUN: opt -O0 -S -mtriple=amdgcn-unknown-amdhsa -amdgpu-internalize-symbols < %s | FileCheck -check-prefix=ALL -check-prefix=OPTNONE %s 3 4; OPT-NOT: gvar_unused 5; OPTNONE: gvar_unused 6@gvar_unused = addrspace(1) global i32 undef, align 4 7 8; ALL: gvar_used 9@gvar_used = addrspace(1) global i32 undef, align 4 10 11; ALL: define internal fastcc void @func_used( 12define fastcc void @func_used(i32 addrspace(1)* %out, i32 %tid) #1 { 13entry: 14 store volatile i32 %tid, i32 addrspace(1)* %out 15 ret void 16} 17 18; ALL: define internal fastcc void @func_used_noinline( 19define fastcc void @func_used_noinline(i32 addrspace(1)* %out, i32 %tid) #2 { 20entry: 21 store volatile i32 %tid, i32 addrspace(1)* %out 22 ret void 23} 24 25; OPTNONE: define internal fastcc void @func_used_alwaysinline( 26; OPT-NOT: @func_used_alwaysinline 27define fastcc void @func_used_alwaysinline(i32 addrspace(1)* %out, i32 %tid) #3 { 28entry: 29 store volatile i32 %tid, i32 addrspace(1)* %out 30 ret void 31} 32 33; OPTNONE: define internal void @func_unused( 34; OPT-NOT: @func_unused 35define void @func_unused(i32 addrspace(1)* %out, i32 %tid) #2 { 36entry: 37 store volatile i32 %tid, i32 addrspace(1)* %out 38 ret void 39} 40 41; ALL: define amdgpu_kernel void @kernel_unused( 42define amdgpu_kernel void @kernel_unused(i32 addrspace(1)* %out) #1 { 43entry: 44 store volatile i32 1, i32 addrspace(1)* %out 45 ret void 46} 47 48; ALL: define amdgpu_kernel void @main_kernel() 49; ALL: tail call i32 @llvm.amdgcn.workitem.id.x 50; ALL: tail call fastcc void @func_used 51; ALL: tail call fastcc void @func_used_noinline 52; ALL: store volatile 53; ALL: ret void 54define amdgpu_kernel void @main_kernel() { 55entry: 56 %tid = tail call i32 @llvm.amdgcn.workitem.id.x() 57 tail call fastcc void @func_used(i32 addrspace(1)* @gvar_used, i32 %tid) 58 tail call fastcc void @func_used_noinline(i32 addrspace(1)* @gvar_used, i32 %tid) 59 tail call fastcc void @func_used_alwaysinline(i32 addrspace(1)* @gvar_used, i32 %tid) 60 ret void 61} 62 63declare i32 @llvm.amdgcn.workitem.id.x() #0 64 65attributes #0 = { nounwind readnone } 66attributes #1 = { nounwind } 67attributes #2 = { noinline nounwind } 68attributes #3 = { alwaysinline nounwind } 69