Add a couple of extra casts to avoid extra #include
[oota-llvm.git] / lib / VMCore / iSwitch.cpp
index 2a1eec263911d69038a376ef0d13aab70e933fb8..cd3079afa7e7ae40c30f75568fd0fce71b6291d0 100644 (file)
 #include "llvm/Type.h"
 #endif
 
-SwitchInst::SwitchInst(Value *V, BasicBlock *DefV) 
-  : TerminatorInst(Instruction::Switch), 
-    DefaultDest(DefV, this), Val(V, this) {
-  assert(Val && DefV);
+SwitchInst::SwitchInst(Value *V, BasicBlock *DefDest) 
+  : TerminatorInst(Instruction::Switch) {
+  assert(V && DefDest);
+  Operands.push_back(Use(V, this));
+  Operands.push_back(Use(DefDest, this));
 }
 
 SwitchInst::SwitchInst(const SwitchInst &SI) 
-  : TerminatorInst(Instruction::Switch), DefaultDest(SI.DefaultDest), 
-    Val(SI.Val) {
+  : TerminatorInst(Instruction::Switch) {
+  Operands.reserve(SI.Operands.size());
 
-  for (dest_const_iterator I = SI.Destinations.begin(), 
-                        end = SI.Destinations.end(); I != end; ++I)
-    Destinations.push_back(dest_value(ConstPoolUse(I->first, this), 
-                                     BasicBlockUse(I->second, this)));
-}
-
-
-void SwitchInst::dest_push_back(ConstPoolVal *OnVal, BasicBlock *Dest) {
-  Destinations.push_back(dest_value(ConstPoolUse(OnVal, this), 
-                                    BasicBlockUse(Dest, this)));
-}
-
-void SwitchInst::dropAllReferences() {
-  Val = 0;
-  DefaultDest = 0;
-  Destinations.clear();
-}
-
-const BasicBlock *SwitchInst::getSuccessor(unsigned idx) const {
-  if (idx == 0) return DefaultDest;
-  if (idx > Destinations.size()) return 0;
-  return Destinations[idx-1].second;
-}
-
-unsigned SwitchInst::getNumOperands() const {
-  return 2+Destinations.size();
-}
-
-const Value *SwitchInst::getOperand(unsigned i) const {
-  if (i == 0) return Val;
-  else if (i == 1) return DefaultDest;
-
-  unsigned slot = (i-2) >> 1;
-  if (slot >= Destinations.size()) return 0;
-  
-  if (i & 1) return Destinations[slot].second;
-  return Destinations[slot].first;
-}
-
-bool SwitchInst::setOperand(unsigned i, Value *V) {
-  if (i == 0) { Val = V; return true; }
-  else if (i == 1) { 
-    assert(V->getType() == Type::LabelTy); 
-    DefaultDest = (BasicBlock*)V;
-    return true; 
+  for (unsigned i = 0, E = SI.Operands.size(); i != E; i+=2) {
+    Operands.push_back(Use(SI.Operands[i], this));
+    Operands.push_back(Use(SI.Operands[i+1], this));
   }
+}
 
-  unsigned slot = (i-2) >> 1;
-  if (slot >= Destinations.size()) return 0;
-
-  if (i & 1) {
-    assert(V->getType() == Type::LabelTy);
-    Destinations[slot].second = (BasicBlock*)V;
-  } else {
-    // TODO: assert constant
-    Destinations[slot].first = (ConstPoolVal*)V;
-  }
-  return true;
+void SwitchInst::dest_push_back(Constant *OnVal, BasicBlock *Dest) {
+  Operands.push_back(Use((Value*)OnVal, this));
+  Operands.push_back(Use((Value*)Dest, this));
 }