mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 06:25:18 +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:
@@ -2437,34 +2437,27 @@ private:
|
||||
return User::operator new(s);
|
||||
}
|
||||
void growOperands(unsigned Size);
|
||||
void init(Value *PersFn, unsigned NumReservedValues, const Twine &NameStr);
|
||||
void init(unsigned NumReservedValues, const Twine &NameStr);
|
||||
|
||||
explicit LandingPadInst(Type *RetTy, unsigned NumReservedValues,
|
||||
const Twine &NameStr, Instruction *InsertBefore);
|
||||
explicit LandingPadInst(Type *RetTy, unsigned NumReservedValues,
|
||||
const Twine &NameStr, BasicBlock *InsertAtEnd);
|
||||
|
||||
explicit LandingPadInst(Type *RetTy, Value *PersonalityFn,
|
||||
unsigned NumReservedValues, const Twine &NameStr,
|
||||
Instruction *InsertBefore);
|
||||
explicit LandingPadInst(Type *RetTy, Value *PersonalityFn,
|
||||
unsigned NumReservedValues, const Twine &NameStr,
|
||||
BasicBlock *InsertAtEnd);
|
||||
protected:
|
||||
LandingPadInst *clone_impl() const override;
|
||||
public:
|
||||
/// Constructors - NumReservedClauses is a hint for the number of incoming
|
||||
/// clauses that this landingpad will have (use 0 if you really have no idea).
|
||||
static LandingPadInst *Create(Type *RetTy, Value *PersonalityFn,
|
||||
unsigned NumReservedClauses,
|
||||
static LandingPadInst *Create(Type *RetTy, unsigned NumReservedClauses,
|
||||
const Twine &NameStr = "",
|
||||
Instruction *InsertBefore = nullptr);
|
||||
static LandingPadInst *Create(Type *RetTy, Value *PersonalityFn,
|
||||
unsigned NumReservedClauses,
|
||||
static LandingPadInst *Create(Type *RetTy, unsigned NumReservedClauses,
|
||||
const Twine &NameStr, BasicBlock *InsertAtEnd);
|
||||
|
||||
/// Provide fast operand accessors
|
||||
DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
|
||||
|
||||
/// getPersonalityFn - Get the personality function associated with this
|
||||
/// landing pad.
|
||||
Value *getPersonalityFn() const { return getOperand(0); }
|
||||
|
||||
/// isCleanup - Return 'true' if this landingpad instruction is a
|
||||
/// cleanup. I.e., it should be run when unwinding even if its landing pad
|
||||
/// doesn't catch the exception.
|
||||
@@ -2482,21 +2475,21 @@ public:
|
||||
/// Get the value of the clause at index Idx. Use isCatch/isFilter to
|
||||
/// determine what type of clause this is.
|
||||
Constant *getClause(unsigned Idx) const {
|
||||
return cast<Constant>(getOperandList()[Idx + 1]);
|
||||
return cast<Constant>(getOperandList()[Idx]);
|
||||
}
|
||||
|
||||
/// isCatch - Return 'true' if the clause and index Idx is a catch clause.
|
||||
bool isCatch(unsigned Idx) const {
|
||||
return !isa<ArrayType>(getOperandList()[Idx + 1]->getType());
|
||||
return !isa<ArrayType>(getOperandList()[Idx]->getType());
|
||||
}
|
||||
|
||||
/// isFilter - Return 'true' if the clause and index Idx is a filter clause.
|
||||
bool isFilter(unsigned Idx) const {
|
||||
return isa<ArrayType>(getOperandList()[Idx + 1]->getType());
|
||||
return isa<ArrayType>(getOperandList()[Idx]->getType());
|
||||
}
|
||||
|
||||
/// getNumClauses - Get the number of clauses for this landing pad.
|
||||
unsigned getNumClauses() const { return getNumOperands() - 1; }
|
||||
unsigned getNumClauses() const { return getNumOperands(); }
|
||||
|
||||
/// reserveClauses - Grow the size of the operand list to accommodate the new
|
||||
/// number of clauses.
|
||||
@@ -2512,7 +2505,7 @@ public:
|
||||
};
|
||||
|
||||
template <>
|
||||
struct OperandTraits<LandingPadInst> : public HungoffOperandTraits<2> {
|
||||
struct OperandTraits<LandingPadInst> : public HungoffOperandTraits<1> {
|
||||
};
|
||||
|
||||
DEFINE_TRANSPARENT_OPERAND_ACCESSORS(LandingPadInst, Value)
|
||||
|
Reference in New Issue
Block a user