================ @@ -18,19 +18,20 @@ using namespace llvm; static bool finalizeLinkage(Module &M) { - SmallPtrSet<Function *, 8> EntriesAndExports; + SmallPtrSet<Function *, 8> Funcs; // Find all entry points and export functions for (Function &EF : M.functions()) { - if (!EF.hasFnAttribute("hlsl.shader") && !EF.hasFnAttribute("hlsl.export")) + if (EF.hasFnAttribute("hlsl.shader") || EF.hasFnAttribute("hlsl.export")) continue; - EntriesAndExports.insert(&EF); + Funcs.insert(&EF); } - for (Function &F : M.functions()) { - if (F.getLinkage() == GlobalValue::ExternalLinkage && - !EntriesAndExports.contains(&F)) { - F.setLinkage(GlobalValue::InternalLinkage); + for (Function *F : Funcs) { + if (F->getLinkage() == GlobalValue::ExternalLinkage) { + F->setLinkage(GlobalValue::InternalLinkage); + if (F->isDefTriviallyDead()) ---------------- pow2clk wrote:
Not sure if this should also check that the alwaysinline attribute is set like AlwaysInliner does: https://github.com/llvm/llvm-project/blob/2a5ac9d9aff91406b0c58629df3a4e4dce87738c/llvm/lib/Transforms/IPO/AlwaysInliner.cpp#L89 We should always inline functions that are marked internal, so I don't know of a case where it wouldn't be set. 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