blob: 138b1c9cc6057c8bf2dd3336cdf2e24a6c361668 [file] [log] [blame]
Matt Arsenaulte745d992017-09-19 07:40:11 +00001; 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
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +00003
Matt Arsenaulte745d992017-09-19 07:40:11 +00004; OPT-NOT: gvar_unused
5; OPTNONE: gvar_unused
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +00006@gvar_unused = addrspace(1) global i32 undef, align 4
Matt Arsenaulte745d992017-09-19 07:40:11 +00007
8; ALL: gvar_used
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +00009@gvar_used = addrspace(1) global i32 undef, align 4
10
Matt Arsenault988df632018-08-31 06:02:36 +000011; OPT: define internal fastcc void @func_used_noinline(
12; OPT-NONE: define fastcc void @func_used_noinline(
Stanislav Mekhanoshin5670e6d2017-09-20 04:25:58 +000013define fastcc void @func_used_noinline(i32 addrspace(1)* %out, i32 %tid) #1 {
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +000014entry:
Matt Arsenaulte745d992017-09-19 07:40:11 +000015 store volatile i32 %tid, i32 addrspace(1)* %out
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +000016 ret void
17}
18
Matt Arsenault988df632018-08-31 06:02:36 +000019; OPTNONE: define fastcc void @func_used_alwaysinline(
Matt Arsenaulte745d992017-09-19 07:40:11 +000020; OPT-NOT: @func_used_alwaysinline
Stanislav Mekhanoshin5670e6d2017-09-20 04:25:58 +000021define fastcc void @func_used_alwaysinline(i32 addrspace(1)* %out, i32 %tid) #2 {
Matt Arsenaulte745d992017-09-19 07:40:11 +000022entry:
23 store volatile i32 %tid, i32 addrspace(1)* %out
24 ret void
25}
26
Matt Arsenault988df632018-08-31 06:02:36 +000027; OPTNONE: define void @func_unused(
Matt Arsenaulte745d992017-09-19 07:40:11 +000028; OPT-NOT: @func_unused
Stanislav Mekhanoshin5670e6d2017-09-20 04:25:58 +000029define void @func_unused(i32 addrspace(1)* %out, i32 %tid) #1 {
Matt Arsenaulte745d992017-09-19 07:40:11 +000030entry:
31 store volatile i32 %tid, i32 addrspace(1)* %out
32 ret void
33}
34
35; ALL: define amdgpu_kernel void @kernel_unused(
36define amdgpu_kernel void @kernel_unused(i32 addrspace(1)* %out) #1 {
37entry:
38 store volatile i32 1, i32 addrspace(1)* %out
39 ret void
40}
41
42; ALL: define amdgpu_kernel void @main_kernel()
43; ALL: tail call i32 @llvm.amdgcn.workitem.id.x
Matt Arsenaulte745d992017-09-19 07:40:11 +000044; ALL: tail call fastcc void @func_used_noinline
45; ALL: store volatile
46; ALL: ret void
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +000047define amdgpu_kernel void @main_kernel() {
48entry:
Matt Arsenaulte745d992017-09-19 07:40:11 +000049 %tid = tail call i32 @llvm.amdgcn.workitem.id.x()
Matt Arsenaulte745d992017-09-19 07:40:11 +000050 tail call fastcc void @func_used_noinline(i32 addrspace(1)* @gvar_used, i32 %tid)
51 tail call fastcc void @func_used_alwaysinline(i32 addrspace(1)* @gvar_used, i32 %tid)
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +000052 ret void
53}
54
55declare i32 @llvm.amdgcn.workitem.id.x() #0
56
57attributes #0 = { nounwind readnone }
Stanislav Mekhanoshin5670e6d2017-09-20 04:25:58 +000058attributes #1 = { noinline nounwind }
59attributes #2 = { alwaysinline nounwind }