mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 05:24:01 +00:00
Stop calling DwarfEHPrepare from WinEHPrepare
Instead, run both EH preparation passes, and have them both ignore functions with unrecognized EH personalities. Pass delegation involved some hacky code for creating an AnalysisResolver that we don't need now. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231995 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -16,6 +16,7 @@
|
||||
#include "llvm/ADT/BitVector.h"
|
||||
#include "llvm/ADT/Statistic.h"
|
||||
#include "llvm/Analysis/CFG.h"
|
||||
#include "llvm/Analysis/LibCallSemantics.h"
|
||||
#include "llvm/Analysis/TargetTransformInfo.h"
|
||||
#include "llvm/IR/Dominators.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
@ -180,12 +181,22 @@ size_t DwarfEHPrepare::pruneUnreachableResumes(
|
||||
bool DwarfEHPrepare::InsertUnwindResumeCalls(Function &Fn) {
|
||||
SmallVector<ResumeInst*, 16> Resumes;
|
||||
SmallVector<LandingPadInst*, 16> CleanupLPads;
|
||||
bool FoundLP = false;
|
||||
for (BasicBlock &BB : Fn) {
|
||||
if (auto *RI = dyn_cast<ResumeInst>(BB.getTerminator()))
|
||||
Resumes.push_back(RI);
|
||||
if (auto *LP = BB.getLandingPadInst())
|
||||
if (auto *LP = BB.getLandingPadInst()) {
|
||||
if (LP->isCleanup())
|
||||
CleanupLPads.push_back(LP);
|
||||
// Check the personality on the first landingpad. Don't do anything if
|
||||
// it's for MSVC.
|
||||
if (!FoundLP) {
|
||||
FoundLP = true;
|
||||
EHPersonality Pers = classifyEHPersonality(LP->getPersonalityFn());
|
||||
if (isMSVCEHPersonality(Pers))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Resumes.empty())
|
||||
|
Reference in New Issue
Block a user