mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-04 21:31:03 +00:00
When lowering the 'resume' instruction, look to see if we can eliminate the
'insertvalue' instructions that recreate the structure returned by the 'landingpad' instruction. Because the 'insertvalue' instruction isn't supported by FastISel, this can save a bit of time during -O0 compilation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148520 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9a2478ac1a
commit
b618ea5ff9
@ -101,10 +101,40 @@ bool DwarfEHPrepare::InsertUnwindResumeCalls(Function &Fn) {
|
||||
I = Resumes.begin(), E = Resumes.end(); I != E; ++I) {
|
||||
ResumeInst *RI = *I;
|
||||
BranchInst::Create(UnwindBB, RI->getParent());
|
||||
ExtractValueInst *ExnObj = ExtractValueInst::Create(RI->getOperand(0),
|
||||
0, "exn.obj", RI);
|
||||
|
||||
Value *V = RI->getOperand(0);
|
||||
Instruction *ExnObj = 0;
|
||||
InsertValueInst *SelIVI = dyn_cast<InsertValueInst>(V);
|
||||
LoadInst *SelLoad = 0;
|
||||
InsertValueInst *ExcIVI = 0;
|
||||
bool EraseIVIs = false;
|
||||
if (SelIVI) {
|
||||
if (SelIVI->getNumIndices() == 1 && *SelIVI->idx_begin() == 1) {
|
||||
ExcIVI = dyn_cast<InsertValueInst>(SelIVI->getOperand(0));
|
||||
if (ExcIVI && isa<UndefValue>(ExcIVI->getOperand(0)) &&
|
||||
ExcIVI->getNumIndices() == 1 && *ExcIVI->idx_begin() == 0) {
|
||||
ExnObj = cast<Instruction>(ExcIVI->getOperand(1));
|
||||
SelLoad = dyn_cast<LoadInst>(SelIVI->getOperand(1));
|
||||
EraseIVIs = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!ExnObj)
|
||||
ExnObj = ExtractValueInst::Create(RI->getOperand(0), 0, "exn.obj", RI);
|
||||
|
||||
PN->addIncoming(ExnObj, RI->getParent());
|
||||
RI->eraseFromParent();
|
||||
|
||||
if (EraseIVIs) {
|
||||
if (SelIVI->getNumUses() == 0)
|
||||
SelIVI->eraseFromParent();
|
||||
if (ExcIVI->getNumUses() == 0)
|
||||
ExcIVI->eraseFromParent();
|
||||
if (SelLoad && SelLoad->getNumUses() == 0)
|
||||
SelLoad->eraseFromParent();
|
||||
}
|
||||
|
||||
++NumResumesLowered;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user