[cfe-commits] r154388 - in /cfe/trunk: lib/CodeGen/CGExpr.cpp lib/CodeGen/CGExprScalar.cpp lib/CodeGen/CodeGenFunction.h test/CodeGenOpenCL/fpaccuracy.cl
Duncan Sands
baldrick at free.fr
Tue Apr 10 01:23:07 PDT 2012
Author: baldrick
Date: Tue Apr 10 03:23:07 2012
New Revision: 154388
URL: http://llvm.org/viewvc/llvm-project?rev=154388&view=rev
Log:
Express the number of ULPs in fpaccuracy metadata as a real rather than a
rational number, eg as 2.5 rather than 5, 2. OK'd by Peter Collingbourne.
Modified:
cfe/trunk/lib/CodeGen/CGExpr.cpp
cfe/trunk/lib/CodeGen/CGExprScalar.cpp
cfe/trunk/lib/CodeGen/CodeGenFunction.h
cfe/trunk/test/CodeGenOpenCL/fpaccuracy.cl
Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=154388&r1=154387&r2=154388&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExpr.cpp Tue Apr 10 03:23:07 2012
@@ -3001,16 +3001,13 @@
return ConvertTempToRValue(*this, E->getType(), OrigDest);
}
-void CodeGenFunction::SetFPAccuracy(llvm::Value *Val, unsigned AccuracyN,
- unsigned AccuracyD) {
+void CodeGenFunction::SetFPAccuracy(llvm::Value *Val, float Accuracy) {
assert(Val->getType()->isFPOrFPVectorTy());
- if (!AccuracyN || !isa<llvm::Instruction>(Val))
+ if (Accuracy == 0.0 || !isa<llvm::Instruction>(Val))
return;
- llvm::Value *Vals[2];
- Vals[0] = llvm::ConstantInt::get(Int32Ty, AccuracyN);
- Vals[1] = llvm::ConstantInt::get(Int32Ty, AccuracyD);
- llvm::MDNode *Node = llvm::MDNode::get(getLLVMContext(), Vals);
+ llvm::Value *ULPs = llvm::ConstantFP::get(Builder.getFloatTy(), Accuracy);
+ llvm::MDNode *Node = llvm::MDNode::get(getLLVMContext(), ULPs);
cast<llvm::Instruction>(Val)->setMetadata(llvm::LLVMContext::MD_fpaccuracy,
Node);
Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=154388&r1=154387&r2=154388&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Tue Apr 10 03:23:07 2012
@@ -1807,7 +1807,7 @@
if (ValTy->isFloatTy() ||
(isa<llvm::VectorType>(ValTy) &&
cast<llvm::VectorType>(ValTy)->getElementType()->isFloatTy()))
- CGF.SetFPAccuracy(Val, 5, 2);
+ CGF.SetFPAccuracy(Val, 2.5);
}
return Val;
}
Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=154388&r1=154387&r2=154388&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Tue Apr 10 03:23:07 2012
@@ -2518,8 +2518,7 @@
/// SetFPAccuracy - Set the minimum required accuracy of the given floating
/// point operation, expressed as the maximum relative error in ulp.
- void SetFPAccuracy(llvm::Value *Val, unsigned AccuracyN,
- unsigned AccuracyD = 1);
+ void SetFPAccuracy(llvm::Value *Val, float Accuracy);
private:
llvm::MDNode *getRangeForLoadFromType(QualType Ty);
Modified: cfe/trunk/test/CodeGenOpenCL/fpaccuracy.cl
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenOpenCL/fpaccuracy.cl?rev=154388&r1=154387&r2=154388&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenOpenCL/fpaccuracy.cl (original)
+++ cfe/trunk/test/CodeGenOpenCL/fpaccuracy.cl Tue Apr 10 03:23:07 2012
@@ -22,4 +22,4 @@
return a / b;
}
-// CHECK: ![[MD]] = metadata !{i{{[0-9]+}} 5, i{{[0-9]+}} 2}
+// CHECK: ![[MD]] = metadata !{float 2.500000e+00}
More information about the cfe-commits
mailing list