[IR] Shuffle the code for getSequentialElementType to type.h to avoid circular header...
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 29 Jan 2016 12:47:01 +0000 (12:47 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 29 Jan 2016 12:47:01 +0000 (12:47 +0000)
llvm-svn: 259190

llvm/include/llvm/IR/DerivedTypes.h
llvm/include/llvm/IR/Type.h

index 071e69b..afb0492 100644 (file)
@@ -343,7 +343,7 @@ protected:
   }
 
 public:
-  Type *getElementType() const { return ContainedTys[0]; }
+  Type *getElementType() const { return getSequentialElementType(); }
 
   /// Methods for support type inquiry through isa, cast, and dyn_cast.
   static inline bool classof(const Type *T) {
@@ -353,10 +353,6 @@ public:
   }
 };
 
-Type *Type::getSequentialElementType() const {
-  return cast<SequentialType>(this)->getElementType();
-}
-
 /// ArrayType - Class to represent array types.
 ///
 class ArrayType : public SequentialType {
index b2920dd..4b2b972 100644 (file)
@@ -107,6 +107,10 @@ protected:
   /// (Integer, Double, Float).
   Type * const *ContainedTys;
 
+  static bool isSequentialType(TypeID TyID) {
+    return TyID == ArrayTyID || TyID == PointerTyID || TyID == VectorTyID;
+  }
+
 public:
   void print(raw_ostream &O, bool IsForDebug = false) const;
   void dump() const;
@@ -347,7 +351,10 @@ public:
   inline unsigned getStructNumElements() const;
   inline Type *getStructElementType(unsigned N) const;
 
-  inline Type *getSequentialElementType() const;
+  inline Type *getSequentialElementType() const {
+    assert(isSequentialType(getTypeID()) && "Not a sequential type!");
+    return ContainedTys[0];
+  }
 
   inline uint64_t getArrayNumElements() const;
   Type *getArrayElementType() const { return getSequentialElementType(); }