]> granicus.if.org Git - clang/commitdiff
implement a fixme, add support for ++/-- on long double.
authorChris Lattner <sabre@nondot.org>
Sun, 20 Apr 2008 00:50:39 +0000 (00:50 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 20 Apr 2008 00:50:39 +0000 (00:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@49980 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExprScalar.cpp

index d1d29ab3ea4c3ebe367c42fb9c9b458be1b42127..a501145a495836811e924ecff68625c80b8b0b95 100644 (file)
@@ -14,6 +14,7 @@
 #include "CodeGenFunction.h"
 #include "CodeGenModule.h"
 #include "clang/AST/AST.h"
+#include "clang/Basic/TargetInfo.h"
 #include "llvm/Constants.h"
 #include "llvm/Function.h"
 #include "llvm/GlobalVariable.h"
@@ -43,7 +44,6 @@ class VISIBILITY_HIDDEN ScalarExprEmitter
   llvm::IRBuilder &Builder;
   CGObjCRuntime *Runtime;
 
-
 public:
 
   ScalarExprEmitter(CodeGenFunction &cgf) : CGF(cgf), 
@@ -602,14 +602,15 @@ Value *ScalarExprEmitter::VisitPrePostIncDec(const UnaryOperator *E,
     if (isa<llvm::IntegerType>(InVal->getType()))
       NextVal = llvm::ConstantInt::get(InVal->getType(), AmountVal);
     else if (InVal->getType() == llvm::Type::FloatTy)
-      // FIXME: Handle long double.
       NextVal = 
         llvm::ConstantFP::get(llvm::APFloat(static_cast<float>(AmountVal)));
-    else {
-      // FIXME: Handle long double.
-      assert(InVal->getType() == llvm::Type::DoubleTy);
+    else if (InVal->getType() == llvm::Type::DoubleTy)
       NextVal = 
         llvm::ConstantFP::get(llvm::APFloat(static_cast<double>(AmountVal)));
+    else {
+      llvm::APFloat F(static_cast<float>(AmountVal));
+      F.convert(*CGF.Target.getLongDoubleFormat(), llvm::APFloat::rmTowardZero);
+      NextVal = llvm::ConstantFP::get(F);
     }
     NextVal = Builder.CreateAdd(InVal, NextVal, isInc ? "inc" : "dec");
   }