From: Davide Italiano Date: Tue, 14 Jun 2016 21:44:19 +0000 (+0000) Subject: [PM] Port WholeProgramDevirt to the new pass manager. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7c798721d2585cdb0a149c7c8851934ec2fe53ed;p=llvm [PM] Port WholeProgramDevirt to the new pass manager. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272721 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Transforms/IPO/WholeProgramDevirt.h b/include/llvm/Transforms/IPO/WholeProgramDevirt.h index b086d3512e6..142e01e3cdc 100644 --- a/include/llvm/Transforms/IPO/WholeProgramDevirt.h +++ b/include/llvm/Transforms/IPO/WholeProgramDevirt.h @@ -15,6 +15,8 @@ #ifndef LLVM_TRANSFORMS_IPO_WHOLEPROGRAMDEVIRT_H #define LLVM_TRANSFORMS_IPO_WHOLEPROGRAMDEVIRT_H +#include "llvm/IR/Module.h" +#include "llvm/IR/PassManager.h" #include #include #include @@ -210,6 +212,11 @@ void setAfterReturnValues(MutableArrayRef Targets, int64_t &OffsetByte, uint64_t &OffsetBit); } // end namespace wholeprogramdevirt + +struct WholeProgramDevirtPass : public PassInfoMixin { + PreservedAnalyses run(Module &M); +}; + } // end namespace llvm #endif // LLVM_TRANSFORMS_IPO_WHOLEPROGRAMDEVIRT_H diff --git a/lib/Passes/PassBuilder.cpp b/lib/Passes/PassBuilder.cpp index a519a657ae7..b629ac7e61c 100644 --- a/lib/Passes/PassBuilder.cpp +++ b/lib/Passes/PassBuilder.cpp @@ -63,6 +63,7 @@ #include "llvm/Transforms/IPO/Internalize.h" #include "llvm/Transforms/IPO/SCCP.h" #include "llvm/Transforms/IPO/StripDeadPrototypes.h" +#include "llvm/Transforms/IPO/WholeProgramDevirt.h" #include "llvm/Transforms/InstCombine/InstCombine.h" #include "llvm/Transforms/InstrProfiling.h" #include "llvm/Transforms/PGOInstrumentation.h" diff --git a/lib/Passes/PassRegistry.def b/lib/Passes/PassRegistry.def index 5e4b7604200..06892cb52b8 100644 --- a/lib/Passes/PassRegistry.def +++ b/lib/Passes/PassRegistry.def @@ -60,6 +60,7 @@ MODULE_PASS("print-lcg", LazyCallGraphPrinterPass(dbgs())) MODULE_PASS("rpo-functionattrs", ReversePostOrderFunctionAttrsPass()) MODULE_PASS("sample-profile", SampleProfileLoaderPass()) MODULE_PASS("strip-dead-prototypes", StripDeadPrototypesPass()) +MODULE_PASS("wholeprogramdevirt", WholeProgramDevirtPass()) MODULE_PASS("verify", VerifierPass()) #undef MODULE_PASS diff --git a/lib/Transforms/IPO/WholeProgramDevirt.cpp b/lib/Transforms/IPO/WholeProgramDevirt.cpp index 315de83ec39..4a80e4f11c9 100644 --- a/lib/Transforms/IPO/WholeProgramDevirt.cpp +++ b/lib/Transforms/IPO/WholeProgramDevirt.cpp @@ -280,6 +280,12 @@ ModulePass *llvm::createWholeProgramDevirtPass() { return new WholeProgramDevirt; } +PreservedAnalyses WholeProgramDevirtPass::run(Module &M) { + if (!DevirtModule(M).run()) + return PreservedAnalyses::all(); + return PreservedAnalyses::none(); +} + void DevirtModule::buildBitSets( std::vector &Bits, DenseMap> &BitSets) { diff --git a/test/Transforms/WholeProgramDevirt/constant-arg.ll b/test/Transforms/WholeProgramDevirt/constant-arg.ll index ea72d16930a..e26759faedc 100644 --- a/test/Transforms/WholeProgramDevirt/constant-arg.ll +++ b/test/Transforms/WholeProgramDevirt/constant-arg.ll @@ -1,4 +1,5 @@ ; RUN: opt -S -wholeprogramdevirt %s | FileCheck %s +; RUN: opt -S -passes=wholeprogramdevirt %s | FileCheck %s target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu"