1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 18:54:02 +01:00

[PM/IPO] Port LowerTypeTests to the new PassManager.

There's a little bit of churn in this patch because the initialization
mechanism is now shared between the old and the new PM. Other than
that, it's just a pretty mechanical translation.

llvm-svn: 275082
This commit is contained in:
Davide Italiano 2016-07-11 18:10:06 +00:00
parent 6194a54b7e
commit fd6ab00139
5 changed files with 39 additions and 17 deletions

View File

@ -17,6 +17,8 @@
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/PassManager.h"
#include <cstdint>
#include <cstring>
@ -200,6 +202,12 @@ struct ByteArrayBuilder {
};
} // end namespace lowertypetests
class LowerTypeTestsPass : public PassInfoMixin<LowerTypeTestsPass> {
public:
PreservedAnalyses run(Module &M, AnalysisManager<Module> &AM);
};
} // end namespace llvm
#endif // LLVM_TRANSFORMS_IPO_LOWERTYPETESTS_H

View File

@ -66,6 +66,7 @@
#include "llvm/Transforms/IPO/GlobalOpt.h"
#include "llvm/Transforms/IPO/InferFunctionAttrs.h"
#include "llvm/Transforms/IPO/Internalize.h"
#include "llvm/Transforms/IPO/LowerTypeTests.h"
#include "llvm/Transforms/IPO/PartialInlining.h"
#include "llvm/Transforms/IPO/SCCP.h"
#include "llvm/Transforms/IPO/StripDeadPrototypes.h"

View File

@ -50,6 +50,7 @@ MODULE_PASS("instrprof", InstrProfiling())
MODULE_PASS("internalize", InternalizePass())
MODULE_PASS("invalidate<all>", InvalidateAllAnalysesPass())
MODULE_PASS("ipsccp", IPSCCPPass())
MODULE_PASS("lowertypetests", LowerTypeTestsPass())
MODULE_PASS("no-op-module", NoOpModulePass())
MODULE_PASS("partial-inliner", PartialInlinerPass())
MODULE_PASS("pgo-icall-prom", PGOIndirectCallPromotion())

View File

@ -985,25 +985,36 @@ bool LowerTypeTests::lower() {
return true;
}
// Initialization helper shared by the old and the new PM.
static void init(LowerTypeTests *LTT, Module &M) {
LTT->M = &M;
const DataLayout &DL = M.getDataLayout();
Triple TargetTriple(M.getTargetTriple());
LTT->LinkerSubsectionsViaSymbols = TargetTriple.isMacOSX();
LTT->Arch = TargetTriple.getArch();
LTT->ObjectFormat = TargetTriple.getObjectFormat();
LTT->Int1Ty = Type::getInt1Ty(M.getContext());
LTT->Int8Ty = Type::getInt8Ty(M.getContext());
LTT->Int32Ty = Type::getInt32Ty(M.getContext());
LTT->Int32PtrTy = PointerType::getUnqual(LTT->Int32Ty);
LTT->Int64Ty = Type::getInt64Ty(M.getContext());
LTT->IntPtrTy = DL.getIntPtrType(M.getContext(), 0);
LTT->TypeTestCallSites.clear();
}
bool LowerTypeTests::runOnModule(Module &M) {
if (skipModule(M))
return false;
this->M = &M;
const DataLayout &DL = M.getDataLayout();
Triple TargetTriple(M.getTargetTriple());
LinkerSubsectionsViaSymbols = TargetTriple.isMacOSX();
Arch = TargetTriple.getArch();
ObjectFormat = TargetTriple.getObjectFormat();
Int1Ty = Type::getInt1Ty(M.getContext());
Int8Ty = Type::getInt8Ty(M.getContext());
Int32Ty = Type::getInt32Ty(M.getContext());
Int32PtrTy = PointerType::getUnqual(Int32Ty);
Int64Ty = Type::getInt64Ty(M.getContext());
IntPtrTy = DL.getIntPtrType(M.getContext(), 0);
TypeTestCallSites.clear();
init(this, M);
return lower();
}
PreservedAnalyses LowerTypeTestsPass::run(Module &M,
AnalysisManager<Module> &AM) {
LowerTypeTests Impl;
init(&Impl, M);
bool Changed = Impl.lower();
if (!Changed)
return PreservedAnalyses::all();
return PreservedAnalyses::none();
}

View File

@ -1,4 +1,5 @@
; RUN: opt -S -lowertypetests < %s | FileCheck %s
; RUN: opt -S -passes=lowertypetests < %s | FileCheck %s
target datalayout = "e-p:32:32"