[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)
commited844c4ad1e403aff4eae0799eeccd21a3a36c90
tree094037a62739b58e162c3c673ac076c22e84da04
parentd5c19bb16dec134bc9e690b479a8113a9c671c36
[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.

llvm-svn: 225301
llvm/lib/Target/PowerPC/PPCISelLowering.cpp
llvm/lib/Target/PowerPC/PPCISelLowering.h
llvm/lib/Target/PowerPC/README.txt
llvm/test/CodeGen/PowerPC/no-extra-fp-conv-ldst.ll [new file with mode: 0644]