[ConstantFold] fp_binop AnyConstant, undef --> NaN
authorSanjay Patel <spatel@rotateright.com>
Sat, 10 Mar 2018 15:56:25 +0000 (15:56 +0000)
committerSanjay Patel <spatel@rotateright.com>
Sat, 10 Mar 2018 15:56:25 +0000 (15:56 +0000)
commite5606b4fa5b8b4e66ab7c01aa274a29580366a26
tree1b429eb54fe73a82e9fa7da2ed331248012485b4
parenta7dcfa746e8eab05e0750adc2c6dd1fabae5636d
[ConstantFold] fp_binop AnyConstant, undef --> NaN

With the updated LangRef ( D44216 / rL327138 ) in place, we can proceed with more constant folding.

I'm intentionally taking the conservative path here: no matter what the constant or the FMF, we can
always fold to NaN. This is because the undef operand can be chosen as NaN, and in our simplified
default FP env, nothing else happens - NaN just propagates to the result. If we find some way/need
to propagate undef instead, that can be added subsequently.

The tests show that we always choose the same quiet NaN constant (0x7FF8000000000000 in IR text).
There were suggestions to improve that with a 'NaN' string token or not always print a 64-bit hex
value, but those are independent changes. We might also consider setting/propagating the payload of
NaN constants as an enhancement.

Differential Revision: https://reviews.llvm.org/D44308

llvm-svn: 327208
llvm/lib/IR/ConstantFold.cpp
llvm/test/Transforms/InstCombine/fsub.ll
llvm/test/Transforms/InstSimplify/fp-undef.ll