From d737dd2ec62f182afead7bdaf93a502163a8aa75 Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Tue, 14 Jun 2016 21:44:19 +0000 Subject: [PATCH] [PM] Port WholeProgramDevirt to the new pass manager. llvm-svn: 272721 --- llvm/include/llvm/Transforms/IPO/WholeProgramDevirt.h | 7 +++++++ llvm/lib/Passes/PassBuilder.cpp | 1 + llvm/lib/Passes/PassRegistry.def | 1 + llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp | 6 ++++++ llvm/test/Transforms/WholeProgramDevirt/constant-arg.ll | 1 + 5 files changed, 16 insertions(+) diff --git a/llvm/include/llvm/Transforms/IPO/WholeProgramDevirt.h b/llvm/include/llvm/Transforms/IPO/WholeProgramDevirt.h index b086d3512e62..142e01e3cdcd 100644 --- a/llvm/include/llvm/Transforms/IPO/WholeProgramDevirt.h +++ b/llvm/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/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index a519a657ae71..b629ac7e61c1 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/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/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def index 5e4b76042006..06892cb52b81 100644 --- a/llvm/lib/Passes/PassRegistry.def +++ b/llvm/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/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp index 315de83ec398..4a80e4f11c9e 100644 --- a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp +++ b/llvm/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/llvm/test/Transforms/WholeProgramDevirt/constant-arg.ll b/llvm/test/Transforms/WholeProgramDevirt/constant-arg.ll index ea72d16930af..e26759faedca 100644 --- a/llvm/test/Transforms/WholeProgramDevirt/constant-arg.ll +++ b/llvm/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"