[LegacyPassManager] Remove TargetMachine constructors
This provides a new way to access the TargetMachine through TargetPassConfig, as a dependency. The patterns replaced here are: * Passes handling a null TargetMachine call `getAnalysisIfAvailable<TargetPassConfig>`. * Passes not handling a null TargetMachine `addRequired<TargetPassConfig>` and call `getAnalysis<TargetPassConfig>`. * MachineFunctionPasses now use MF.getTarget(). * Remove all the TargetMachine constructors. * Remove INITIALIZE_TM_PASS. This fixes a crash when running `llc -start-before prologepilog`. PEI needs StackProtector, which gets constructed without a TargetMachine by the pass manager. The StackProtector pass doesn't handle the case where there is no TargetMachine, so it segfaults. Related to PR30324. Differential Revision: https://reviews.llvm.org/D33222 llvm-svn: 303360
This commit is contained in:
@@ -58,12 +58,13 @@ static cl::opt<bool> EnableSelectionDAGSP("enable-selectiondag-sp",
|
||||
cl::init(true), cl::Hidden);
|
||||
|
||||
char StackProtector::ID = 0;
|
||||
INITIALIZE_TM_PASS(StackProtector, "stack-protector", "Insert stack protectors",
|
||||
false, true)
|
||||
INITIALIZE_PASS_BEGIN(StackProtector, "stack-protector",
|
||||
"Insert stack protectors", false, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(TargetPassConfig)
|
||||
INITIALIZE_PASS_END(StackProtector, "stack-protector",
|
||||
"Insert stack protectors", false, true)
|
||||
|
||||
FunctionPass *llvm::createStackProtectorPass(const TargetMachine *TM) {
|
||||
return new StackProtector(TM);
|
||||
}
|
||||
FunctionPass *llvm::createStackProtectorPass() { return new StackProtector(); }
|
||||
|
||||
StackProtector::SSPLayoutKind
|
||||
StackProtector::getSSPLayout(const AllocaInst *AI) const {
|
||||
@@ -97,6 +98,8 @@ bool StackProtector::runOnFunction(Function &Fn) {
|
||||
DominatorTreeWrapperPass *DTWP =
|
||||
getAnalysisIfAvailable<DominatorTreeWrapperPass>();
|
||||
DT = DTWP ? &DTWP->getDomTree() : nullptr;
|
||||
TM = &getAnalysis<TargetPassConfig>().getTM<TargetMachine>();
|
||||
Trip = TM->getTargetTriple();
|
||||
TLI = TM->getSubtargetImpl(Fn)->getTargetLowering();
|
||||
HasPrologue = false;
|
||||
HasIRCheck = false;
|
||||
|
||||
Reference in New Issue
Block a user