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