From d1a326006df65470217b9f2f23a4cee2a9696646 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 24 Feb 2005 05:32:09 +0000 Subject: [PATCH 1/1] switch instructions only allow constantints for their values, be more specific. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20298 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Instructions.h | 15 ++++++++------- lib/VMCore/Instructions.cpp | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index eb4188b384c..0eaba874d6c 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -22,6 +22,7 @@ namespace llvm { class BasicBlock; +class ConstantInt; class PointerType; //===----------------------------------------------------------------------===// @@ -1084,14 +1085,14 @@ public: /// getCaseValue - Return the specified case value. Note that case #0, the /// default destination, does not have a case value. - Constant *getCaseValue(unsigned i) { + ConstantInt *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 { + const ConstantInt *getCaseValue(unsigned i) const { assert(i && i < getNumCases() && "Illegal case value to get!"); return getSuccessorValue(i); } @@ -1099,7 +1100,7 @@ public: /// 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 { + unsigned findCaseValue(const ConstantInt *C) const { for (unsigned i = 1, e = getNumCases(); i != e; ++i) if (getCaseValue(i) == C) return i; @@ -1108,7 +1109,7 @@ public: /// addCase - Add an entry to the switch instruction... /// - void addCase(Constant *OnVal, BasicBlock *Dest); + void addCase(ConstantInt *OnVal, BasicBlock *Dest); /// removeCase - This method removes the specified successor from the switch /// instruction. Note that this cannot be used to remove the default @@ -1130,15 +1131,15 @@ public: // getSuccessorValue - Return the value associated with the specified // successor. - inline Constant *getSuccessorValue(unsigned idx) const { + inline ConstantInt *getSuccessorValue(unsigned idx) const { assert(idx < getNumSuccessors() && "Successor # out of range!"); - return cast(getOperand(idx*2)); + return (ConstantInt*)getOperand(idx*2); } // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const SwitchInst *) { return true; } static inline bool classof(const Instruction *I) { - return (I->getOpcode() == Instruction::Switch); + return I->getOpcode() == Instruction::Switch; } static inline bool classof(const Value *V) { return isa(V) && classof(cast(V)); diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index 73183a344bd..bc1bfcccf1a 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -948,7 +948,7 @@ SwitchInst::~SwitchInst() { /// addCase - Add an entry to the switch instruction... /// -void SwitchInst::addCase(Constant *OnVal, BasicBlock *Dest) { +void SwitchInst::addCase(ConstantInt *OnVal, BasicBlock *Dest) { unsigned OpNo = NumOperands; if (OpNo+2 > ReservedSpace) resizeOperands(0); // Get more space! -- 2.34.1