Add some helpful methods for dealing with switch instructions

llvm-svn: 11794
This commit is contained in:
Chris Lattner 2004-02-24 06:26:00 +00:00
parent 3cd98f054a
commit c7f8ba9f4f
1 changed files with 30 additions and 0 deletions

View File

@ -178,6 +178,36 @@ public:
return cast<BasicBlock>(Operands[1].get());
}
/// getNumCases - return the number of 'cases' in this switch instruction.
/// Note that case #0 is always the default case.
unsigned getNumCases() const {
return Operands.size()/2;
}
/// getCaseValue - Return the specified case value. Note that case #0, the
/// default destination, does not have a case value.
Constant *getCaseValue(unsigned i) {
assert(i && i < getNumCases() && "Illegal case value to get!");
return getSuccessorValue(i);
}
/// getCaseValue - Return the specified case value. Note that case #0, the
/// default destination, does not have a case value.
const Constant *getCaseValue(unsigned i) const {
assert(i && i < getNumCases() && "Illegal case value to get!");
return getSuccessorValue(i);
}
/// findCaseValue - Search all of the case values for the specified constant.
/// If it is explicitly handled, return the case number of it, otherwise
/// return 0 to indicate that it is handled by the default handler.
unsigned findCaseValue(const Constant *C) const {
for (unsigned i = 1, e = getNumCases(); i != e; ++i)
if (getCaseValue(i) == C)
return i;
return 0;
}
/// addCase - Add an entry to the switch instruction...
///
void addCase(Constant *OnVal, BasicBlock *Dest);