blob: 8fda1af0050bda9064f79e93d90d3ccde1732c49 [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 Arsenaulte745d992017-09-19 07:40:11 +000011; ALL: define internal fastcc void @func_used(
12define fastcc void @func_used(i32 addrspace(1)* %out, i32 %tid) #1 {
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +000013entry:
Matt Arsenaulte745d992017-09-19 07:40:11 +000014 store volatile i32 %tid, i32 addrspace(1)* %out
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +000015 ret void
16}
17
Matt Arsenaulte745d992017-09-19 07:40:11 +000018; ALL: define internal fastcc void @func_used_noinline(
19define fastcc void @func_used_noinline(i32 addrspace(1)* %out, i32 %tid) #2 {
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +000020entry:
Matt Arsenaulte745d992017-09-19 07:40:11 +000021 store volatile i32 %tid, i32 addrspace(1)* %out
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +000022 ret void
23}
24
Matt Arsenaulte745d992017-09-19 07:40:11 +000025; 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
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +000054define amdgpu_kernel void @main_kernel() {
55entry:
Matt Arsenaulte745d992017-09-19 07:40:11 +000056 %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)
Stanislav Mekhanoshina3b72792017-01-30 21:05:18 +000060 ret void
61}
62
63declare i32 @llvm.amdgcn.workitem.id.x() #0
64
65attributes #0 = { nounwind readnone }
Matt Arsenaulte745d992017-09-19 07:40:11 +000066attributes #1 = { nounwind }
67attributes #2 = { noinline nounwind }
68attributes #3 = { alwaysinline nounwind }