[PM] Port SymbolRewriter to the new PM

Differential Revision: https://reviews.llvm.org/D22703

llvm-svn: 276687
This commit is contained in:
Michael Kuperstein 2016-07-25 20:52:00 +00:00
parent 95b0842e64
commit 39feb6290c
7 changed files with 58 additions and 24 deletions

View File

@ -288,7 +288,7 @@ void initializeRegisterCoalescerPass(PassRegistry&);
void initializeRenameIndependentSubregsPass(PassRegistry&);
void initializeReversePostOrderFunctionAttrsLegacyPassPass(PassRegistry&);
void initializeRewriteStatepointsForGCPass(PassRegistry&);
void initializeRewriteSymbolsPass(PassRegistry&);
void initializeRewriteSymbolsLegacyPassPass(PassRegistry&);
void initializeSCCPLegacyPassPass(PassRegistry &);
void initializeSCEVAAWrapperPassPass(PassRegistry&);
void initializeSLPVectorizerPass(PassRegistry&);

View File

@ -34,6 +34,7 @@
#define LLVM_TRANSFORMS_UTILS_SYMBOLREWRITER_H
#include "llvm/IR/Module.h"
#include "llvm/IR/PassManager.h"
#include <list>
namespace llvm {
@ -111,6 +112,24 @@ private:
ModulePass *createRewriteSymbolsPass();
ModulePass *createRewriteSymbolsPass(SymbolRewriter::RewriteDescriptorList &);
class RewriteSymbolPass : public PassInfoMixin<RewriteSymbolPass> {
public:
RewriteSymbolPass() { loadAndParseMapFiles(); }
RewriteSymbolPass(SymbolRewriter::RewriteDescriptorList &DL) {
Descriptors.splice(Descriptors.begin(), DL);
}
PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
// Glue for old PM
bool runImpl(Module &M);
private:
void loadAndParseMapFiles();
SymbolRewriter::RewriteDescriptorList Descriptors;
};
}
#endif //LLVM_TRANSFORMS_UTILS_SYMBOLREWRITER_H

View File

@ -119,6 +119,7 @@
#include "llvm/Transforms/Utils/Mem2Reg.h"
#include "llvm/Transforms/Utils/MemorySSA.h"
#include "llvm/Transforms/Utils/SimplifyInstructions.h"
#include "llvm/Transforms/Utils/SymbolRewriter.h"
#include "llvm/Transforms/Vectorize/LoopVectorize.h"
#include "llvm/Transforms/Vectorize/SLPVectorizer.h"

View File

@ -63,6 +63,7 @@ MODULE_PASS("print-callgraph", CallGraphPrinterPass(dbgs()))
MODULE_PASS("print", PrintModulePass(dbgs()))
MODULE_PASS("print-lcg", LazyCallGraphPrinterPass(dbgs()))
MODULE_PASS("print-lcg-dot", LazyCallGraphDOTPrinterPass(dbgs()))
MODULE_PASS("rewrite-symbols", RewriteSymbolPass())
MODULE_PASS("rpo-functionattrs", ReversePostOrderFunctionAttrsPass())
MODULE_PASS("sample-profile", SampleProfileLoaderPass())
MODULE_PASS("strip-dead-prototypes", StripDeadPrototypesPass())

View File

@ -58,6 +58,7 @@
//===----------------------------------------------------------------------===//
#define DEBUG_TYPE "symbol-rewriter"
#include "llvm/Transforms/Utils/SymbolRewriter.h"
#include "llvm/Pass.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/IR/LegacyPassManager.h"
@ -68,7 +69,6 @@
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/YAMLParser.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Utils/SymbolRewriter.h"
using namespace llvm;
using namespace SymbolRewriter;
@ -497,34 +497,43 @@ parseRewriteGlobalAliasDescriptor(yaml::Stream &YS, yaml::ScalarNode *K,
}
namespace {
class RewriteSymbols : public ModulePass {
class RewriteSymbolsLegacyPass : public ModulePass {
public:
static char ID; // Pass identification, replacement for typeid
RewriteSymbols();
RewriteSymbols(SymbolRewriter::RewriteDescriptorList &DL);
RewriteSymbolsLegacyPass();
RewriteSymbolsLegacyPass(SymbolRewriter::RewriteDescriptorList &DL);
bool runOnModule(Module &M) override;
private:
void loadAndParseMapFiles();
SymbolRewriter::RewriteDescriptorList Descriptors;
RewriteSymbolPass Impl;
};
char RewriteSymbols::ID = 0;
char RewriteSymbolsLegacyPass::ID = 0;
RewriteSymbols::RewriteSymbols() : ModulePass(ID) {
initializeRewriteSymbolsPass(*PassRegistry::getPassRegistry());
loadAndParseMapFiles();
RewriteSymbolsLegacyPass::RewriteSymbolsLegacyPass() : ModulePass(ID), Impl() {
initializeRewriteSymbolsLegacyPassPass(*PassRegistry::getPassRegistry());
}
RewriteSymbols::RewriteSymbols(SymbolRewriter::RewriteDescriptorList &DL)
: ModulePass(ID) {
Descriptors.splice(Descriptors.begin(), DL);
RewriteSymbolsLegacyPass::RewriteSymbolsLegacyPass(
SymbolRewriter::RewriteDescriptorList &DL)
: ModulePass(ID), Impl(DL) {}
bool RewriteSymbolsLegacyPass::runOnModule(Module &M) {
return Impl.runImpl(M);
}
}
bool RewriteSymbols::runOnModule(Module &M) {
namespace llvm {
PreservedAnalyses RewriteSymbolPass::run(Module &M, ModuleAnalysisManager &AM) {
if (!runImpl(M))
return PreservedAnalyses::all();
return PreservedAnalyses::none();
}
bool RewriteSymbolPass::runImpl(Module &M) {
bool Changed;
Changed = false;
@ -534,21 +543,23 @@ bool RewriteSymbols::runOnModule(Module &M) {
return Changed;
}
void RewriteSymbols::loadAndParseMapFiles() {
void RewriteSymbolPass::loadAndParseMapFiles() {
const std::vector<std::string> MapFiles(RewriteMapFiles);
SymbolRewriter::RewriteMapParser parser;
SymbolRewriter::RewriteMapParser Parser;
for (const auto &MapFile : MapFiles)
parser.parse(MapFile, &Descriptors);
Parser.parse(MapFile, &Descriptors);
}
}
INITIALIZE_PASS(RewriteSymbols, "rewrite-symbols", "Rewrite Symbols", false,
false)
INITIALIZE_PASS(RewriteSymbolsLegacyPass, "rewrite-symbols", "Rewrite Symbols",
false, false)
ModulePass *llvm::createRewriteSymbolsPass() { return new RewriteSymbols(); }
ModulePass *llvm::createRewriteSymbolsPass() {
return new RewriteSymbolsLegacyPass();
}
ModulePass *
llvm::createRewriteSymbolsPass(SymbolRewriter::RewriteDescriptorList &DL) {
return new RewriteSymbols(DL);
return new RewriteSymbolsLegacyPass(DL);
}

View File

@ -1,5 +1,7 @@
; RUN: opt -mtriple i686-win32 -rewrite-symbols -rewrite-map-file %p/rewrite.map \
; RUN: %s -o - | llvm-dis | FileCheck %s
; RUN: opt -mtriple i686-win32 -passes='rewrite-symbols' -rewrite-map-file %p/rewrite.map \
; RUN: %s -o - | llvm-dis | FileCheck %s
declare void @source_function()
@source_variable = external global i32

View File

@ -361,7 +361,7 @@ int main(int argc, char **argv) {
// supported.
initializeCodeGenPreparePass(Registry);
initializeAtomicExpandPass(Registry);
initializeRewriteSymbolsPass(Registry);
initializeRewriteSymbolsLegacyPassPass(Registry);
initializeWinEHPreparePass(Registry);
initializeDwarfEHPreparePass(Registry);
initializeSafeStackPass(Registry);