forked from OSchip/llvm-project
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. llvm-svn: 172967
This commit is contained in:
parent
f4779c1a33
commit
87a736ca9f
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue