diff options
| author | Matthias Braun <matze@braunis.de> | 2016-07-06 21:31:27 +0000 |
|---|---|---|
| committer | Matthias Braun <matze@braunis.de> | 2016-07-06 21:31:27 +0000 |
| commit | 332bb5c2364d2d213f768948acbe25b35474cd53 (patch) | |
| tree | e758a68f04a99da32f2fe35bae78cafeea2ec635 /llvm/lib/CodeGen | |
| parent | f296a7eeae5e850b2460513cac4ebc13e7240788 (diff) | |
| download | bcm5719-llvm-332bb5c2364d2d213f768948acbe25b35474cd53.tar.gz bcm5719-llvm-332bb5c2364d2d213f768948acbe25b35474cd53.zip | |
AArch64: Replace a RegScavenger instance with LivePhysRegs
findScratchNonCalleeSaveRegister() just needs a simple liveness
analysis, use LivePhysRegs for that as it is simpler and does not depend
on the kill flags.
This commit adds a convenience function available() to LivePhysRegs:
This function returns true if the given register is not reserved and
neither the register nor any of its aliases are alive.
Differential Revision: http://reviews.llvm.org/D21865
llvm-svn: 274685
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/LivePhysRegs.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/LivePhysRegs.cpp b/llvm/lib/CodeGen/LivePhysRegs.cpp index eb2955045fd..57faef3c297 100644 --- a/llvm/lib/CodeGen/LivePhysRegs.cpp +++ b/llvm/lib/CodeGen/LivePhysRegs.cpp @@ -17,6 +17,7 @@ #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" #include "llvm/CodeGen/MachineInstrBundle.h" +#include "llvm/CodeGen/MachineRegisterInfo.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; @@ -126,6 +127,19 @@ LLVM_DUMP_METHOD void LivePhysRegs::dump() const { #endif } +bool LivePhysRegs::available(const MachineRegisterInfo &MRI, + unsigned Reg) const { + if (LiveRegs.count(Reg)) + return false; + if (MRI.isReserved(Reg)) + return false; + for (MCRegAliasIterator R(Reg, TRI, false); R.isValid(); ++R) { + if (LiveRegs.count(*R)) + return false; + } + return true; +} + /// Add live-in registers of basic block \p MBB to \p LiveRegs. static void addLiveIns(LivePhysRegs &LiveRegs, const MachineBasicBlock &MBB) { for (const auto &LI : MBB.liveins()) |

