Fix PR19144: Incorrect offset generated for int-to-fp conversion at -O0.
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Tue, 18 Mar 2014 14:32:50 +0000 (14:32 +0000)
committerBill Schmidt <wschmidt@linux.vnet.ibm.com>
Tue, 18 Mar 2014 14:32:50 +0000 (14:32 +0000)
commitd4585b941a7012a67c3fc5c065e83b18be55e7a8
tree8aaf170ab7b588884931a8b84fd0215e2e9afe9a
parent610469f4c27b8813e82a13db147b99de27a66312
Fix PR19144: Incorrect offset generated for int-to-fp conversion at -O0.

When converting a signed 32-bit integer to double-precision floating point on
hardware without a lfiwax instruction, we have to instead use a lfd followed
by fcfid.  We were erroneously offsetting the address by 4 bytes in
preparation for either a lfiwax or lfiwzx when generating the lfd.  This fixes
that silly error.

This was not caught in the test suite since the conversion tests were run with
-mcpu=pwr7, which implies availability of lfiwax.  I've added another test
case for older hardware that checks the code we expect in the absence of
lfiwax and other flavors of fcfid.  There are fewer tests in this test case
because we punt to DAG selection in more cases on older hardware.  (We must
generate complex fiddly sequences in those cases, and there is marginal
benefit in duplicating that logic in fast-isel.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204155 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/PowerPC/PPCFastISel.cpp
test/CodeGen/PowerPC/fast-isel-conversion-p5.ll [new file with mode: 0644]