llvm-6502/lib
Owen Anderson 7a0201c6a6 Remove an InstCombine that transformed patterns like (x * uitofp i1 y) to (select y, x, 0.0) when the multiply has fast math flags set.
While this might seem like an obvious canonicalization, there is one subtle problem with it.  The result of the original expression
is undef when x is NaN (remember, fast math flags), but the result of the select is always defined when x is NaN.  This means that the
new expression is strictly more defined than the original one.  One unfortunate consequence of this is that the transform is not reversible!
It's always legal to make increase the defined-ness of an expression, but it's not legal to reduce it.  Thus, targets that prefer the original
form of the expression cannot reverse the transform to recover it.  Another way to think of it is that the transform has lost source-level
information (the fast math flags), which is undesirable.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215825 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-17 03:51:29 +00:00
..
Analysis
AsmParser
Bitcode BitcodeReader: Only create one basic block for each blockaddress 2014-08-16 01:54:37 +00:00
CodeGen Fix fmul combines with constant splat vectors 2014-08-16 10:14:19 +00:00
DebugInfo
ExecutionEngine
IR InstCombine: Fix a potential bug in 0 - (X sdiv C) -> (X sdiv -C) 2014-08-16 09:23:42 +00:00
IRReader
LineEditor
Linker
LTO
MC
Object
Option
ProfileData
Support
TableGen
Target [x86] Fix an indentation goof in a prior commit. Should have re-run 2014-08-17 00:40:34 +00:00
Transforms Remove an InstCombine that transformed patterns like (x * uitofp i1 y) to (select y, x, 0.0) when the multiply has fast math flags set. 2014-08-17 03:51:29 +00:00
CMakeLists.txt
LLVMBuild.txt
Makefile