Home | History | Annotate | Download | only in AMDGPU
      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_noinline(
     12 define fastcc void @func_used_noinline(i32 addrspace(1)* %out, i32 %tid) #1 {
     13 entry:
     14   store volatile i32 %tid, i32 addrspace(1)* %out
     15   ret void
     16 }
     17 
     18 ; OPTNONE: define internal fastcc void @func_used_alwaysinline(
     19 ; OPT-NOT: @func_used_alwaysinline
     20 define fastcc void @func_used_alwaysinline(i32 addrspace(1)* %out, i32 %tid) #2 {
     21 entry:
     22   store volatile i32 %tid, i32 addrspace(1)* %out
     23   ret void
     24 }
     25 
     26 ; OPTNONE: define internal void @func_unused(
     27 ; OPT-NOT: @func_unused
     28 define void @func_unused(i32 addrspace(1)* %out, i32 %tid) #1 {
     29 entry:
     30   store volatile i32 %tid, i32 addrspace(1)* %out
     31   ret void
     32 }
     33 
     34 ; ALL: define amdgpu_kernel void @kernel_unused(
     35 define amdgpu_kernel void @kernel_unused(i32 addrspace(1)* %out) #1 {
     36 entry:
     37   store volatile i32 1, i32 addrspace(1)* %out
     38   ret void
     39 }
     40 
     41 ; ALL: define amdgpu_kernel void @main_kernel()
     42 ; ALL: tail call i32 @llvm.amdgcn.workitem.id.x
     43 ; ALL: tail call fastcc void @func_used_noinline
     44 ; ALL: store volatile
     45 ; ALL: ret void
     46 define amdgpu_kernel void @main_kernel() {
     47 entry:
     48   %tid = tail call i32 @llvm.amdgcn.workitem.id.x()
     49   tail call fastcc void @func_used_noinline(i32 addrspace(1)* @gvar_used, i32 %tid)
     50   tail call fastcc void @func_used_alwaysinline(i32 addrspace(1)* @gvar_used, i32 %tid)
     51   ret void
     52 }
     53 
     54 declare i32 @llvm.amdgcn.workitem.id.x() #0
     55 
     56 attributes #0 = { nounwind readnone }
     57 attributes #1 = { noinline nounwind }
     58 attributes #2 = { alwaysinline nounwind }
     59