[PowerPC] Fix FrameIndex handling in SelectAddressRegImm
authorUlrich Weigand <ulrich.weigand@de.ibm.com>
Sun, 20 Jul 2014 22:26:40 +0000 (22:26 +0000)
committerUlrich Weigand <ulrich.weigand@de.ibm.com>
Sun, 20 Jul 2014 22:26:40 +0000 (22:26 +0000)
commite4b2165648e81542e654006ab753152ab48d63fa
treecc7d61547631bdf354f2d8d4f4ed5c83f6da99dc
parentc543b262e1763bff740d6567da87f4606da2c4e3
[PowerPC] Fix FrameIndex handling in SelectAddressRegImm

The PPCTargetLowering::SelectAddressRegImm routine needs to handle
FrameIndex nodes in a special manner, by tranlating them into a
TargetFrameIndex node.  This was done in most cases, but seems to
have been neglected in one path: when the input tree has an OR of
the FrameIndex with an immediate.  This can happen if the FrameIndex
can be proven to be sufficiently aligned that an OR of that immediate
is equivalent to an ADD.

The missing handling of FrameIndex in that case caused the SelectionDAG
instruction selection to miss opportunities to merge the OR back into
the FrameIndex node, leading to superfluous addi/ori instructions in
the final assembler output.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213482 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/PowerPC/PPCISelLowering.cpp
test/CodeGen/PowerPC/anon_aggr.ll
test/CodeGen/PowerPC/complex-return.ll
test/CodeGen/PowerPC/vsx.ll