================ @@ -0,0 +1,80 @@ +; RUN: opt -S -dxil-finalize-linkage -mtriple=dxil-unknown-shadermodel6.5-compute %s | FileCheck %s +; RUN: llc %s --filetype=asm -o - | FileCheck %s + +target triple = "dxilv1.5-pc-shadermodel6.5-compute" + +; Confirm that DXILFinalizeLinkage will remove functions that have compatible +; linkage and are not called from anywhere. This should be any function that +; is not explicitly marked noinline or export and is not an entry point. + +; Not called nor marked with any linking or inlining attributes. +; CHECK-NOT: define {{.*}}doNothingNothing +define void @"?doNothingNothing@@YAXXZ"() #0 { +entry: + ret void +} + +; Marked internal, this should be removed. +; CHECK-NOT: define {{.*}}doNothingInternally +define internal void @"?doNothingInternally@@YAXXZ"() #0 { +entry: + ret void +} + +; Marked external, which should become internal and be removed. +; CHECK-NOT: define {{.*}}doNothingExternally +define external void @"?doNothingExternally@@YAXXZ"() #0 { +entry: + ret void +} + +; Not called nor marked with any linking or inlining attributes. +; CHECK: define internal void @"?doSomethingSomething@@YAXXZ"() #0 +define void @"?doSomethingSomething@@YAXXZ"() #0 { +entry: + ret void +} + +; Marked internal, this should be removed. +; CHECK: define internal void @"?doSomethingInternally@@YAXXZ"() #0 +define internal void @"?doSomethingInternally@@YAXXZ"() #0 { +entry: + ret void +} + +; Marked external, which should become internal and be removed. +; CHECK: define internal void @"?doSomethingExternally@@YAXXZ"() #0 +define external void @"?doSomethingExternally@@YAXXZ"() #0 { +entry: + ret void +} + +; Lacks alwaysinline attribute. Should remain. +; CHECK: define internal void @"?doNothingDefault@@YAXXZ"() #1 +define void @"?doNothingDefault@@YAXXZ"() #1 { +entry: + ret void +} + +; Has noinline attribute. Should remain. +; CHECK: define {{.*}}doNothingNoinline +define void @"?doNothingNoinline@@YAXXZ"() #2 { +entry: ---------------- hekota wrote:
Are there two (`doNothingDefault` and `doNothingNoinline`) not trivially dead when they are not called from anywhere? https://github.com/llvm/llvm-project/pull/106146 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits