Add a note about a missed FP optimization.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123126 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chandler Carruth 2011-01-09 21:00:19 +00:00
parent 43a566519b
commit 96b1b6c135

View File

@ -2249,3 +2249,27 @@ S is only 6 bytes, but each element is 8 byte-aligned. We generate a loop and
a memset.
//===---------------------------------------------------------------------===//
clang -O3 currently compiles this code:
extern const int magic;
double f() { return 0.0 * magic; }
into
@magic = external constant i32
define double @_Z1fv() nounwind readnone {
entry:
%tmp = load i32* @magic, align 4, !tbaa !0
%conv = sitofp i32 %tmp to double
%mul = fmul double %conv, 0.000000e+00
ret double %mul
}
We should be able to fold away this fmul to a constant, there is no 32-bit
integer which after sitofp will generate a NaN, inf, or -0.0. We should fold
this whenever the floating point type has enough exponent bits to represent
the largest integer value as < inf.
//===---------------------------------------------------------------------===//