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