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