diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-03-21 23:01:03 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-03-21 23:01:03 +0000 |
commit | 8233050895f781befc1d4165435d0fff605b6b70 (patch) | |
tree | 98a69b40b23cf475ad5bd9f31ea12572ccb16616 | |
parent | ced228dec30f088367d622720d6ccf7a22cd11e4 (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.h | 3 | ||||
-rw-r--r-- | lib/IR/Instructions.cpp | 7 |
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 //===----------------------------------------------------------------------===// |