summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/docs/LangRef.rst4
-rw-r--r--llvm/lib/IR/Verifier.cpp2
-rw-r--r--llvm/test/Verifier/fpmath.ll3
3 files changed, 7 insertions, 2 deletions
diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst
index 25bf9cccb09..201fbec9710 100644
--- a/llvm/docs/LangRef.rst
+++ b/llvm/docs/LangRef.rst
@@ -4510,8 +4510,8 @@ it. ULP is defined as follows:
distance between the two non-equal finite floating-point numbers
nearest ``x``. Moreover, ``ulp(NaN)`` is ``NaN``.
-The metadata node shall consist of a single positive floating point
-number representing the maximum relative error, for example:
+The metadata node shall consist of a single positive float type number
+representing the maximum relative error, for example:
.. code-block:: llvm
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index cd8e3093ea7..47ded3cbd42 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -3668,6 +3668,8 @@ void Verifier::visitInstruction(Instruction &I) {
if (ConstantFP *CFP0 =
mdconst::dyn_extract_or_null<ConstantFP>(MD->getOperand(0))) {
const APFloat &Accuracy = CFP0->getValueAPF();
+ Assert(&Accuracy.getSemantics() == &APFloat::IEEEsingle,
+ "fpmath accuracy must have float type", &I);
Assert(Accuracy.isFiniteNonZero() && !Accuracy.isNegative(),
"fpmath accuracy not a positive number!", &I);
} else {
diff --git a/llvm/test/Verifier/fpmath.ll b/llvm/test/Verifier/fpmath.ll
index 2689b69d1d0..4a2e6eea6f1 100644
--- a/llvm/test/Verifier/fpmath.ll
+++ b/llvm/test/Verifier/fpmath.ll
@@ -19,6 +19,8 @@ define void @fpmath1(i32 %i, float %f, <2 x float> %g) {
; CHECK: fpmath accuracy not a positive number!
%z = fadd float %f, %f, !fpmath !6
; CHECK: fpmath accuracy not a positive number!
+ %double.fpmath = fadd float %f, %f, !fpmath !7
+; CHECK: fpmath accuracy must have float type
ret void
}
@@ -29,3 +31,4 @@ define void @fpmath1(i32 %i, float %f, <2 x float> %g) {
!4 = !{ float -1.0 }
!5 = !{ float 0.0 }
!6 = !{ float 0x7FFFFFFF00000000 }
+!7 = !{ double 1.0 }
OpenPOWER on IntegriCloud