Add a couple of convenience functions:

* InvokeInst: Get the landingpad instruction associated with this invoke.
* LandingPadInst: A method to reserve extra space for clauses.

llvm-svn: 136325
This commit is contained in:
Bill Wendling 2011-07-28 02:15:52 +00:00
parent 8c19a8b5d5
commit a8f04e3034
2 changed files with 25 additions and 0 deletions

View File

@ -1870,6 +1870,10 @@ public:
/// getNumClauses - Get the number of clauses for this landing pad.
unsigned getNumClauses() const { return getNumOperands() - 1; }
/// reserveClauses - Grow the size of the operand list to accomodate the new
/// number of clauses.
void reserveClauses(unsigned Size);
// Methods for support type inquiry through isa, cast, and dyn_cast:
static inline bool classof(const LandingPadInst *) { return true; }
static inline bool classof(const Instruction *I) {
@ -2474,6 +2478,10 @@ public:
Op<-1>() = reinterpret_cast<Value*>(B);
}
// getLandingPad - Get the landingpad instruction from the landing pad block
// (the unwind destination).
LandingPadInst *getLandingPad() const;
BasicBlock *getSuccessor(unsigned i) const {
assert(i < 2 && "Successor # out of range for invoke!");
return i == 0 ? getNormalDest() : getUnwindDest();

View File

@ -214,6 +214,20 @@ void LandingPadInst::growOperands() {
Use::zap(OldOps, OldOps + e, true);
}
void LandingPadInst::reserveClauses(unsigned Size) {
unsigned e = getNumOperands() + Size;
if (ReservedSpace >= e) return;
ReservedSpace = e;
Use *NewOps = allocHungoffUses(ReservedSpace);
Use *OldOps = OperandList;
for (unsigned i = 0; i != e; ++i)
NewOps[i] = OldOps[i];
OperandList = NewOps;
Use::zap(OldOps, OldOps + e, true);
}
void LandingPadInst::addClause(ClauseType CT, Value *ClauseVal) {
unsigned OpNo = getNumOperands();
if (OpNo + 1 > ReservedSpace)
@ -551,6 +565,9 @@ void InvokeInst::removeAttribute(unsigned i, Attributes attr) {
setAttributes(PAL);
}
LandingPadInst *InvokeInst::getLandingPad() const {
return cast<LandingPadInst>(getUnwindDest()->getFirstNonPHI());
}
//===----------------------------------------------------------------------===//
// ReturnInst Implementation