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