mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-24 12:50:42 +00:00
Verifier: Reject non-float !fpmath
Code already assumes this is float. getFPAccuracy() crashes on any other type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273912 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bd288e1778
commit
1d88d3b08d
@ -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
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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 }
|
||||
|
Loading…
x
Reference in New Issue
Block a user