RegScavenging: Add scavengeRegisterBackwards()
authorMatthias Braun <matze@braunis.de>
Thu, 18 Aug 2016 19:47:59 +0000 (19:47 +0000)
committerMatthias Braun <matze@braunis.de>
Thu, 18 Aug 2016 19:47:59 +0000 (19:47 +0000)
commit075d0c23d5885d926a3497bd3504df1d81f04270
tree04a1d26fe9e2675ee3ea0f58e51e823ab8ba7cf4
parent85d0f3140a0714818093089da991776f115dfa0e
RegScavenging: Add scavengeRegisterBackwards()

Re-apply r276044 with off-by-1 instruction fix for the reload placement.

This is a variant of scavengeRegister() that works for
enterBasicBlockEnd()/backward(). The benefit of the backward mode is
that it is not affected by incomplete kill flags.

This patch also changes
PrologEpilogInserter::doScavengeFrameVirtualRegs() to use the register
scavenger in backwards mode.

Differential Revision: http://reviews.llvm.org/D21885

llvm-svn: 279124
llvm/include/llvm/CodeGen/RegisterScavenging.h
llvm/lib/CodeGen/PrologEpilogInserter.cpp
llvm/lib/CodeGen/RegisterScavenging.cpp
llvm/test/CodeGen/AMDGPU/captured-frame-index.ll
llvm/test/CodeGen/Mips/emergency-spill-slot-near-fp.ll
llvm/test/CodeGen/PowerPC/dyn-alloca-aligned.ll
llvm/test/CodeGen/Thumb/large-stack.ll