llvm-6502/test
Hal Finkel f0f98417ca Revert "r216914 - Revert: [APFloat] Fixed a bug in method 'fusedMultiplyAdd'"
Reapply r216913, a fix for PR20832 by Andrea Di Biagio. The commit was reverted
because of buildbot failures, and credit goes to Ulrich Weigand for isolating
the underlying issue (which can be confirmed by Valgrind, which does helpfully
light up like the fourth of July). Uli explained the problem with the original
patch as:

  It seems the problem is calling multiplySignificand with an addend of category
  fcZero; that is not expected by this routine.  Note that for fcZero, the
  significand parts are simply uninitialized, but the code in (or rather, called
  from) multiplySignificand will unconditionally access them -- in effect using
  uninitialized contents.

This version avoids using a category == fcZero addend within
multiplySignificand, which avoids this problem (the Valgrind output is also now
clean).

Original commit message:

[APFloat] Fixed a bug in method 'fusedMultiplyAdd'.

When folding a fused multiply-add builtin call, make sure that we propagate the
correct result in the case where the addend is zero, and the two other operands
are finite non-zero.

Example:
  define double @test() {
    %1 = call double @llvm.fma.f64(double 7.0, double 8.0, double 0.0)
    ret double %1
  }

Before this patch, the instruction simplifier wrongly folded the builtin call
in function @test to constant 'double 7.0'.
With this patch, method 'fusedMultiplyAdd' correctly evaluates the multiply and
propagates the expected result (i.e. 56.0).

Added test fold-builtin-fma.ll with the reproducible from PR20832 plus extra
test cases to verify the behavior of method 'fusedMultiplyAdd' in the presence
of NaN/Inf operands.

This fixes PR20832.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219708 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-14 19:23:07 +00:00
..
Analysis This patch teaches ScalarEvolution to pick and use !range metadata. 2014-10-10 21:22:34 +00:00
Assembler
Bindings
Bitcode
BugPoint
CodeGen Revert "R600: Add new intrinsic to read work dimensions" 2014-10-14 18:58:04 +00:00
DebugInfo [dwarfdump] Prettyprint DW_AT_APPLE_property_attribute bitfield values. 2014-10-10 15:51:10 +00:00
ExecutionEngine
Feature
FileCheck
Instrumentation [asan-asm-instrumentation] Fixed memory references which includes %rsp as a base or an index register. 2014-10-13 09:37:47 +00:00
Integer
JitListener
Linker
LTO
MC [AVX512] Extended avx512_binop_rm to DQ/VL subsets. 2014-10-14 15:13:56 +00:00
Object Suppress llvm-ar's MRI tests for now on win32, since line_iterator is incompatible to CRLF. 2014-10-11 22:21:27 +00:00
Other
TableGen
tools Add VS2012-generated test inputs for test/tools/llvm-readobj/codeview-linetables.test 2014-10-13 17:03:13 +00:00
Transforms Revert "r216914 - Revert: [APFloat] Fixed a bug in method 'fusedMultiplyAdd'" 2014-10-14 19:23:07 +00:00
Unit
Verifier
YAMLParser
.clang-format
CMakeLists.txt
lit.cfg
lit.site.cfg.in
Makefile
Makefile.tests
TestRunner.sh