[PowerPC] Reuse a load operand in int->fp conversions
authorHal Finkel <hfinkel@anl.gov>
Tue, 6 Jan 2015 22:31:02 +0000 (22:31 +0000)
committerHal Finkel <hfinkel@anl.gov>
Tue, 6 Jan 2015 22:31:02 +0000 (22:31 +0000)
commit8e9ba0e588096d9d8c680999c83350a989bd709d
tree0548fb7b7c46e346e40c7786ac12d9043e176560
parent193f586fd2c40a040e3b058add9cc36dc862534c
[PowerPC] Reuse a load operand in int->fp conversions

int->fp conversions on PPC must be done through memory loads and stores. On a
modern core, this process begins by storing the int value to memory, then
loading it using a (sometimes special) FP load instruction. Unfortunately, we
would do this even when the value to be converted was itself a load, and we can
just use that same memory location instead of copying it to another first.
There is a slight complication when handling int_to_fp(fp_to_int(x)) pairs,
because the fp_to_int operand has not been lowered when the int_to_fp is being
lowered. We handle this specially by invoking fp_to_int's lowering logic
(partially) and getting the necessary memory location (some trivial refactoring
was done to make this possible).

This is all somewhat ugly, and it would be nice if some later CodeGen stage
could just clean this stuff up, but because doing so would involve modifying
target-specific nodes (or instructions), it is not immediately clear how that
would work.

Also, remove a related entry from the README.txt for which we now generate
reasonable code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225301 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/PowerPC/PPCISelLowering.cpp
lib/Target/PowerPC/PPCISelLowering.h
lib/Target/PowerPC/README.txt
test/CodeGen/PowerPC/no-extra-fp-conv-ldst.ll [new file with mode: 0644]