forked from OSchip/llvm-project
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:
parent
8c19a8b5d5
commit
a8f04e3034
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue