diff --git a/docs/LangRef.html b/docs/LangRef.html index 4f6b137ed18..c1482115a6f 100644 --- a/docs/LangRef.html +++ b/docs/LangRef.html @@ -103,7 +103,7 @@
  • Metadata Nodes and Metadata Strings
    1. 'tbaa' Metadata
    2. -
    3. 'fpaccuracy' Metadata
    4. +
    5. 'fpmath' Metadata
    6. 'range' Metadata
  • @@ -3000,15 +3000,15 @@ call void @llvm.dbg.value(metadata !24, i64 0, metadata !25)

    - 'fpaccuracy' Metadata + 'fpmath' Metadata

    -

    fpaccuracy metadata may be attached to any instruction of floating - point type. It expresses the maximum relative error allowed in the result - of that instruction, in ULPs, thus potentially allowing the compiler to use - a more efficient but less accurate method of computing it. +

    fpmath metadata may be attached to any instruction of floating point + type. It can be used to express the maximum acceptable relative error in the + result of that instruction, in ULPs, thus potentially allowing the compiler + to use a more efficient but less accurate method of computing it. ULP is defined as follows:

    diff --git a/include/llvm/LLVMContext.h b/include/llvm/LLVMContext.h index 18adcd1e3c2..a8306a9e761 100644 --- a/include/llvm/LLVMContext.h +++ b/include/llvm/LLVMContext.h @@ -42,7 +42,7 @@ public: MD_dbg = 0, // "dbg" MD_tbaa = 1, // "tbaa" MD_prof = 2, // "prof" - MD_fpaccuracy = 3, // "fpaccuracy" + MD_fpmath = 3, // "fpmath" MD_range = 4 // "range" }; diff --git a/lib/VMCore/LLVMContext.cpp b/lib/VMCore/LLVMContext.cpp index 68c56212bc6..f07f0b39392 100644 --- a/lib/VMCore/LLVMContext.cpp +++ b/lib/VMCore/LLVMContext.cpp @@ -44,9 +44,9 @@ LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl(*this)) { unsigned ProfID = getMDKindID("prof"); assert(ProfID == MD_prof && "prof kind id drifted"); (void)ProfID; - // Create the 'fpaccuracy' metadata kind. - unsigned FPAccuracyID = getMDKindID("fpaccuracy"); - assert(FPAccuracyID == MD_fpaccuracy && "fpaccuracy kind id drifted"); + // Create the 'fpmath' metadata kind. + unsigned FPAccuracyID = getMDKindID("fpmath"); + assert(FPAccuracyID == MD_fpmath && "fpmath kind id drifted"); (void)FPAccuracyID; // Create the 'range' metadata kind. diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index 96492e44d56..ab79d8ce62a 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -1653,16 +1653,16 @@ void Verifier::visitInstruction(Instruction &I) { } } - if (MDNode *MD = I.getMetadata(LLVMContext::MD_fpaccuracy)) { + if (MDNode *MD = I.getMetadata(LLVMContext::MD_fpmath)) { Assert1(I.getType()->isFPOrFPVectorTy(), - "fpaccuracy requires a floating point result!", &I); - Assert1(MD->getNumOperands() == 1, "fpaccuracy takes one operand!", &I); + "fpmath requires a floating point result!", &I); + Assert1(MD->getNumOperands() == 1, "fpmath takes one operand!", &I); ConstantFP *Op = dyn_cast_or_null(MD->getOperand(0)); - Assert1(Op, "fpaccuracy ULPs not a floating point number!", &I); + Assert1(Op, "fpmath ULPs not a floating point number!", &I); APFloat ULPs = Op->getValueAPF(); Assert1(ULPs.isNormal() || ULPs.isZero(), - "fpaccuracy ULPs not a normal number!", &I); - Assert1(!ULPs.isNegative(), "fpaccuracy ULPs is negative!", &I); + "fpmath ULPs not a normal number!", &I); + Assert1(!ULPs.isNegative(), "fpmath ULPs is negative!", &I); } MDNode *MD = I.getMetadata(LLVMContext::MD_range); diff --git a/test/Verifier/fpaccuracy.ll b/test/Verifier/fpaccuracy.ll deleted file mode 100644 index 2fefde09f18..00000000000 --- a/test/Verifier/fpaccuracy.ll +++ /dev/null @@ -1,31 +0,0 @@ -; RUN: not llvm-as < %s |& FileCheck %s - -define void @foo(i32 %i, float %f, <2 x float> %g) { - %s = add i32 %i, %i, !fpaccuracy !0 -; CHECK: fpaccuracy requires a floating point result! - %t = fadd float %f, %f, !fpaccuracy !1 -; CHECK: fpaccuracy takes one operand! - %u = fadd float %f, %f, !fpaccuracy !2 -; CHECK: fpaccuracy takes one operand! - %v = fadd float %f, %f, !fpaccuracy !3 -; CHECK: fpaccuracy ULPs not a floating point number! - %w = fadd float %f, %f, !fpaccuracy !0 -; Above line is correct. - %w2 = fadd <2 x float> %g, %g, !fpaccuracy !0 -; Above line is correct. - %x = fadd float %f, %f, !fpaccuracy !4 -; CHECK: fpaccuracy ULPs is negative! - %y = fadd float %f, %f, !fpaccuracy !5 -; CHECK: fpaccuracy ULPs is negative! - %z = fadd float %f, %f, !fpaccuracy !6 -; CHECK: fpaccuracy ULPs not a normal number! - ret void -} - -!0 = metadata !{ float 1.0 } -!1 = metadata !{ } -!2 = metadata !{ float 1.0, float 1.0 } -!3 = metadata !{ i32 1 } -!4 = metadata !{ float -1.0 } -!5 = metadata !{ float -0.0 } -!6 = metadata !{ float 0x7FFFFFFF00000000 } diff --git a/test/Verifier/fpmath.ll b/test/Verifier/fpmath.ll new file mode 100644 index 00000000000..4cfed2a3979 --- /dev/null +++ b/test/Verifier/fpmath.ll @@ -0,0 +1,31 @@ +; RUN: not llvm-as < %s |& FileCheck %s + +define void @foo(i32 %i, float %f, <2 x float> %g) { + %s = add i32 %i, %i, !fpmath !0 +; CHECK: fpmath requires a floating point result! + %t = fadd float %f, %f, !fpmath !1 +; CHECK: fpmath takes one operand! + %u = fadd float %f, %f, !fpmath !2 +; CHECK: fpmath takes one operand! + %v = fadd float %f, %f, !fpmath !3 +; CHECK: fpmath ULPs not a floating point number! + %w = fadd float %f, %f, !fpmath !0 +; Above line is correct. + %w2 = fadd <2 x float> %g, %g, !fpmath !0 +; Above line is correct. + %x = fadd float %f, %f, !fpmath !4 +; CHECK: fpmath ULPs is negative! + %y = fadd float %f, %f, !fpmath !5 +; CHECK: fpmath ULPs is negative! + %z = fadd float %f, %f, !fpmath !6 +; CHECK: fpmath ULPs not a normal number! + ret void +} + +!0 = metadata !{ float 1.0 } +!1 = metadata !{ } +!2 = metadata !{ float 1.0, float 1.0 } +!3 = metadata !{ i32 1 } +!4 = metadata !{ float -1.0 } +!5 = metadata !{ float -0.0 } +!6 = metadata !{ float 0x7FFFFFFF00000000 }