Added IRBuilder::CreateFPExtOrFPTrunc.

This method serves an analogous purpose to CreateZExtOrTrunc/CreateSExtOrTrunc
but for floating point types.

In detail, it provides a manner when one is handling conversions of floating
point types of automatically selecting fpext, fptrunc, or identity depending on
the relative bitsize of the source and destination types.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172957 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Michael Gottesman 2013-01-20 03:56:31 +00:00
parent fe311dba3e
commit 8b28998777

View File

@ -1048,6 +1048,20 @@ public:
return CreateTrunc(V, DestTy, Name);
return V;
}
/// CreateFPExtOrFPTrunc - Create a FPExt or FPTrunc from the float value V to
/// DestTy. Return the value untouched if the type of V is already DestTy.
Value *CreateFPExtOrFPTrunc(Value *V, Type *DestTy,
const Twine &Name = "") {
assert(V->getType()->isFPOrFPVectorTy() &&
DestTy->isFPOrFPVectorTy() &&
"Can only FPExt/FPTrunc floating point types!");
Type *Ty = V->getType();
if (Ty->getScalarSizeInBits() < DestTy->getScalarSizeInBits())
return CreateFPExt(V, DestTy, Name);
if (Ty->getScalarSizeInBits() > DestTy->getScalarSizeInBits())
return CreateFPTrunc(V, DestTy, Name);
return V;
}
Value *CreateFPToUI(Value *V, Type *DestTy, const Twine &Name = ""){
return CreateCast(Instruction::FPToUI, V, DestTy, Name);
}