[PowerPC] Better lowering for add/or of a FrameIndex
authorHal Finkel <hfinkel@anl.gov>
Thu, 11 Dec 2014 22:51:06 +0000 (22:51 +0000)
committerHal Finkel <hfinkel@anl.gov>
Thu, 11 Dec 2014 22:51:06 +0000 (22:51 +0000)
commitf329765d2304e2ab3eccd7760727513539874c93
tree9706d92bc8740ccee5bbcc23a4ef702aee02cffd
parent934da0fc3fe79a4ad6955f315ff9cc2dd61dfa86
[PowerPC] Better lowering for add/or of a FrameIndex

If we have an add (or an or that is really an add), where one operand is a
FrameIndex and the other operand is a small constant, we can combine the
lowering of the FrameIndex (which is lowered as an add of the FI and a zero
offset) with the constant operand.

Amusingly, this is an old potential improvement entry from
lib/Target/PowerPC/README.txt which had never been resolved. In short, we used
to lower:

        %X = alloca { i32, i32 }
        %Y = getelementptr {i32,i32}* %X, i32 0, i32 1
        ret i32* %Y

as:

        addi 3, 1, -8
        ori 3, 3, 4
        blr

and now we produce:

        addi 3, 1, -4
        blr

which is much more sensible.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224071 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/PowerPC/PPCISelDAGToDAG.cpp
lib/Target/PowerPC/README.txt
test/CodeGen/PowerPC/add-fi.ll [new file with mode: 0644]
test/CodeGen/PowerPC/ppc64-vaarg-int.ll