]> granicus.if.org Git - llvm/commitdiff
[PM] Port WholeProgramDevirt to the new pass manager.
authorDavide Italiano <davide@freebsd.org>
Tue, 14 Jun 2016 21:44:19 +0000 (21:44 +0000)
committerDavide Italiano <davide@freebsd.org>
Tue, 14 Jun 2016 21:44:19 +0000 (21:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272721 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Transforms/IPO/WholeProgramDevirt.h
lib/Passes/PassBuilder.cpp
lib/Passes/PassRegistry.def
lib/Transforms/IPO/WholeProgramDevirt.cpp
test/Transforms/WholeProgramDevirt/constant-arg.ll

index b086d3512e62029c1047ef49686a61fd53b5c593..142e01e3cdcd34d4628b24c7bcac7494d1b46c0b 100644 (file)
@@ -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 <cassert>
 #include <cstdint>
 #include <utility>
@@ -210,6 +212,11 @@ void setAfterReturnValues(MutableArrayRef<VirtualCallTarget> Targets,
                           int64_t &OffsetByte, uint64_t &OffsetBit);
 
 } // end namespace wholeprogramdevirt
+
+struct WholeProgramDevirtPass : public PassInfoMixin<WholeProgramDevirtPass> {
+  PreservedAnalyses run(Module &M);
+};
+
 } // end namespace llvm
 
 #endif // LLVM_TRANSFORMS_IPO_WHOLEPROGRAMDEVIRT_H
index a519a657ae71fbf5eb266ae7ad9c42735ce27aed..b629ac7e61c16ca64de2331b8f6cbbf897422c05 100644 (file)
@@ -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"
index 5e4b7604200605be301506bdfe77f759f1f2390f..06892cb52b81b1c3622ed3ca5815210e1a8ef17f 100644 (file)
@@ -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
 
index 315de83ec3982780324206fb76637bd7a67197eb..4a80e4f11c9e5cfbe8c50e9cf433f8151795e8fa 100644 (file)
@@ -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<VTableBits> &Bits,
     DenseMap<Metadata *, std::set<BitSetInfo>> &BitSets) {
index ea72d16930afa2a74f983b07a50b7faa9d7f2c80..e26759faedca3444f1aeb6c0c1ab0396e0f8c671 100644 (file)
@@ -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"