From af7b4fb9bec3858f0374d713dcbf3398a23c6fbe Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 25 Jan 2012 01:32:59 +0000 Subject: [PATCH] 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148898 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Type.h | 4 ---- lib/VMCore/Constants.cpp | 16 +++++++++++----- lib/VMCore/Instructions.cpp | 10 ++++++++-- lib/VMCore/Type.cpp | 8 -------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/include/llvm/Type.h b/include/llvm/Type.h index 95edb50459e..e7c165b1bf1 100644 --- a/include/llvm/Type.h +++ b/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/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 1976832294d..0fcce094084 100644 --- a/lib/VMCore/Constants.cpp +++ b/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(C->getType()) == isa(DstTy)); + if (VectorType *VT = dyn_cast(C->getType())) + assert(VT->getNumElements() == cast(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(C->getType()) == isa(DstTy)); + if (VectorType *VT = dyn_cast(C->getType())) + assert(VT->getNumElements() == cast(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(getType())) + return AT->getNumElements(); + return cast(getType())->getNumElements(); } diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index 8c375c2af3f..2c6987485ff 100644 --- a/lib/VMCore/Instructions.cpp +++ b/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(SrcTy) != isa(DstTy)) return false; + if (VectorType *VT = dyn_cast(SrcTy)) + if (VT->getNumElements() != cast(DstTy)->getNumElements()) + return false; return SrcTy->getScalarType()->isPointerTy() && DstTy->getScalarType()->isIntegerTy(); case Instruction::IntToPtr: - if (SrcTy->getNumElements() != DstTy->getNumElements()) + if (isa(SrcTy) != isa(DstTy)) return false; + if (VectorType *VT = dyn_cast(SrcTy)) + if (VT->getNumElements() != cast(DstTy)->getNumElements()) + return false; return SrcTy->getScalarType()->isIntegerTy() && DstTy->getScalarType()->isPointerTy(); case Instruction::BitCast: diff --git a/lib/VMCore/Type.cpp b/lib/VMCore/Type.cpp index fe07e9e12e0..7edd9e63f5a 100644 --- a/lib/VMCore/Type.cpp +++ b/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(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(this)->getBitWidth() == Bitwidth;