Add more support for new style casts
authorChris Lattner <sabre@nondot.org>
Mon, 1 Oct 2001 18:26:53 +0000 (18:26 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 1 Oct 2001 18:26:53 +0000 (18:26 +0000)
Convert more code to use them

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@695 91177308-0d34-0410-b5e6-96231b3b80d8

23 files changed:
include/llvm/Analysis/ConstantsScanner.h
include/llvm/Analysis/InstForest.h
include/llvm/Assembly/Writer.h
include/llvm/DerivedTypes.h
include/llvm/GlobalVariable.h
include/llvm/SymbolTable.h
include/llvm/Type.h
include/llvm/Value.h
include/llvm/iTerminators.h
lib/Analysis/Expressions.cpp
lib/AsmParser/llvmAsmParser.y
lib/Bytecode/Reader/ConstantReader.cpp
lib/Bytecode/Reader/Reader.cpp
lib/Bytecode/Writer/SlotCalculator.cpp
lib/Bytecode/Writer/Writer.cpp
lib/Target/SparcV9/SparcV9InstrSelection.cpp
lib/Target/TargetData.cpp
lib/Transforms/Scalar/SymbolStripping.cpp
lib/VMCore/AsmWriter.cpp
lib/VMCore/ConstPoolVals.cpp
lib/VMCore/ConstantFold.cpp
lib/VMCore/SlotCalculator.cpp
lib/VMCore/SymbolTable.cpp

index 3a496c3130262b5dd97b5384d70c51d4db92e585..cbf976573e0768e15eb10957b2018970092a1cef 100644 (file)
@@ -45,7 +45,7 @@ public:
 
   inline pointer operator*() const {
     assert(isAtConstant() && "Dereferenced an iterator at the end!");
-    return InstI->getOperand(OpIdx)->castConstantAsserting();
+    return cast<ConstPoolVal>(InstI->getOperand(OpIdx));
   }
   inline pointer operator->() const { return operator*(); }
 
index fd9677d961d92c471f18b9cf3e96da912cf703e7..eac08f91e580b0ab53d0e4893d0c484d70934375 100644 (file)
@@ -20,8 +20,8 @@
 
 namespace analysis {
 
-template <class Payload> class InstTreeNode;
-template<class Payload>  class InstForest;
+template<class Payload> class InstTreeNode;
+template<class Payload> class InstForest;
 
 
 //===----------------------------------------------------------------------===//
@@ -74,10 +74,10 @@ public:
 
   // Accessors for different node types...
   inline ConstPoolVal *getConstant() {
-    return getValue()->castConstantAsserting();
+    return cast<ConstPoolVal>(getValue());
   }
   inline const ConstPoolVal *getConstant() const {
-    return getValue()->castConstantAsserting();
+    return cast<const ConstPoolVal>(getValue());
   }
   inline BasicBlock *getBasicBlock() {
     return cast<BasicBlock>(getValue());
@@ -230,12 +230,12 @@ InstTreeNode<Payload>::InstTreeNode(InstForest<Payload> &IF, Value *V,
   getTreeData().first.first = V;   // Save tree node
  
   if (!V->isInstruction()) {
-    assert((V->isConstant() || V->isBasicBlock() ||
-           V->isMethodArgument() || V->isGlobal()) &&
+    assert((isa<ConstPoolVal>(V) || isa<BasicBlock>(V) ||
+           isa<MethodArgument>(V) || isa<GlobalVariable>(V)) &&
           "Unrecognized value type for InstForest Partition!");
-    if (V->isConstant())
+    if (isa<ConstPoolVal>(V))
       getTreeData().first.second = ConstNode;
-    else if (V->isBasicBlock())
+    else if (isa<BasicBlock>(V))
       getTreeData().first.second = BasicBlockNode;
     else 
       getTreeData().first.second = TemporaryNode;
index aa207604a22a7c7f8422847da3cbd235c78996b1..39b0cb6cfb50fe354bf07c1c9a7700fb74b35de7 100644 (file)
@@ -91,7 +91,7 @@ inline ostream &operator<<(ostream &o, const Type *T) {
 
 inline ostream &operator<<(ostream &o, const Value *I) {
   switch (I->getValueType()) {
-  case Value::TypeVal:       return o << I->castTypeAsserting();
+  case Value::TypeVal:       return o << cast<const Type>(I);
   case Value::ConstantVal:   WriteToAssembly((const ConstPoolVal*)I,o);break;
   case Value::MethodArgumentVal: return o << I->getType() << " "<< I->getName();
   case Value::InstructionVal:WriteToAssembly((const Instruction *)I, o);break;
index 4bc4f0ddb867e91e0111a4f5471ee201b8cc87b6..5a51e64339b62fd2142513e4dd6241cf4cbde722 100644 (file)
@@ -78,6 +78,15 @@ public:
   // type NewType and for 'this' to be deleted.
   //
   void refineAbstractTypeTo(const Type *NewType);
+
+  // Methods for support type inquiry through isa, cast, and dyn_cast:
+  static inline bool isa(const DerivedType *T) { return true; }
+  static inline bool isa(const Type *T) {
+    return T->isDerivedType();
+  }
+  static inline bool isa(const Value *V) {
+    return ::isa<Type>(V) && isa(cast<const Type>(V));
+  }
 };
 
 
@@ -129,7 +138,7 @@ public:
     return T->getPrimitiveID() == MethodTyID;
   }
   static inline bool isa(const Value *V) {
-    return ::isa<Type>(V) && MethodType::isa(cast<const Type>(V));
+    return ::isa<Type>(V) && isa(cast<const Type>(V));
   }
 };
 
@@ -170,6 +179,15 @@ public:
   virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy);
 
   static ArrayType *get(const Type *ElementType, int NumElements = -1);
+
+  // Methods for support type inquiry through isa, cast, and dyn_cast:
+  static inline bool isa(const ArrayType *T) { return true; }
+  static inline bool isa(const Type *T) {
+    return T->getPrimitiveID() == ArrayTyID;
+  }
+  static inline bool isa(const Value *V) {
+    return ::isa<Type>(V) && isa(cast<const Type>(V));
+  }
 };
 
 
@@ -206,6 +224,15 @@ public:
   virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy);
 
   static StructType *get(const vector<const Type*> &Params);
+
+  // Methods for support type inquiry through isa, cast, and dyn_cast:
+  static inline bool isa(const StructType *T) { return true; }
+  static inline bool isa(const Type *T) {
+    return T->getPrimitiveID() == StructTyID;
+  }
+  static inline bool isa(const Value *V) {
+    return ::isa<Type>(V) && isa(cast<const Type>(V));
+  }
 };
 
 
@@ -240,6 +267,15 @@ public:
   // concrete type.
   //
   virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy);
+
+  // Methods for support type inquiry through isa, cast, and dyn_cast:
+  static inline bool isa(const PointerType *T) { return true; }
+  static inline bool isa(const Type *T) {
+    return T->getPrimitiveID() == PointerTyID;
+  }
+  static inline bool isa(const Value *V) {
+    return ::isa<Type>(V) && isa(cast<const Type>(V));
+  }
 };
 
 
@@ -261,6 +297,15 @@ public:
   static OpaqueType *get() {
     return new OpaqueType();           // All opaque types are distinct
   }
+
+  // Methods for support type inquiry through isa, cast, and dyn_cast:
+  static inline bool isa(const OpaqueType *T) { return true; }
+  static inline bool isa(const Type *T) {
+    return T->getPrimitiveID() == OpaqueTyID;
+  }
+  static inline bool isa(const Value *V) {
+    return ::isa<Type>(V) && isa(cast<const Type>(V));
+  }
 };
 
 
@@ -272,11 +317,11 @@ public:
 //
 template <class TypeSubClass> void PATypeHandle<TypeSubClass>::addUser() {
   if (Ty->isAbstract())
-    Ty->castDerivedTypeAsserting()->addAbstractTypeUser(User);
+    cast<DerivedType>(Ty)->addAbstractTypeUser(User);
 }
 template <class TypeSubClass> void PATypeHandle<TypeSubClass>::removeUser() {
   if (Ty->isAbstract())
-    Ty->castDerivedTypeAsserting()->removeAbstractTypeUser(User);
+    cast<DerivedType>(Ty)->removeAbstractTypeUser(User);
 }
 
 #endif
index 4ee1df9c7258474dbaf576a17c36e0bbbb4301ae..f301844bd72df859eb059b6c3556fdf6677807fd 100644 (file)
@@ -46,10 +46,10 @@ public:
   //
   inline bool hasInitializer() const { return !Operands.empty(); }
   inline const ConstPoolVal *getInitializer() const {
-    return Operands[0]->castConstantAsserting();
+    return (const ConstPoolVal*)Operands[0].get();
   }
   inline ConstPoolVal *getInitializer() {
-    return Operands[0]->castConstantAsserting();
+    return (ConstPoolVal*)Operands[0].get();
   }
   inline void setInitializer(ConstPoolVal *CPV) { Operands[0] = (Value*)CPV; }
 
@@ -59,6 +59,12 @@ public:
   // leads to undefined behavior.
   //
   inline bool isConstant() const { return Constant; }
+
+  // Methods for support type inquiry through isa, cast, and dyn_cast:
+  static inline bool isa(const GlobalVariable *) { return true; }
+  static inline bool isa(const Value *V) {
+    return V->getValueType() == Value::GlobalVal;
+  }
 };
 
 #endif
index 18ccf136c0c8215255578b3837e4a5664c3781cf..bae9eb148122f345e5ccc23d567b55a0669476a8 100644 (file)
 #include "llvm/Value.h"
 #include <map>
 
+#ifndef NDEBUG             // Only for assertions
+#include "llvm/Type.h"
+#include "llvm/ConstPoolVals.h"
+#endif
+
 class Value;
 class Type;
 
@@ -63,7 +68,7 @@ public:
   // (constant/type)s.
   //
   inline void insert(const string &Name, Value *V) {
-    assert((V->isType() || V->isConstant()) &&
+    assert((isa<Type>(V) || isa<ConstPoolVal>(V)) &&
           "Can only insert types and constants here!");
     insertEntry(Name, V);
   }
index 2a43153acd0d223bf739863b45cb0d298aef31a6..687b12afb050749349c2e3040e92933fee644282 100644 (file)
@@ -187,13 +187,6 @@ public:
   inline bool isPrimitiveType() const { return ID < FirstDerivedTyID;  }
 
   inline bool isDerivedType()   const { return ID >= FirstDerivedTyID; }
-  inline const DerivedType *castDerivedType() const {
-    return isDerivedType() ? (const DerivedType*)this : 0;
-  }
-  inline const DerivedType *castDerivedTypeAsserting() const {
-    assert(isDerivedType());
-    return (const DerivedType*)this;
-  }
 
   // Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool isa(const Type *T) { return true; }
index 271d2d4dfe5805f44418d8512c0a276e7cdef4dc..3ef46cac86a12008cedabcdbb62f0855c579977e 100644 (file)
@@ -98,14 +98,6 @@ public:
   inline CLASS *cast##NAME() {         /* nonconst version */             \
     return is##NAME() ? (CLASS*)this : 0;                                 \
   }                                                                       \
-  inline const CLASS *cast##NAME##Asserting() const { /*const version */  \
-    assert(is##NAME() && "Expected Value Type: " #NAME);                  \
-    return (const CLASS*)this;                                            \
-  }                                                                       \
-  inline CLASS *cast##NAME##Asserting() {         /* nonconst version */  \
-    assert(is##NAME() && "Expected Value Type: " #NAME);                  \
-    return (CLASS*)this;                                                  \
-  }                                                                       \
 
   CAST_FN(Constant      ,       ConstPoolVal  )
   CAST_FN(MethodArgument,       MethodArgument)
@@ -113,19 +105,8 @@ public:
   CAST_FN(BasicBlock    ,       BasicBlock    )
   CAST_FN(Method        ,       Method        )
   CAST_FN(Global        ,       GlobalVariable)
-  CAST_FN(Module        ,       Module        )
 #undef CAST_FN
 
-  // Type value is special, because there is no nonconst version of functions!
-  inline bool isType() const { return VTy == TypeVal; }
-  inline const Type *castType() const {
-    return (VTy == TypeVal) ? (const Type*)this : 0;
-  }
-  inline const Type *castTypeAsserting() const {
-    assert(isType() && "Expected Value Type: Type");
-    return (const Type*)this;
-  }
-
   // replaceAllUsesWith - Go through the uses list for this definition and make
   // each use point to "D" instead of "this".  After this completes, 'this's 
   // use list should be empty.
@@ -256,4 +237,33 @@ X *dyn_cast(Y Val) {
   return isa<X>(Val) ? cast<X>(Val) : 0;
 }
 
+
+// isa - Provide some specializations of isa so that we have to include the
+// subtype header files to test to see if the value is a subclass...
+//
+template <> bool isa<Type, Value*>(Value *Val) { 
+  return Val->getValueType() == Value::TypeVal;
+}
+template <> bool isa<ConstPoolVal, Value*>(Value *Val) { 
+  return Val->getValueType() == Value::ConstantVal; 
+}
+template <> bool isa<MethodArgument, Value*>(Value *Val) { 
+  return Val->getValueType() == Value::MethodArgumentVal;
+}
+template <> bool isa<Instruction, Value*>(Value *Val) { 
+  return Val->getValueType() == Value::InstructionVal;
+}
+template <> bool isa<BasicBlock, Value*>(Value *Val) { 
+  return Val->getValueType() == Value::BasicBlockVal;
+}
+template <> bool isa<Method, Value*>(Value *Val) { 
+  return Val->getValueType() == Value::MethodVal;
+}
+template <> bool isa<GlobalVariable, Value*>(Value *Val) { 
+  return Val->getValueType() == Value::GlobalVal;
+}
+template <> bool isa<Module, Value*>(Value *Val) { 
+  return Val->getValueType() == Value::ModuleVal;
+}
+
 #endif
index 43cf509a705714ee691cafec2681d208f53df1a2..6978da54986c9f19c8b50a717160f5220575fe5e 100644 (file)
@@ -154,11 +154,11 @@ public:
   // successor. WARNING: This does not gracefully accept idx's out of range!
   inline const ConstPoolVal *getSuccessorValue(unsigned idx) const {
     assert(idx < getNumSuccessors() && "Successor # out of range!");
-    return Operands[idx*2]->castConstantAsserting();
+    return cast<const ConstPoolVal>(Operands[idx*2]);
   }
   inline ConstPoolVal *getSuccessorValue(unsigned idx) {
     assert(idx < getNumSuccessors() && "Successor # out of range!");
-    return Operands[idx*2]->castConstantAsserting();
+    return cast<ConstPoolVal>(Operands[idx*2]);
   }
   virtual unsigned getNumSuccessors() const { return Operands.size()/2; }
 };
index a6f889f698d21908f467c510d61bb44b81a11bf3..8c9d75f2bd299fa624e091a1ae12224d07941d42 100644 (file)
@@ -225,7 +225,7 @@ ExprType analysis::ClassifyExpression(Value *Expr) {
   case Value::MethodArgumentVal:        // nothing known, return variable itself
     return Expr;
   case Value::ConstantVal:              // Constant value, just return constant
-    ConstPoolVal *CPV = Expr->castConstantAsserting();
+    ConstPoolVal *CPV = cast<ConstPoolVal>(Expr);
     if (CPV->getType()->isIntegral()) { // It's an integral constant!
       ConstPoolInt *CPI = (ConstPoolInt*)Expr;
       return ExprType(CPI->equalsInt(0) ? 0 : CPI);
index 7a32813fc174cf3734f4b5f95629cb8a92d86ab3..819f96290f479983ee07fd41f1bfa948432740d7 100644 (file)
@@ -155,7 +155,7 @@ static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
     }
 
     D.destroy();  // Free old strdup'd memory...
-    return N->castTypeAsserting();
+    return cast<const Type>(N);
   }
   default:
     ThrowException("Invalid symbol type reference!");
@@ -267,7 +267,7 @@ static Value *getVal(const Type *Ty, const ValID &D,
     case ValID::ConstNullVal:
       if (!Ty->isPointerType())
         ThrowException("Cannot create a a non pointer null!");
-      CPV = ConstPoolPointer::getNullPointer(Ty->castPointerType());
+      CPV = ConstPoolPointer::getNullPointer(cast<PointerType>(Ty));
       break;
     default:
       assert(0 && "Unhandled case!");
@@ -341,7 +341,7 @@ static void ResolveDefinitions(vector<ValueList> &LateResolvers) {
                         getLineNumFromPlaceHolder(V));
       }
 
-      assert(!V->isType() && "Types should be in LateResolveTypes!");
+      assert(!isa<Type>(V) && "Types should be in LateResolveTypes!");
 
       V->replaceAllUsesWith(TheRealValue);
       delete V;
@@ -371,11 +371,8 @@ static void ResolveTypes(vector<PATypeHolder<Type> > &LateResolveTypes) {
                       getLineNumFromPlaceHolder(Ty));
     }
 
-    // FIXME: When types are not const
-    DerivedType *DTy = const_cast<DerivedType*>(Ty->castDerivedTypeAsserting());
-    
     // Refine the opaque type we had to the new type we are getting.
-    DTy->refineAbstractTypeTo(TheRealType);
+    cast<DerivedType>(Ty)->refineAbstractTypeTo(TheRealType);
 
     // No need to delete type, refine does that for us.
     LateResolveTypes.pop_back();
@@ -399,12 +396,11 @@ static void setValueName(Value *V, char *NameStr) {
   if (Existing) {    // Inserting a name that is already defined???
     // There is only one case where this is allowed: when we are refining an
     // opaque type.  In this case, Existing will be an opaque type.
-    if (const Type *Ty = Existing->castType())
+    if (const Type *Ty = cast<const Type>(Existing))
       if (Ty->isOpaqueType()) {
        // We ARE replacing an opaque type!
 
-       // TODO: FIXME when types are not const!
-       const_cast<DerivedType*>(Ty->castDerivedTypeAsserting())->refineAbstractTypeTo(V->castTypeAsserting());
+       cast<DerivedType>(Ty)->refineAbstractTypeTo(cast<Type>(V));
        return;
       }
 
@@ -899,7 +895,7 @@ ConstPool : ConstPool OptAssign ConstVal {
   | ConstPool OptAssign GlobalType ResolvedVal {
     const Type *Ty = $4->getType();
     // Global declarations appear in Constant Pool
-    ConstPoolVal *Initializer = $4->castConstant();
+    ConstPoolVal *Initializer = cast<ConstPoolVal>($4);
     if (Initializer == 0)
       ThrowException("Global value initializer is not a constant!");
         
@@ -913,7 +909,7 @@ ConstPool : ConstPool OptAssign ConstVal {
   | ConstPool OptAssign UNINIT GlobalType Types {
     const Type *Ty = *$5;
     // Global declarations appear in Constant Pool
-    if (Ty->isArrayType() && Ty->castArrayType()->isUnsized()) {
+    if (isa<ArrayType>(Ty) && cast<ArrayType>(Ty)->isUnsized()) {
       ThrowException("Type '" + Ty->getDescription() +
                     "' is not a sized type!");
     }
@@ -1162,7 +1158,7 @@ BBTerminatorInst : RET ResolvedVal {              // Return with a result...
 
 JumpTable : JumpTable IntType ConstValueRef ',' LABEL ValueRef {
     $$ = $1;
-    ConstPoolVal *V = getVal($2, $3, true)->castConstantAsserting();
+    ConstPoolVal *V = cast<ConstPoolVal>(getVal($2, $3, true));
     if (V == 0)
       ThrowException("May only switch on a constant pool value!");
 
@@ -1170,7 +1166,7 @@ JumpTable : JumpTable IntType ConstValueRef ',' LABEL ValueRef {
   }
   | IntType ConstValueRef ',' LABEL ValueRef {
     $$ = new list<pair<ConstPoolVal*, BasicBlock*> >();
-    ConstPoolVal *V = getVal($1, $2, true)->castConstantAsserting();
+    ConstPoolVal *V = cast<ConstPoolVal>(getVal($1, $2, true));
 
     if (V == 0)
       ThrowException("May only switch on a constant pool value!");
index ae206daa3707428ab4a78efcb3f06f66292b6431..67cfff7b973fb2ecea2bc6b5f15f4057ae439515 100644 (file)
@@ -149,8 +149,7 @@ bool BytecodeParser::parseTypeConstants(const uchar *&Buf, const uchar *EndBuf,
     // abstract type to use the newty.  This also will cause the opaque type
     // to be deleted...
     //
-    // FIXME when types are not const
-    const_cast<DerivedType*>(Tab[i+BaseLevel]->castDerivedTypeAsserting())->refineAbstractTypeTo(NewTy);
+    cast<DerivedType>(Tab[i+BaseLevel].get())->refineAbstractTypeTo(NewTy);
 
     // This should have replace the old opaque type with the new type in the
     // value table...
@@ -159,7 +158,7 @@ bool BytecodeParser::parseTypeConstants(const uchar *&Buf, const uchar *EndBuf,
 
   BCR_TRACE(5, "Resulting types:\n");
   for (unsigned i = 0; i < NumEntries; i++) {
-    BCR_TRACE(5, Tab[i+BaseLevel]->castTypeAsserting() << "\n");
+    BCR_TRACE(5, cast<Type>(Tab[i+BaseLevel]) << "\n");
   }
   return false;
 }
index a2038edf342a5344e6bad1d45939c95e807ac5e0..b7904bb60f797d20a5c729ac545bb284913acc80 100644 (file)
@@ -55,7 +55,7 @@ const Type *BytecodeParser::getType(unsigned ID) {
   const Value *D = getValue(Type::TypeTy, ID, false);
   if (D == 0) return failure<const Type*>(0);
 
-  return D->castTypeAsserting();
+  return cast<Type>(D);
 }
 
 bool BytecodeParser::insertValue(Value *Val, vector<ValueList> &ValueTab) {
@@ -341,7 +341,7 @@ bool BytecodeParser::ParseModuleGlobalInfo(const uchar *&Buf, const uchar *End,
       Value *V = getValue(Ty->castPointerType()->getValueType(),
                          InitSlot, false);
       if (V == 0) return failure(true);
-      Initializer = V->castConstantAsserting();
+      Initializer = cast<ConstPoolVal>(V);
     }
 
     // Create the global variable...
index cac8f2e953c20b25e89ffe0e3ef9037529a5d373..d0f37fb723e9f7b3a525cb5e818d359d9817fea2 100644 (file)
@@ -250,13 +250,13 @@ int SlotCalculator::insertVal(const Value *D, bool dontIgnore = false) {
   if (!dontIgnore)                               // Don't ignore nonignorables!
     if (D->getType() == Type::VoidTy ||          // Ignore void type nodes
        (IgnoreNamedNodes &&                     // Ignore named and constants
-        (D->hasName() || D->isConstant()) && !D->isType())) {
+        (D->hasName() || isa<ConstPoolVal>(D)) && !isa<Type>(D))) {
       SC_DEBUG("ignored value " << D << endl);
       return -1;                  // We do need types unconditionally though
     }
 
   // If it's a type, make sure that all subtypes of the type are included...
-  if (const Type *TheTy = D->castType()) {
+  if (const Type *TheTy = dyn_cast<const Type>(D)) {
     SC_DEBUG("  Inserted type: " << TheTy->getDescription() << endl);
 
     // Loop over any contained types in the definition... in reverse depth first
@@ -289,7 +289,7 @@ int SlotCalculator::doInsertVal(const Value *D) {
 
   // Used for debugging DefSlot=-1 assertion...
   //if (Typ == Type::TypeTy)
-  //  cerr << "Inserting type '" << D->castTypeAsserting()->getDescription() << "'!\n";
+  //  cerr << "Inserting type '" << cast<Type>(D)->getDescription() << "'!\n";
 
   if (Typ->isDerivedType()) {
     int DefSlot = getValSlot(Typ);
index 04a0ca4624f2807740b48bfe83dca0c5c1f2fc17..94cbcec328df2129dab21f132a30740dd977ecd3 100644 (file)
@@ -84,7 +84,8 @@ void BytecodeWriter::outputConstants(bool isMethod) {
 
     unsigned NC = ValNo;              // Number of constants
     for (; NC < Plane.size() && 
-          (Plane[NC]->isConstant() || Plane[NC]->isType()); NC++) /*empty*/;
+          (isa<ConstPoolVal>(Plane[NC]) || 
+            isa<Type>(Plane[NC])); NC++) /*empty*/;
     NC -= ValNo;                      // Convert from index into count
     if (NC == 0) continue;            // Skip empty type planes...
 
index e7cdbc038968681e89f2cabe34095192bf2dad3a..572e1b175b3cdb173f307cabc5e3a551e62cf8c3 100644 (file)
@@ -1525,8 +1525,8 @@ GetInstructionsByRule(InstructionNode* subtreeRoot,
       case 208:        // stmt:   BrCond(boolconst)
         {
         // boolconst => boolean is a constant; use BA to first or second label
-        ConstPoolVal* constVal =
-          subtreeRoot->leftChild()->getValue()->castConstantAsserting();
+        ConstPoolVal* constVal = 
+          cast<ConstPoolVal>(subtreeRoot->leftChild()->getValue());
         unsigned dest = ((ConstPoolBool*) constVal)->getValue()? 0 : 1;
         
         mvec[0] = new MachineInstr(BA);
index e1415c73e87348fd50f692ab3b9699402ffab6f8..24a5e852a219606b544d3b49f88ca063a7d5ce2d 100644 (file)
@@ -61,7 +61,7 @@ Annotation *TargetData::TypeAnFactory(AnnotationID AID, const Annotable *T,
                                      void *D) {
   const TargetData &TD = *(const TargetData*)D;
   assert(AID == TD.AID && "Target data annotation ID mismatch!");
-  const Type *Ty = ((const Value *)T)->castTypeAsserting();
+  const Type *Ty = cast<const Type>((const Value *)T);
   assert(Ty->isStructType() && 
         "Can only create StructLayout annotation on structs!");
   return new StructLayout((const StructType *)Ty, TD);
index 2f40f585d0c37fb5429bf4b35e11d698f7ec8eea..6104b62e431d706038f28b98c874199ef7c2fed0 100644 (file)
@@ -29,7 +29,7 @@ static bool StripSymbolTable(SymbolTable *SymTab) {
     SymbolTable::type_iterator B;
     while ((B = Plane.begin()) != Plane.end()) {   // Found nonempty type plane!
       Value *V = B->second;
-      if (V->isConstant() || V->isType())
+      if (isa<ConstPoolVal>(V) || isa<Type>(V))
        SymTab->type_remove(B);
       else 
        V->setName("", SymTab);   // Set name to "", removing from symbol table!
index e40006c2330d20beab73f1363ce00c38bfc4ce96..3c67c2ca088c6eb70163a0f4c621a588587b557b 100644 (file)
@@ -143,9 +143,9 @@ void AssemblyWriter::processSymbolTable(const SymbolTable &ST) {
     
     for (; I != End; ++I) {
       const Value *V = I->second;
-      if (const ConstPoolVal *CPV = V->castConstant()) {
+      if (const ConstPoolVal *CPV = cast<const ConstPoolVal>(V)) {
        processConstant(CPV);
-      } else if (const Type *Ty = V->castType()) {
+      } else if (const Type *Ty = cast<const Type>(V)) {
        Out << "\t%" << I->first << " = type " << Ty->getDescription() << endl;
       }
     }
index 152209dcc7d9bb4fc08f6d9cf6fb214c5f606d4f..374c583ab9bb5e8e2d4cc97295e953185c0d959c 100644 (file)
@@ -127,10 +127,10 @@ string ConstPoolArray::getStrValue() const {
   string Result = "[";
   if (Operands.size()) {
     Result += " " + Operands[0]->getType()->getDescription() + 
-             " " + Operands[0]->castConstantAsserting()->getStrValue();
+             " " + cast<ConstPoolVal>(Operands[0])->getStrValue();
     for (unsigned i = 1; i < Operands.size(); i++)
       Result += ", " + Operands[i]->getType()->getDescription() + 
-                " " + Operands[i]->castConstantAsserting()->getStrValue();
+                " " + cast<ConstPoolVal>(Operands[i])->getStrValue();
   }
 
   return Result + " ]";
@@ -140,10 +140,10 @@ string ConstPoolStruct::getStrValue() const {
   string Result = "{";
   if (Operands.size()) {
     Result += " " + Operands[0]->getType()->getDescription() + 
-             " " + Operands[0]->castConstantAsserting()->getStrValue();
+             " " + cast<ConstPoolVal>(Operands[0])->getStrValue();
     for (unsigned i = 1; i < Operands.size(); i++)
       Result += ", " + Operands[i]->getType()->getDescription() + 
-                " " + Operands[i]->castConstantAsserting()->getStrValue();
+                " " + cast<ConstPoolVal>(Operands[i])->getStrValue();
   }
 
   return Result + " }";
index 3974bf3e8867c91e317a8dc1b087bb61db2cfe42..c899d7d1f3ddcba2d003bcca88c9f9536f795b61 100644 (file)
@@ -238,7 +238,7 @@ struct DirectRules
 //
 Annotation *ConstRules::find(AnnotationID AID, const Annotable *TyA, void *) {
   assert(AID == ConstRules::AID && "Bad annotation for factory!");
-  const Type *Ty = ((const Value*)TyA)->castTypeAsserting();
+  const Type *Ty = cast<Type>((const Value*)TyA);
   
   switch (Ty->getPrimitiveID()) {
   case Type::BoolTyID: return new BoolRules();
index cac8f2e953c20b25e89ffe0e3ef9037529a5d373..d0f37fb723e9f7b3a525cb5e818d359d9817fea2 100644 (file)
@@ -250,13 +250,13 @@ int SlotCalculator::insertVal(const Value *D, bool dontIgnore = false) {
   if (!dontIgnore)                               // Don't ignore nonignorables!
     if (D->getType() == Type::VoidTy ||          // Ignore void type nodes
        (IgnoreNamedNodes &&                     // Ignore named and constants
-        (D->hasName() || D->isConstant()) && !D->isType())) {
+        (D->hasName() || isa<ConstPoolVal>(D)) && !isa<Type>(D))) {
       SC_DEBUG("ignored value " << D << endl);
       return -1;                  // We do need types unconditionally though
     }
 
   // If it's a type, make sure that all subtypes of the type are included...
-  if (const Type *TheTy = D->castType()) {
+  if (const Type *TheTy = dyn_cast<const Type>(D)) {
     SC_DEBUG("  Inserted type: " << TheTy->getDescription() << endl);
 
     // Loop over any contained types in the definition... in reverse depth first
@@ -289,7 +289,7 @@ int SlotCalculator::doInsertVal(const Value *D) {
 
   // Used for debugging DefSlot=-1 assertion...
   //if (Typ == Type::TypeTy)
-  //  cerr << "Inserting type '" << D->castTypeAsserting()->getDescription() << "'!\n";
+  //  cerr << "Inserting type '" << cast<Type>(D)->getDescription() << "'!\n";
 
   if (Typ->isDerivedType()) {
     int DefSlot = getValSlot(Typ);
index 491d7adc90ff771a8aba3c9d8757ac01c7a0d4ea..12bf0c7f1baa3fe14f76dfde3959ef39097253fc 100644 (file)
@@ -8,10 +8,6 @@
 #include "llvm/InstrTypes.h"
 #include "llvm/Support/StringExtras.h"
 #include "llvm/DerivedTypes.h"
-#ifndef NDEBUG
-#include "llvm/BasicBlock.h"   // Required for assertions to work.
-#include "llvm/Type.h"
-#endif
 
 SymbolTable::~SymbolTable() {
   // Drop all abstract type references in the type plane...
@@ -19,16 +15,16 @@ SymbolTable::~SymbolTable() {
   if (TyPlane != end()) {
     VarMap &TyP = TyPlane->second;
     for (VarMap::iterator I = TyP.begin(), E = TyP.end(); I != E; ++I) {
-      const Type *Ty = I->second->castTypeAsserting();
+      const Type *Ty = cast<const Type>(I->second);
       if (Ty->isAbstract())   // If abstract, drop the reference...
-       Ty->castDerivedTypeAsserting()->removeAbstractTypeUser(this);
+       cast<DerivedType>(Ty)->removeAbstractTypeUser(this);
     }
   }
 #ifndef NDEBUG   // Only do this in -g mode...
   bool LeftoverValues = true;
   for (iterator i = begin(); i != end(); ++i) {
     for (type_iterator I = i->second.begin(); I != i->second.end(); ++I)
-      if (!I->second->isConstant() && !I->second->isType()) {
+      if (!isa<ConstPoolVal>(I->second) && !isa<Type>(I->second)) {
        cerr << "Value still in symbol table! Type = '"
             << i->first->getDescription() << "' Name = '" << I->first << "'\n";
        LeftoverValues = false;
@@ -112,9 +108,9 @@ Value *SymbolTable::type_remove(const type_iterator &It) {
   // If we are removing an abstract type, remove the symbol table from it's use
   // list...
   if (Ty == Type::TypeTy) {
-    const Type *T = Result->castTypeAsserting();
+    const Type *T = cast<const Type>(Result);
     if (T->isAbstract())
-      T->castDerivedTypeAsserting()->removeAbstractTypeUser(this);
+      cast<DerivedType>(T)->removeAbstractTypeUser(this);
   }
 
   return Result;
@@ -149,9 +145,9 @@ void SymbolTable::insertEntry(const string &Name, Value *V) {
 
   // If we are adding an abstract type, add the symbol table to it's use list.
   if (VTy == Type::TypeTy) {
-    const Type *T = V->castTypeAsserting();
+    const Type *T = cast<const Type>(V);
     if (T->isAbstract())
-      T->castDerivedTypeAsserting()->addAbstractTypeUser(this);
+      cast<DerivedType>(T)->addAbstractTypeUser(this);
   }
 }
 
@@ -174,6 +170,6 @@ void SymbolTable::refineAbstractType(const DerivedType *OldType,
       OldType->removeAbstractTypeUser(this);
       I->second = (Value*)NewType;  // TODO FIXME when types aren't const
       if (NewType->isAbstract())
-       NewType->castDerivedTypeAsserting()->addAbstractTypeUser(this);
+       cast<const DerivedType>(NewType)->addAbstractTypeUser(this);
     }
 }