From e4f3f2c0c5f22ddfe86d16ba09fd0171bed0f2b3 Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Sat, 28 Aug 2021 16:48:28 -0500 Subject: [PATCH] [Polly] Don't prune non-external function itself from dump. --- polly/lib/Support/DumpFunctionPass.cpp | 9 +++++++++ polly/test/Support/dumpfunction.ll | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/polly/lib/Support/DumpFunctionPass.cpp b/polly/lib/Support/DumpFunctionPass.cpp index 313fc71..a14e0ef 100644 --- a/polly/lib/Support/DumpFunctionPass.cpp +++ b/polly/lib/Support/DumpFunctionPass.cpp @@ -43,9 +43,15 @@ static void runDumpFunction(llvm::Function &F, StringRef Suffix) { return GV == &F; }; std::unique_ptr CM = CloneModule(*M, VMap, ShouldCloneDefinition); + Function *NewF = cast(VMap.lookup(&F)); + assert(NewF && "Expected selected function to be cloned"); LLVM_DEBUG(dbgs() << "Global DCE...\n"); + // Stop F itself from being pruned + GlobalValue::LinkageTypes OrigLinkage = NewF->getLinkage(); + NewF->setLinkage(GlobalValue::ExternalLinkage); + { ModuleAnalysisManager MAM; ModulePassManager MPM; @@ -58,6 +64,9 @@ static void runDumpFunction(llvm::Function &F, StringRef Suffix) { MPM.run(*CM, MAM); } + // Restore old linkage + NewF->setLinkage(OrigLinkage); + LLVM_DEBUG(dbgs() << "Write to file '" << Dumpfile << "'...\n"); std::unique_ptr Out; diff --git a/polly/test/Support/dumpfunction.ll b/polly/test/Support/dumpfunction.ll index 70b586b..243322f 100644 --- a/polly/test/Support/dumpfunction.ll +++ b/polly/test/Support/dumpfunction.ll @@ -22,7 +22,7 @@ @callee_alias = dso_local unnamed_addr alias void(i32, double*, i32), void(i32, double*, i32 )* @callee -define void @callee(i32 %n, double* noalias nonnull %A, i32 %i) { +define internal void @callee(i32 %n, double* noalias nonnull %A, i32 %i) { entry: br label %for @@ -49,7 +49,7 @@ return: } -define void @caller(i32 %n, double* noalias nonnull %A) { +define internal void @caller(i32 %n, double* noalias nonnull %A) { entry: br label %for -- 2.7.4