[llvm-commits] CVS: llvm/lib/VMCore/ConstantFold.cpp

Reid Spencer reid at x10sys.com
Thu Mar 1 12:44:40 PST 2007



Changes in directory llvm/lib/VMCore:

ConstantFold.cpp updated: 1.144 -> 1.145
---
Log message:

Use the APInt versions of the bit-wise conversions of float/double to int
and back. While this is not strictly necessary, it does pave the way for
future changes in casting. It should now be possible to improve vector
casting to deal with un-equal fp/int sizes.


---
Diffs of the changes:  (+10 -8)

 ConstantFold.cpp |   18 ++++++++++--------
 1 files changed, 10 insertions(+), 8 deletions(-)


Index: llvm/lib/VMCore/ConstantFold.cpp
diff -u llvm/lib/VMCore/ConstantFold.cpp:1.144 llvm/lib/VMCore/ConstantFold.cpp:1.145
--- llvm/lib/VMCore/ConstantFold.cpp:1.144	Thu Mar  1 13:31:12 2007
+++ llvm/lib/VMCore/ConstantFold.cpp	Thu Mar  1 14:44:23 2007
@@ -66,16 +66,16 @@
       assert(DstEltTy->isFloatingPoint());
       if (DstEltTy->getTypeID() == Type::DoubleTyID) {
         for (unsigned i = 0; i != SrcNumElts; ++i) {
-          double V =
-            BitsToDouble(cast<ConstantInt>(CV->getOperand(i))->getZExtValue());
+          ConstantInt *CI = cast<ConstantInt>(CV->getOperand(i));
+          double V = CI->getValue().bitsToDouble();
           Result.push_back(ConstantFP::get(Type::DoubleTy, V));
         }
         return ConstantVector::get(Result);
       }
       assert(DstEltTy == Type::FloatTy && "Unknown fp type!");
       for (unsigned i = 0; i != SrcNumElts; ++i) {
-        float V =
-          BitsToFloat(cast<ConstantInt>(CV->getOperand(i))->getZExtValue());
+        ConstantInt *CI = cast<ConstantInt>(CV->getOperand(i));
+        float V = CI->getValue().bitsToFloat();
         Result.push_back(ConstantFP::get(Type::FloatTy, V));
       }
       return ConstantVector::get(Result);
@@ -304,9 +304,9 @@
 
       if (DestTy->isFloatingPoint()) {
         if (DestTy == Type::FloatTy)
-          return ConstantFP::get(DestTy, BitsToFloat(CI->getZExtValue()));
+          return ConstantFP::get(DestTy, CI->getValue().bitsToFloat());
         assert(DestTy == Type::DoubleTy && "Unknown FP type!");
-        return ConstantFP::get(DestTy, BitsToDouble(CI->getZExtValue()));
+        return ConstantFP::get(DestTy, CI->getValue().bitsToDouble());
       }
       // Otherwise, can't fold this (packed?)
       return 0;
@@ -316,10 +316,12 @@
     if (const ConstantFP *FP = dyn_cast<ConstantFP>(V)) {
       // FP -> Integral.
       if (DestTy == Type::Int32Ty) {
-        return ConstantInt::get(DestTy, FloatToBits(FP->getValue()));
+        APInt Val(32, 0);
+        return ConstantInt::get(Val.floatToBits(FP->getValue()));
       } else {
         assert(DestTy == Type::Int64Ty && "only support f32/f64 for now!");
-        return ConstantInt::get(DestTy, DoubleToBits(FP->getValue()));
+        APInt Val(64, 0);
+        return ConstantInt::get(Val.doubleToBits(FP->getValue()));
       }
     }
     return 0;






More information about the llvm-commits mailing list