Added IRBuilder::CreateFPExtOrFPTrunc.
authorMichael Gottesman <mgottesman@apple.com>
Sun, 20 Jan 2013 03:56:31 +0000 (03:56 +0000)
committerMichael Gottesman <mgottesman@apple.com>
Sun, 20 Jan 2013 03:56:31 +0000 (03:56 +0000)
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

include/llvm/IR/IRBuilder.h

index 0b01db2f717785ea344342204e21436252b06b9b..abd6f90627915129ac89ca72e488e6e93d5bb14f 100644 (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);
   }