xref: /llvm-project/llvm/test/CodeGen/DirectX/finalize_linkage.ll (revision ab7518050183162f09724ef8682a580cc68709bc)
1db279c72SHelena Kotas; RUN: opt -S -dxil-finalize-linkage -mtriple=dxil-unknown-shadermodel6.5-compute %s | FileCheck %s
2db279c72SHelena Kotas; RUN: llc %s --filetype=asm -o - | FileCheck %s --check-prefixes=CHECK-LLC
3db279c72SHelena Kotas
4db279c72SHelena Kotastarget triple = "dxilv1.5-pc-shadermodel6.5-compute"
5db279c72SHelena Kotas
6db279c72SHelena Kotas; DXILFinalizeLinkage changes linkage of all functions that are not
7db279c72SHelena Kotas; entry points or exported function to internal.
8db279c72SHelena Kotas
9*ab751805SGreg Roth; CHECK-NOT: define internal void @"?f1@@YAXXZ"()
10db279c72SHelena Kotasdefine void @"?f1@@YAXXZ"() #0 {
11db279c72SHelena Kotasentry:
12db279c72SHelena Kotas  ret void
13db279c72SHelena Kotas}
14db279c72SHelena Kotas
15db279c72SHelena Kotas; CHECK: define internal void @"?f2@@YAXXZ"()
16db279c72SHelena Kotasdefine void @"?f2@@YAXXZ"() #0 {
17db279c72SHelena Kotasentry:
18db279c72SHelena Kotas  ret void
19db279c72SHelena Kotas}
20db279c72SHelena Kotas
21db279c72SHelena Kotas; CHECK: define internal void @"?f3@@YAXXZ"()
22db279c72SHelena Kotasdefine void @"?f3@@YAXXZ"() #0 {
23db279c72SHelena Kotasentry:
24db279c72SHelena Kotas  ret void
25db279c72SHelena Kotas}
26db279c72SHelena Kotas
27db279c72SHelena Kotas; CHECK: define internal void @"?foo@@YAXXZ"()
28db279c72SHelena Kotasdefine void @"?foo@@YAXXZ"() #0 {
29db279c72SHelena Kotasentry:
30db279c72SHelena Kotas  call void @"?f2@@YAXXZ"() #3
31db279c72SHelena Kotas  ret void
32db279c72SHelena Kotas}
33db279c72SHelena Kotas
34db279c72SHelena Kotas; Exported function - do not change linkage
35db279c72SHelena Kotas; CHECK: define void @"?bar@@YAXXZ"()
36db279c72SHelena Kotasdefine void @"?bar@@YAXXZ"() #1 {
37db279c72SHelena Kotasentry:
38db279c72SHelena Kotas  call void @"?f3@@YAXXZ"() #3
39db279c72SHelena Kotas  ret void
40db279c72SHelena Kotas}
41db279c72SHelena Kotas
42db279c72SHelena Kotas; CHECK: define internal void @"?main@@YAXXZ"() #0
43db279c72SHelena Kotasdefine internal void @"?main@@YAXXZ"() #0 {
44db279c72SHelena Kotasentry:
45db279c72SHelena Kotas  call void @"?foo@@YAXXZ"() #3
46db279c72SHelena Kotas  call void @"?bar@@YAXXZ"() #3
47db279c72SHelena Kotas  ret void
48db279c72SHelena Kotas}
49db279c72SHelena Kotas
50db279c72SHelena Kotas; Entry point function - do not change linkage
51db279c72SHelena Kotas; CHECK: define void @main() #2
52db279c72SHelena Kotasdefine void @main() #2 {
53db279c72SHelena Kotasentry:
54db279c72SHelena Kotas  call void @"?main@@YAXXZ"()
55db279c72SHelena Kotas  ret void
56db279c72SHelena Kotas}
57db279c72SHelena Kotas
58db279c72SHelena Kotasattributes #0 = { convergent noinline nounwind optnone}
59db279c72SHelena Kotasattributes #1 = { convergent noinline nounwind optnone "hlsl.export"}
60db279c72SHelena Kotasattributes #2 = { convergent "hlsl.numthreads"="4,1,1" "hlsl.shader"="compute"}
61db279c72SHelena Kotasattributes #3 = { convergent }
62db279c72SHelena Kotas
63db279c72SHelena Kotas; Make sure "hlsl.export" attribute is stripped by llc
64db279c72SHelena Kotas; CHECK-LLC-NOT: "hlsl.export"
65