mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-28 06:24:57 +00:00
Move the personality function from LandingPadInst to Function
The personality routine currently lives in the LandingPadInst. This isn't desirable because: - All LandingPadInsts in the same function must have the same personality routine. This means that each LandingPadInst beyond the first has an operand which produces no additional information. - There is ongoing work to introduce EH IR constructs other than LandingPadInst. Moving the personality routine off of any one particular Instruction and onto the parent function seems a lot better than have N different places a personality function can sneak onto an exceptional function. Differential Revision: http://reviews.llvm.org/D10429 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239940 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1173,10 +1173,11 @@ static void changeToCall(InvokeInst *II) {
|
||||
II->eraseFromParent();
|
||||
}
|
||||
|
||||
static bool markAliveBlocks(BasicBlock *BB,
|
||||
static bool markAliveBlocks(Function &F,
|
||||
SmallPtrSetImpl<BasicBlock*> &Reachable) {
|
||||
|
||||
SmallVector<BasicBlock*, 128> Worklist;
|
||||
BasicBlock *BB = F.begin();
|
||||
Worklist.push_back(BB);
|
||||
Reachable.insert(BB);
|
||||
bool Changed = false;
|
||||
@ -1247,7 +1248,7 @@ static bool markAliveBlocks(BasicBlock *BB,
|
||||
if (isa<ConstantPointerNull>(Callee) || isa<UndefValue>(Callee)) {
|
||||
changeToUnreachable(II, true);
|
||||
Changed = true;
|
||||
} else if (II->doesNotThrow() && canSimplifyInvokeNoUnwind(II)) {
|
||||
} else if (II->doesNotThrow() && canSimplifyInvokeNoUnwind(&F)) {
|
||||
if (II->use_empty() && II->onlyReadsMemory()) {
|
||||
// jump to the normal destination branch.
|
||||
BranchInst::Create(II->getNormalDest(), II);
|
||||
@ -1272,7 +1273,7 @@ static bool markAliveBlocks(BasicBlock *BB,
|
||||
/// otherwise.
|
||||
bool llvm::removeUnreachableBlocks(Function &F) {
|
||||
SmallPtrSet<BasicBlock*, 128> Reachable;
|
||||
bool Changed = markAliveBlocks(F.begin(), Reachable);
|
||||
bool Changed = markAliveBlocks(F, Reachable);
|
||||
|
||||
// If there are unreachable blocks in the CFG...
|
||||
if (Reachable.size() == F.size())
|
||||
|
Reference in New Issue
Block a user