Remove the eh.exception and eh.selector intrinsics. Also remove a hack to copy

over the catch information. The catch information is now tacked to the invoke
instruction.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149326 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Bill Wendling 2012-01-31 01:46:13 +00:00
parent 08d01462d1
commit 9a5c0e8d93
5 changed files with 0 additions and 88 deletions

View File

@ -481,8 +481,6 @@ LLVMTypeRef LLVMX86MMXType(void);
macro(IntrinsicInst) \
macro(DbgInfoIntrinsic) \
macro(DbgDeclareInst) \
macro(EHExceptionInst) \
macro(EHSelectorInst) \
macro(MemIntrinsic) \
macro(MemCpyInst) \
macro(MemMoveInst) \

View File

@ -216,11 +216,6 @@ private:
void AddCatchInfo(const CallInst &I,
MachineModuleInfo *MMI, MachineBasicBlock *MBB);
/// CopyCatchInfo - Copy catch information from SuccBB (or one of its
/// successors) to LPad.
void CopyCatchInfo(const BasicBlock *SuccBB, const BasicBlock *LPad,
MachineModuleInfo *MMI, FunctionLoweringInfo &FLI);
/// AddLandingPadInfo - Extract the exception handling information from the
/// landingpad instruction and add them to the specified machine module info.
void AddLandingPadInfo(const LandingPadInst &I, MachineModuleInfo &MMI,

View File

@ -277,34 +277,6 @@ namespace llvm {
}
};
/// EHExceptionInst - This represents the llvm.eh.exception instruction.
///
class EHExceptionInst : public IntrinsicInst {
public:
// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const EHExceptionInst *) { return true; }
static inline bool classof(const IntrinsicInst *I) {
return I->getIntrinsicID() == Intrinsic::eh_exception;
}
static inline bool classof(const Value *V) {
return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
}
};
/// EHSelectorInst - This represents the llvm.eh.selector instruction.
///
class EHSelectorInst : public IntrinsicInst {
public:
// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const EHSelectorInst *) { return true; }
static inline bool classof(const IntrinsicInst *I) {
return I->getIntrinsicID() == Intrinsic::eh_selector;
}
static inline bool classof(const Value *V) {
return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
}
};
}
#endif

View File

@ -425,34 +425,6 @@ void llvm::AddCatchInfo(const CallInst &I, MachineModuleInfo *MMI,
}
}
void llvm::CopyCatchInfo(const BasicBlock *SuccBB, const BasicBlock *LPad,
MachineModuleInfo *MMI, FunctionLoweringInfo &FLI) {
SmallPtrSet<const BasicBlock*, 4> Visited;
// The 'eh.selector' call may not be in the direct successor of a basic block,
// but could be several successors deeper. If we don't find it, try going one
// level further. <rdar://problem/8824861>
while (Visited.insert(SuccBB)) {
for (BasicBlock::const_iterator I = SuccBB->begin(), E = --SuccBB->end();
I != E; ++I)
if (const EHSelectorInst *EHSel = dyn_cast<EHSelectorInst>(I)) {
// Apply the catch info to LPad.
AddCatchInfo(*EHSel, MMI, FLI.MBBMap[LPad]);
#ifndef NDEBUG
if (!FLI.MBBMap[SuccBB]->isLandingPad())
FLI.CatchInfoFound.insert(EHSel);
#endif
return;
}
const BranchInst *Br = dyn_cast<BranchInst>(SuccBB->getTerminator());
if (Br && Br->isUnconditional())
SuccBB = Br->getSuccessor(0);
else
break;
}
}
/// AddLandingPadInfo - Extract the exception handling information from the
/// landingpad instruction and add them to the specified machine module info.
void llvm::AddLandingPadInfo(const LandingPadInst &I, MachineModuleInfo &MMI,

View File

@ -785,31 +785,6 @@ void SelectionDAGISel::PrepareEHLandingPad() {
// Mark exception selector register as live in.
Reg = TLI.getExceptionSelectorRegister();
if (Reg) MBB->addLiveIn(Reg);
// FIXME: Hack around an exception handling flaw (PR1508): the personality
// function and list of typeids logically belong to the invoke (or, if you
// like, the basic block containing the invoke), and need to be associated
// with it in the dwarf exception handling tables. Currently however the
// information is provided by an intrinsic (eh.selector) that can be moved
// to unexpected places by the optimizers: if the unwind edge is critical,
// then breaking it can result in the intrinsics being in the successor of
// the landing pad, not the landing pad itself. This results
// in exceptions not being caught because no typeids are associated with
// the invoke. This may not be the only way things can go wrong, but it
// is the only way we try to work around for the moment.
const BasicBlock *LLVMBB = MBB->getBasicBlock();
const BranchInst *Br = dyn_cast<BranchInst>(LLVMBB->getTerminator());
if (Br && Br->isUnconditional()) { // Critical edge?
BasicBlock::const_iterator I, E;
for (I = LLVMBB->begin(), E = --LLVMBB->end(); I != E; ++I)
if (isa<EHSelectorInst>(I))
break;
if (I == E)
// No catch info found - try to extract some from the successor.
CopyCatchInfo(Br->getSuccessor(0), LLVMBB, &MF->getMMI(), *FuncInfo);
}
}
/// TryToFoldFastISelLoad - We're checking to see if we can fold the specified