[llvm] r216914 - Revert: [APFloat] Fixed a bug in method 'fusedMultiplyAdd'.

Andrea Di Biagio andrea.dibiagio at gmail.com
Tue Sep 16 02:30:42 PDT 2014


On Tue, Sep 16, 2014 at 5:50 AM, Hal Finkel <hfinkel at anl.gov> wrote:
> ----- Original Message -----
>> From: "Andrea Di Biagio" <Andrea_DiBiagio at sn.scee.net>
>> To: llvm-commits at cs.uiuc.edu
>> Sent: Tuesday, September 2, 2014 12:22:50 PM
>> Subject: [llvm] r216914 - Revert: [APFloat] Fixed a bug in method     'fusedMultiplyAdd'.
>>
>> Author: adibiagio
>> Date: Tue Sep  2 12:22:49 2014
>> New Revision: 216914
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=216914&view=rev
>> Log:
>> Revert: [APFloat] Fixed a bug in method 'fusedMultiplyAdd'.
>>
>> This reverts revision 216913; the new test added at revision 216913
>> caused regression failures on a couple of buildbots.
>
> Did we ever figure this out?
>
>  -Hal

Unfortunately not..
Basically, only for five buildbots the fused-multiply-add from test
case @PR20832 (added by test fold-builtin-fma.ll) was folded to a
completely bogus number. Interestingly, each failing buildbot found a
different number for the failing test case. That really confused me:
in case of an error, I was expecting _all_ the buildbots to fail with
the same error; instead, only a few builbots failed each time with
different results (I see if I can find the blame emails.. Hopefully I
didn't delete them).

Anyway, I tried to reproduce the regression failure on a different x86
machine (as far as I remember, three of the failing builbots were
bootstrapping clang on a x86_64 with both host and target
x86_64-unknown-linux-gnu). I tried on two other x86 machines with the
same configuration. Unfortunately I was never able to reproduce the
failure (it always worked for me).

>
>>
>>
>> Removed:
>>     llvm/trunk/test/Transforms/InstSimplify/fold-builtin-fma.ll
>> Modified:
>>     llvm/trunk/lib/Support/APFloat.cpp
>>
>> Modified: llvm/trunk/lib/Support/APFloat.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/APFloat.cpp?rev=216914&r1=216913&r2=216914&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Support/APFloat.cpp (original)
>> +++ llvm/trunk/lib/Support/APFloat.cpp Tue Sep  2 12:22:49 2014
>> @@ -1801,7 +1801,7 @@ APFloat::fusedMultiplyAdd(const APFloat
>>       extended-precision calculation.  */
>>    if (isFiniteNonZero() &&
>>        multiplicand.isFiniteNonZero() &&
>> -      addend.isFinite()) {
>> +      addend.isFiniteNonZero()) {
>>      lostFraction lost_fraction;
>>
>>      lost_fraction = multiplySignificand(multiplicand, &addend);
>>
>> Removed: llvm/trunk/test/Transforms/InstSimplify/fold-builtin-fma.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstSimplify/fold-builtin-fma.ll?rev=216913&view=auto
>> ==============================================================================
>> --- llvm/trunk/test/Transforms/InstSimplify/fold-builtin-fma.ll
>> (original)
>> +++ llvm/trunk/test/Transforms/InstSimplify/fold-builtin-fma.ll
>> (removed)
>> @@ -1,119 +0,0 @@
>> -; RUN: opt -instsimplify -S < %s | FileCheck %s
>> -
>> -; Fixes PR20832
>> -; Make sure that we correctly fold a fused multiply-add where
>> operands
>> -; are all finite constants and addend is zero.
>> -
>> -declare double @llvm.fma.f64(double, double, double)
>> -
>> -
>> -define double @PR20832()  {
>> -  %1 = call double @llvm.fma.f64(double 7.0, double 8.0, double 0.0)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @PR20832(
>> -; CHECK: ret double 5.600000e+01
>> -
>> -; Test builtin fma with all finite non-zero constants.
>> -define double @test_all_finite()  {
>> -  %1 = call double @llvm.fma.f64(double 7.0, double 8.0, double 5.0)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_all_finite(
>> -; CHECK: ret double 6.100000e+01
>> -
>> -; Test builtin fma with a +/-NaN addend.
>> -define double @test_NaN_addend()  {
>> -  %1 = call double @llvm.fma.f64(double 7.0, double 8.0, double
>> 0x7FF8000000000000)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_NaN_addend(
>> -; CHECK: ret double 0x7FF8000000000000
>> -
>> -define double @test_NaN_addend_2()  {
>> -  %1 = call double @llvm.fma.f64(double 7.0, double 8.0, double
>> 0xFFF8000000000000)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_NaN_addend_2(
>> -; CHECK: ret double 0xFFF8000000000000
>> -
>> -; Test builtin fma with a +/-Inf addend.
>> -define double @test_Inf_addend()  {
>> -  %1 = call double @llvm.fma.f64(double 7.0, double 8.0, double
>> 0x7FF0000000000000)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_Inf_addend(
>> -; CHECK: ret double 0x7FF0000000000000
>> -
>> -define double @test_Inf_addend_2()  {
>> -  %1 = call double @llvm.fma.f64(double 7.0, double 8.0, double
>> 0xFFF0000000000000)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_Inf_addend_2(
>> -; CHECK: ret double 0xFFF0000000000000
>> -
>> -; Test builtin fma with one of the operands to the multiply being
>> +/-NaN.
>> -define double @test_NaN_1()  {
>> -  %1 = call double @llvm.fma.f64(double 0x7FF8000000000000, double
>> 8.0, double 0.0)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_NaN_1(
>> -; CHECK: ret double 0x7FF8000000000000
>> -
>> -
>> -define double @test_NaN_2()  {
>> -  %1 = call double @llvm.fma.f64(double 7.0, double
>> 0x7FF8000000000000, double 0.0)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_NaN_2(
>> -; CHECK: ret double 0x7FF8000000000000
>> -
>> -
>> -define double @test_NaN_3()  {
>> -  %1 = call double @llvm.fma.f64(double 0xFFF8000000000000, double
>> 8.0, double 0.0)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_NaN_3(
>> -; CHECK: ret double 0x7FF8000000000000
>> -
>> -
>> -define double @test_NaN_4()  {
>> -  %1 = call double @llvm.fma.f64(double 7.0, double
>> 0xFFF8000000000000, double 0.0)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_NaN_4(
>> -; CHECK: ret double 0x7FF8000000000000
>> -
>> -
>> -; Test builtin fma with one of the operands to the multiply being
>> +/-Inf.
>> -define double @test_Inf_1()  {
>> -  %1 = call double @llvm.fma.f64(double 0x7FF0000000000000, double
>> 8.0, double 0.0)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_Inf_1(
>> -; CHECK: ret double 0x7FF0000000000000
>> -
>> -
>> -define double @test_Inf_2()  {
>> -  %1 = call double @llvm.fma.f64(double 7.0, double
>> 0x7FF0000000000000, double 0.0)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_Inf_2(
>> -; CHECK: ret double 0x7FF0000000000000
>> -
>> -
>> -define double @test_Inf_3()  {
>> -  %1 = call double @llvm.fma.f64(double 0xFFF0000000000000, double
>> 8.0, double 0.0)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_Inf_3(
>> -; CHECK: ret double 0xFFF0000000000000
>> -
>> -
>> -define double @test_Inf_4()  {
>> -  %1 = call double @llvm.fma.f64(double 7.0, double
>> 0xFFF0000000000000, double 0.0)
>> -  ret double %1
>> -}
>> -; CHECK-LABEL: @test_Inf_4(
>> -; CHECK: ret double 0xFFF0000000000000
>> -
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list