diff options
author | Chris Lattner <sabre@nondot.org> | 2012-01-25 01:32:59 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2012-01-25 01:32:59 +0000 |
commit | 8a3df5495abfcaba4312fd740853ff80914b000a (patch) | |
tree | 2849e177396c463aee14f85576b120fa6b4aa52d | |
parent | 9be59599b3b17be04d92a86b4bc11631e554a0d5 (diff) | |
download | bcm5719-llvm-8a3df5495abfcaba4312fd740853ff80914b000a.tar.gz bcm5719-llvm-8a3df5495abfcaba4312fd740853ff80914b000a.zip |
Remove the Type::getNumElements() method, which is only called in 4 places,
did something extremely surprising, and shadowed actually useful
implementations that had completely different behavior.
llvm-svn: 148898
-rw-r--r-- | llvm/include/llvm/Type.h | 4 | ||||
-rw-r--r-- | llvm/lib/VMCore/Constants.cpp | 16 | ||||
-rw-r--r-- | llvm/lib/VMCore/Instructions.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/VMCore/Type.cpp | 8 |
4 files changed, 19 insertions, 19 deletions
diff --git a/llvm/include/llvm/Type.h b/llvm/include/llvm/Type.h index 95edb50459e..e7c165b1bf1 100644 --- a/llvm/include/llvm/Type.h +++ b/llvm/include/llvm/Type.h @@ -294,10 +294,6 @@ public: /// otherwise return 'this'. Type *getScalarType(); - /// getNumElements - If this is a vector type, return the number of elements, - /// otherwise return zero. - unsigned getNumElements(); - //===--------------------------------------------------------------------===// // Type Iteration support. // diff --git a/llvm/lib/VMCore/Constants.cpp b/llvm/lib/VMCore/Constants.cpp index 1976832294d..0fcce094084 100644 --- a/llvm/lib/VMCore/Constants.cpp +++ b/llvm/lib/VMCore/Constants.cpp @@ -1505,8 +1505,10 @@ Constant *ConstantExpr::getPtrToInt(Constant *C, Type *DstTy) { "PtrToInt source must be pointer or pointer vector"); assert(DstTy->getScalarType()->isIntegerTy() && "PtrToInt destination must be integer or integer vector"); - assert(C->getType()->getNumElements() == DstTy->getNumElements() && - "Invalid cast between a different number of vector elements"); + assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy)); + if (VectorType *VT = dyn_cast<VectorType>(C->getType())) + assert(VT->getNumElements() == cast<VectorType>(DstTy)->getNumElements() && + "Invalid cast between a different number of vector elements"); return getFoldedCast(Instruction::PtrToInt, C, DstTy); } @@ -1515,8 +1517,10 @@ Constant *ConstantExpr::getIntToPtr(Constant *C, Type *DstTy) { "IntToPtr source must be integer or integer vector"); assert(DstTy->getScalarType()->isPointerTy() && "IntToPtr destination must be a pointer or pointer vector"); - assert(C->getType()->getNumElements() == DstTy->getNumElements() && - "Invalid cast between a different number of vector elements"); + assert(isa<VectorType>(C->getType()) == isa<VectorType>(DstTy)); + if (VectorType *VT = dyn_cast<VectorType>(C->getType())) + assert(VT->getNumElements() == cast<VectorType>(DstTy)->getNumElements() && + "Invalid cast between a different number of vector elements"); return getFoldedCast(Instruction::IntToPtr, C, DstTy); } @@ -2018,7 +2022,9 @@ bool ConstantDataSequential::isElementTypeCompatible(const Type *Ty) { /// getNumElements - Return the number of elements in the array or vector. unsigned ConstantDataSequential::getNumElements() const { - return getType()->getNumElements(); + if (ArrayType *AT = dyn_cast<ArrayType>(getType())) + return AT->getNumElements(); + return cast<VectorType>(getType())->getNumElements(); } diff --git a/llvm/lib/VMCore/Instructions.cpp b/llvm/lib/VMCore/Instructions.cpp index 8c375c2af3f..2c6987485ff 100644 --- a/llvm/lib/VMCore/Instructions.cpp +++ b/llvm/lib/VMCore/Instructions.cpp @@ -2671,13 +2671,19 @@ CastInst::castIsValid(Instruction::CastOps op, Value *S, Type *DstTy) { return SrcTy->isFPOrFPVectorTy() && DstTy->isIntOrIntVectorTy() && SrcLength == DstLength; case Instruction::PtrToInt: - if (SrcTy->getNumElements() != DstTy->getNumElements()) + if (isa<VectorType>(SrcTy) != isa<VectorType>(DstTy)) return false; + if (VectorType *VT = dyn_cast<VectorType>(SrcTy)) + if (VT->getNumElements() != cast<VectorType>(DstTy)->getNumElements()) + return false; return SrcTy->getScalarType()->isPointerTy() && DstTy->getScalarType()->isIntegerTy(); case Instruction::IntToPtr: - if (SrcTy->getNumElements() != DstTy->getNumElements()) + if (isa<VectorType>(SrcTy) != isa<VectorType>(DstTy)) return false; + if (VectorType *VT = dyn_cast<VectorType>(SrcTy)) + if (VT->getNumElements() != cast<VectorType>(DstTy)->getNumElements()) + return false; return SrcTy->getScalarType()->isIntegerTy() && DstTy->getScalarType()->isPointerTy(); case Instruction::BitCast: diff --git a/llvm/lib/VMCore/Type.cpp b/llvm/lib/VMCore/Type.cpp index fe07e9e12e0..7edd9e63f5a 100644 --- a/llvm/lib/VMCore/Type.cpp +++ b/llvm/lib/VMCore/Type.cpp @@ -47,14 +47,6 @@ Type *Type::getScalarType() { return this; } -/// getNumElements - If this is a vector type, return the number of elements, -/// otherwise return zero. -unsigned Type::getNumElements() { - if (VectorType *VTy = dyn_cast<VectorType>(this)) - return VTy->getNumElements(); - return 0; -} - /// isIntegerTy - Return true if this is an IntegerType of the specified width. bool Type::isIntegerTy(unsigned Bitwidth) const { return isIntegerTy() && cast<IntegerType>(this)->getBitWidth() == Bitwidth; |