[PowerPC] Utilize DQ-Form instructions for spill/restore and fix FrameIndex eliminati...
authorLei Huang <lei@ca.ibm.com>
Wed, 11 Oct 2017 20:20:58 +0000 (20:20 +0000)
committerLei Huang <lei@ca.ibm.com>
Wed, 11 Oct 2017 20:20:58 +0000 (20:20 +0000)
commit263dc4ef3a049caf92fb6a7f71844e5637bcc6af
tree97783dc4ee3ac27aaf535c2cd01b08bc0ac6ff21
parentfa0ca6cbd01c6289ef4073073a84200a883eb3c5
[PowerPC] Utilize DQ-Form instructions for spill/restore and fix FrameIndex elimination to only use `lis/addi` if necessary.

Currently we produce a bunch of unnecessary code when emitting the
prologue/epilogue for spills/restores.  Namely, if the load from stack
slot/store to stack slot instruction is an X-Form instruction, we will
always produce an LIS/ORI sequence for the stack offset.

Furthermore, we have not exploited the P9 vector D-Form loads/stores for this
purpose.

This patch address both issues.

Specifying the D-Form load as the instruction to use for stack spills/reloads
should be safe because:

1. The stack should be aligned according to the ABI
2. If the stack isn't aligned, PPCRegisterInfo::eliminateFrameIndex() will
   check for the offset being a multiple of 16 and will convert it to an
   X-Form instruction if it isn't.

Differential Revision : https://reviews.llvm.org/D38758

llvm-svn: 315500
llvm/lib/Target/PowerPC/PPCInstrInfo.cpp
llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp
llvm/test/CodeGen/PowerPC/fast-isel-conversion.ll
llvm/test/CodeGen/PowerPC/vsx-spill.ll
llvm/test/CodeGen/PowerPC/vsx.ll
llvm/test/CodeGen/PowerPC/vsxD-Form-spills.ll [new file with mode: 0644]