diff options
Diffstat (limited to 'llvm/lib/CodeGen/WinEHPrepare.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/WinEHPrepare.cpp | 47 |
1 files changed, 8 insertions, 39 deletions
diff --git a/llvm/lib/CodeGen/WinEHPrepare.cpp b/llvm/lib/CodeGen/WinEHPrepare.cpp index 05de6bf39fa..bc3cc6b9b85 100644 --- a/llvm/lib/CodeGen/WinEHPrepare.cpp +++ b/llvm/lib/CodeGen/WinEHPrepare.cpp @@ -20,8 +20,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/TinyPtrVector.h" #include "llvm/Analysis/LibCallSemantics.h" -#include "llvm/Analysis/TargetTransformInfo.h" -#include "llvm/IR/Dominators.h" #include "llvm/IR/Function.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/Instructions.h" @@ -63,12 +61,10 @@ typedef DenseMap<const BasicBlock *, CatchHandler *> CatchHandlerMapTy; typedef DenseMap<const BasicBlock *, CleanupHandler *> CleanupHandlerMapTy; class WinEHPrepare : public FunctionPass { - std::unique_ptr<FunctionPass> DwarfPrepare; - public: static char ID; // Pass identification, replacement for typeid. WinEHPrepare(const TargetMachine *TM = nullptr) - : FunctionPass(ID), DwarfPrepare(createDwarfEHPass(TM)) {} + : FunctionPass(ID) {} bool runOnFunction(Function &Fn) override; @@ -323,23 +319,13 @@ private: } // end anonymous namespace char WinEHPrepare::ID = 0; -INITIALIZE_TM_PASS_BEGIN(WinEHPrepare, "winehprepare", - "Prepare Windows exceptions", false, false) -INITIALIZE_PASS_DEPENDENCY(DwarfEHPrepare) -INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass) -INITIALIZE_PASS_DEPENDENCY(TargetTransformInfoWrapperPass) -INITIALIZE_TM_PASS_END(WinEHPrepare, "winehprepare", - "Prepare Windows exceptions", false, false) +INITIALIZE_TM_PASS(WinEHPrepare, "winehprepare", "Prepare Windows exceptions", + false, false) FunctionPass *llvm::createWinEHPass(const TargetMachine *TM) { return new WinEHPrepare(TM); } -static bool isMSVCPersonality(EHPersonality Pers) { - return Pers == EHPersonality::MSVC_Win64SEH || - Pers == EHPersonality::MSVC_CXX; -} - bool WinEHPrepare::runOnFunction(Function &Fn) { SmallVector<LandingPadInst *, 4> LPads; SmallVector<ResumeInst *, 4> Resumes; @@ -357,24 +343,9 @@ bool WinEHPrepare::runOnFunction(Function &Fn) { // Classify the personality to see what kind of preparation we need. EHPersonality Pers = classifyEHPersonality(LPads.back()->getPersonalityFn()); - // Delegate through to the DWARF pass if this is unrecognized. - if (!isMSVCPersonality(Pers)) { - if (!DwarfPrepare->getResolver()) { - // Build an AnalysisResolver with the analyses needed by DwarfEHPrepare. - // It will take ownership of the AnalysisResolver. - assert(getResolver()); - auto *AR = new AnalysisResolver(getResolver()->getPMDataManager()); - AR->addAnalysisImplsPair( - &TargetTransformInfoWrapperPass::ID, - getResolver()->findImplPass(&TargetTransformInfoWrapperPass::ID)); - AR->addAnalysisImplsPair( - &DominatorTreeWrapperPass::ID, - getResolver()->findImplPass(&DominatorTreeWrapperPass::ID)); - DwarfPrepare->setResolver(AR); - } - - return DwarfPrepare->runOnFunction(Fn); - } + // Do nothing if this is not an MSVC personality. + if (!isMSVCEHPersonality(Pers)) + return false; // FIXME: This only returns true if the C++ EH handlers were outlined. // When that code is complete, it should always return whatever @@ -395,12 +366,10 @@ bool WinEHPrepare::runOnFunction(Function &Fn) { } bool WinEHPrepare::doFinalization(Module &M) { - return DwarfPrepare->doFinalization(M); + return false; } -void WinEHPrepare::getAnalysisUsage(AnalysisUsage &AU) const { - DwarfPrepare->getAnalysisUsage(AU); -} +void WinEHPrepare::getAnalysisUsage(AnalysisUsage &AU) const {} bool WinEHPrepare::prepareCPPEHHandlers( Function &F, SmallVectorImpl<LandingPadInst *> &LPads) { |

