brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 78045dd Raw
202 lines · plain
1; RUN: opt -S -dxil-finalize-linkage -mtriple=dxil-unknown-shadermodel6.5-library %s | FileCheck %s2; RUN: llc %s --filetype=asm -o - | FileCheck %s3 4target triple = "dxilv1.5-pc-shadermodel6.5-compute"5 6; Confirm that DXILFinalizeLinkage will remove functions that have compatible7; linkage and are not called from anywhere. This should be any function that8; is marked hidden or internal.9 10; Is hidden, and uncalled, this should be removed.11; CHECK-NOT: define {{.*}}doNothingUncalled12define hidden void @"?doNothingUncalled@@YAXXZ"() #2 {13entry:14  ret void15}16 17; Alwaysinline, hidden and uncalled, this should be removed.18; CHECK-NOT: define {{.*}}doAlwaysInlineUncalled19define hidden void @"?doAlwaysInlineUncalled@@YAXXZ"() #0 {20entry:21  ret void22}23 24; Noinline, hidden and uncalled, this should be removed.25; CHECK-NOT: define {{.*}}doNoinlineUncalled26define hidden void @"?doNoinlineUncalled@@YAXXZ"() #4 {27entry:28  ret void29}30 31; No inlining attribute, internal, and uncalled; this should be removed.32; CHECK-NOT: define {{.*}}doInternalUncalled33define internal void @"?doInternalUncalled@@YAXXZ"() #2 {34entry:35  ret void36}37 38; Alwaysinline, internal, and uncalled; this should be removed.39; CHECK-NOT: define {{.*}}doAlwaysInlineInternalUncalled40define internal void @"?doAlwaysInlineInternalUncalled@@YAXXZ"() #0 {41entry:42  ret void43}44 45; Noinline, internal, and uncalled; this should be removed.46; CHECK-NOT: define {{.*}}doNoinlineInternalUncalled47define internal void @"?doNoinlineInternalUncalled@@YAXXZ"() #4 {48entry:49  ret void50}51 52; Marked external, hidden and uncalled, this should become internal and be removed.53; CHECK-NOT: define {{.*}}doExternalUncalled54define external hidden void @"?doExternalUncalled@@YAXXZ"() #2 {55entry:56  ret void57}58 59; Alwaysinline, external, hidden and uncalled, this should become internal and be removed.60; CHECK-NOT: define {{.*}}doAlwaysInlineExternalUncalled61define external hidden void @"?doAlwaysInlineExternalUncalled@@YAXXZ"() #0 {62entry:63  ret void64}65 66; Noinline, external, hidden and uncalled, this should become internal and be removed.67; CHECK-NOT: define {{.*}}doNoinlineExternalUncalled68define external hidden void @"?doNoinlineExternalUncalled@@YAXXZ"() #4 {69entry:70  ret void71}72 73; No inlining attribute, hidden and called, this should stay.74; CHECK: define {{.*}}doNothingCalled75define hidden void @"?doNothingCalled@@YAXXZ"() #2 {76entry:77  ret void78}79 80; Alwaysinline, hidden and called, this should stay.81; CHECK: define {{.*}}doAlwaysInlineCalled82define hidden void @"?doAlwaysInlineCalled@@YAXXZ"() #0 {83entry:84  ret void85}86 87; Noinline, hidden and called, this should stay.88; CHECK: define {{.*}}doNoinlineCalled89define hidden void @"?doNoinlineCalled@@YAXXZ"() #4 {90entry:91  ret void92}93 94; No inlining attribute, internal, and called; this should stay.95; CHECK: define {{.*}}doInternalCalled96define internal void @"?doInternalCalled@@YAXXZ"() #2 {97entry:98  ret void99}100 101; Alwaysinline, internal, and called; this should stay.102; CHECK: define {{.*}}doAlwaysInlineInternalCalled103define internal void @"?doAlwaysInlineInternalCalled@@YAXXZ"() #0 {104entry:105  ret void106}107 108; Noinline, internal, and called; this should stay.109; CHECK: define {{.*}}doNoinlineInternalCalled110define internal void @"?doNoinlineInternalCalled@@YAXXZ"() #4 {111entry:112  ret void113}114 115; Marked external, hidden and called, this should become internal and stay.116; CHECK: define {{.*}}doExternalCalled117define external hidden void @"?doExternalCalled@@YAXXZ"() #2 {118entry:119  ret void120}121 122; Always inlined, external, hidden and called, this should become internal and stay.123; CHECK: define {{.*}}doAlwaysInlineExternalCalled124define external hidden void @"?doAlwaysInlineExternalCalled@@YAXXZ"() #0 {125entry:126  ret void127}128 129; Noinline, external, hidden and called, this should become internal and stay.130; CHECK: define {{.*}}doNoinlineExternalCalled131define external hidden void @"?doNoinlineExternalCalled@@YAXXZ"() #4 {132entry:133  ret void134}135 136; No inlining attribute and exported, this should stay.137; CHECK: define {{.*}}doNothingExported138define void @"?doNothingExported@@YAXXZ"() #3 {139entry:140  ret void141}142 143; Alwaysinline and exported, this should stay.144; CHECK: define {{.*}}doAlwaysInlineExported145define void @"?doAlwaysInlineExported@@YAXXZ"() #1 {146entry:147  ret void148}149 150; Noinline attribute and exported, this should stay.151; CHECK: define {{.*}}doNoinlineExported152define void @"?doNoinlineExported@@YAXXZ"() #5 {153entry:154  ret void155}156 157; Marked external and exported, this should stay.158; CHECK: define {{.*}}doExternalExported159define external void @"?doExternalExported@@YAXXZ"() #3 {160entry:161  ret void162}163 164; Alwaysinline, external and exported, this should stay.165; CHECK: define {{.*}}doAlwaysInlineExternalExported166define external void @"?doAlwaysInlineExternalExported@@YAXXZ"() #1 {167entry:168  ret void169}170 171; Noinline, external and exported, this should stay.172; CHECK: define {{.*}}doNoinlineExternalExported173define external void @"?doNoinlineExternalExported@@YAXXZ"() #5 {174entry:175  ret void176}177 178; Entry point function, this should stay.179; CHECK: define void @main()180define void @main() #6 {181entry:182  call void @"?doNothingCalled@@YAXXZ"() #7183  call void @"?doAlwaysInlineCalled@@YAXXZ"() #7184  call void @"?doNoinlineCalled@@YAXXZ"() #7185  call void @"?doInternalCalled@@YAXXZ"() #7186  call void @"?doAlwaysInlineInternalCalled@@YAXXZ"() #7187  call void @"?doNoinlineInternalCalled@@YAXXZ"() #7188  call void @"?doExternalCalled@@YAXXZ"() #7189  call void @"?doAlwaysInlineExternalCalled@@YAXXZ"() #7190  call void @"?doNoinlineExternalCalled@@YAXXZ"() #7191  ret void192}193 194attributes #0 = { alwaysinline convergent norecurse nounwind }195attributes #1 = { alwaysinline convergent norecurse nounwind }196attributes #2 = { convergent norecurse nounwind }197attributes #3 = { convergent norecurse nounwind }198attributes #4 = { convergent noinline norecurse nounwind }199attributes #5 = { convergent noinline norecurse nounwind }200attributes #6 = { convergent noinline norecurse "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" }201attributes #7 = { convergent }202