MachineFrameInfo: Simplify pristine register calculation.
authorMatthias Braun <matze@braunis.de>
Thu, 28 May 2015 23:20:35 +0000 (23:20 +0000)
committerMatthias Braun <matze@braunis.de>
Thu, 28 May 2015 23:20:35 +0000 (23:20 +0000)
commit97c5de758a9c3d4ad14fa97abc0b81a2204aeb1f
tree6b98eb03f29dbd1b789bc6d0af5651a33a4948ff
parent7984aa9d58495c83553b109c5ba9fddb02453f6e
MachineFrameInfo: Simplify pristine register calculation.

About pristine regsiters:
Pristine registers "hold a value that is useless to the current
function, but that must be preserved - they are callee saved registers
that have not been saved." This concept saves compile time as it frees
the prologue/epilogue inserter from adding every such register to every
basic blocks live-in list.

However the current code in getPristineRegs is formulated in a
complicated way: Inside the function prologue and epilogue all callee
saves are considered pristine, while in the rest of the code only the
non-saved ones are considered pristine.  This requires logic to
differentiate between prologue/epilogue and the rest and in the presence
of shrink-wrapping this even becomes complicated/expensive.  It's also
unnecessary because the prologue epilogue inserters already mark
callee-save registers that are saved/restores properly in the respective
blocks in the prologue/epilogue (see updateLiveness() in
PrologueEpilogueInserter.cpp). So only declaring non-saved/restored
callee saved registers as pristine just works.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238524 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/MachineFrameInfo.h
lib/CodeGen/AggressiveAntiDepBreaker.cpp
lib/CodeGen/CriticalAntiDepBreaker.cpp
lib/CodeGen/MachineFunction.cpp
lib/CodeGen/MachineVerifier.cpp
lib/CodeGen/RegisterScavenging.cpp