diff options
author | Michael Gottesman <mgottesman@apple.com> | 2013-01-20 07:33:26 +0000 |
---|---|---|
committer | Michael Gottesman <mgottesman@apple.com> | 2013-01-20 07:33:26 +0000 |
commit | ec98d2ce5ec51148e442c024b77a7483c81eee6c (patch) | |
tree | f002d2a394f230a23fbe1a09f9229f37ada93afe /include/llvm/IR | |
parent | df76b389e0afb31778b7a4acec406f1e52104cb8 (diff) | |
download | external_llvm-ec98d2ce5ec51148e442c024b77a7483c81eee6c.zip external_llvm-ec98d2ce5ec51148e442c024b77a7483c81eee6c.tar.gz external_llvm-ec98d2ce5ec51148e442c024b77a7483c81eee6c.tar.bz2 |
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
Diffstat (limited to 'include/llvm/IR')
-rw-r--r-- | include/llvm/IR/IRBuilder.h | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/include/llvm/IR/IRBuilder.h b/include/llvm/IR/IRBuilder.h index 22e082e..e2ec481 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<IntegerType>(V->getType()) && + assert(V->getType()->isIntOrIntVectorTy() && + DestTy->isIntOrIntVectorTy() && "Can only zero extend/truncate integers!"); - IntegerType *IntTy = cast<IntegerType>(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<IntegerType>(V->getType()) && + assert(V->getType()->isIntOrIntVectorTy() && + DestTy->isIntOrIntVectorTy() && "Can only sign extend/truncate integers!"); - IntegerType *IntTy = cast<IntegerType>(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; } |