aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2013-03-21 23:01:03 +0000
committerBill Wendling <isanbard@gmail.com>2013-03-21 23:01:03 +0000
commit8233050895f781befc1d4165435d0fff605b6b70 (patch)
tree98a69b40b23cf475ad5bd9f31ea12572ccb16616
parentced228dec30f088367d622720d6ccf7a22cd11e4 (diff)
Add a query to tell if a landing pad has a catch-all.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177675 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/IR/Instructions.h3
-rw-r--r--lib/IR/Instructions.cpp7
2 files changed, 10 insertions, 0 deletions
diff --git a/include/llvm/IR/Instructions.h b/include/llvm/IR/Instructions.h
index 7e29699f73..5dbca52e82 100644
--- a/include/llvm/IR/Instructions.h
+++ b/include/llvm/IR/Instructions.h
@@ -2230,6 +2230,9 @@ public:
/// to determine what type of clause this is.
Value *getClause(unsigned Idx) const { return OperandList[Idx + 1]; }
+ /// hasCatchAll - Return 'true' if this landing pad has a catch-all.
+ bool hasCatchAll() const;
+
/// isCatch - Return 'true' if the clause and index Idx is a catch clause.
bool isCatch(unsigned Idx) const {
return !isa<ArrayType>(OperandList[Idx + 1]->getType());
diff --git a/lib/IR/Instructions.cpp b/lib/IR/Instructions.cpp
index d58877ef77..841cc5926a 100644
--- a/lib/IR/Instructions.cpp
+++ b/lib/IR/Instructions.cpp
@@ -256,6 +256,13 @@ void LandingPadInst::addClause(Value *Val) {
OperandList[OpNo] = Val;
}
+bool LandingPadInst::hasCatchAll() const {
+ for (unsigned I = 0, E = getNumClauses(); I != E; ++I)
+ if (isCatch(I) && isa<ConstantPointerNull>(getClause(I)))
+ return true;
+ return false;
+}
+
//===----------------------------------------------------------------------===//
// CallInst Implementation
//===----------------------------------------------------------------------===//