From ec98d2ce5ec51148e442c024b77a7483c81eee6c Mon Sep 17 00:00:00 2001 From: Michael Gottesman Date: Sun, 20 Jan 2013 07:33:26 +0000 Subject: [PATCH] Changed IRBuilder::CreateZExtOrTrunc and IRBuilder::CreateSExtOrTrunc so they also work with vectors. I also changed the name of a variable in IRBuilder::CreateFPExtOrFPTrunc to match the names used in its two matching brethern as well. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172967 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/IRBuilder.h | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/include/llvm/IR/IRBuilder.h b/include/llvm/IR/IRBuilder.h index 22e082e5300..e2ec481d070 100644 --- a/include/llvm/IR/IRBuilder.h +++ b/include/llvm/IR/IRBuilder.h @@ -1031,27 +1031,29 @@ public: } /// \brief Create a ZExt or Trunc from the integer value V to DestTy. Return /// the value untouched if the type of V is already DestTy. - Value *CreateZExtOrTrunc(Value *V, IntegerType *DestTy, + Value *CreateZExtOrTrunc(Value *V, Type *DestTy, const Twine &Name = "") { - assert(isa(V->getType()) && + assert(V->getType()->isIntOrIntVectorTy() && + DestTy->isIntOrIntVectorTy() && "Can only zero extend/truncate integers!"); - IntegerType *IntTy = cast(V->getType()); - if (IntTy->getBitWidth() < DestTy->getBitWidth()) + Type *VTy = V->getType(); + if (VTy->getScalarSizeInBits() < DestTy->getScalarSizeInBits()) return CreateZExt(V, DestTy, Name); - if (IntTy->getBitWidth() > DestTy->getBitWidth()) + if (VTy->getScalarSizeInBits() > DestTy->getScalarSizeInBits()) return CreateTrunc(V, DestTy, Name); return V; } /// \brief Create a SExt or Trunc from the integer value V to DestTy. Return /// the value untouched if the type of V is already DestTy. - Value *CreateSExtOrTrunc(Value *V, IntegerType *DestTy, + Value *CreateSExtOrTrunc(Value *V, Type *DestTy, const Twine &Name = "") { - assert(isa(V->getType()) && + assert(V->getType()->isIntOrIntVectorTy() && + DestTy->isIntOrIntVectorTy() && "Can only sign extend/truncate integers!"); - IntegerType *IntTy = cast(V->getType()); - if (IntTy->getBitWidth() < DestTy->getBitWidth()) + Type *VTy = V->getType(); + if (VTy->getScalarSizeInBits() < DestTy->getScalarSizeInBits()) return CreateSExt(V, DestTy, Name); - if (IntTy->getBitWidth() > DestTy->getBitWidth()) + if (VTy->getScalarSizeInBits() > DestTy->getScalarSizeInBits()) return CreateTrunc(V, DestTy, Name); return V; } @@ -1062,10 +1064,10 @@ public: assert(V->getType()->isFPOrFPVectorTy() && DestTy->isFPOrFPVectorTy() && "Can only FPExt/FPTrunc floating point types!"); - Type *Ty = V->getType(); - if (Ty->getScalarSizeInBits() < DestTy->getScalarSizeInBits()) + Type *VTy = V->getType(); + if (VTy->getScalarSizeInBits() < DestTy->getScalarSizeInBits()) return CreateFPExt(V, DestTy, Name); - if (Ty->getScalarSizeInBits() > DestTy->getScalarSizeInBits()) + if (VTy->getScalarSizeInBits() > DestTy->getScalarSizeInBits()) return CreateFPTrunc(V, DestTy, Name); return V; }