aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/CodeGen/MachineRegisterInfo.h
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2013-06-17 20:41:25 +0000
committerBill Wendling <isanbard@gmail.com>2013-06-17 20:41:25 +0000
commitd10fa8b1caf010fe4943ae5526c2c3b921339f72 (patch)
tree2ce25013aca5dbd5bd2b6b0b89d981cc05b5917e /include/llvm/CodeGen/MachineRegisterInfo.h
parent99ccd5d5ef01881b3464b6e6a5b13b9d2c77387e (diff)
downloadexternal_llvm-d10fa8b1caf010fe4943ae5526c2c3b921339f72.zip
external_llvm-d10fa8b1caf010fe4943ae5526c2c3b921339f72.tar.gz
external_llvm-d10fa8b1caf010fe4943ae5526c2c3b921339f72.tar.bz2
Directly access objects which may change during compilation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184121 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/CodeGen/MachineRegisterInfo.h')
-rw-r--r--include/llvm/CodeGen/MachineRegisterInfo.h21
1 files changed, 15 insertions, 6 deletions
diff --git a/include/llvm/CodeGen/MachineRegisterInfo.h b/include/llvm/CodeGen/MachineRegisterInfo.h
index 24ba7bb..95c1ffd 100644
--- a/include/llvm/CodeGen/MachineRegisterInfo.h
+++ b/include/llvm/CodeGen/MachineRegisterInfo.h
@@ -17,6 +17,7 @@
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/IndexedMap.h"
#include "llvm/CodeGen/MachineInstrBundle.h"
+#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetRegisterInfo.h"
#include <vector>
@@ -26,7 +27,7 @@ namespace llvm {
/// registers, including vreg register classes, use/def chains for registers,
/// etc.
class MachineRegisterInfo {
- const TargetRegisterInfo *const TRI;
+ const TargetMachine &TM;
/// IsSSA - True when the machine function is in SSA form and virtual
/// registers have a single def.
@@ -57,6 +58,10 @@ class MachineRegisterInfo {
/// physical registers.
MachineOperand **PhysRegUseDefLists;
+ const TargetRegisterInfo *getTargetRegisterInfo() const {
+ return TM.getRegisterInfo();
+ }
+
/// getRegUseDefListHead - Return the head pointer for the register use/def
/// list for the specified virtual or physical register.
MachineOperand *&getRegUseDefListHead(unsigned RegNo) {
@@ -108,7 +113,7 @@ class MachineRegisterInfo {
MachineRegisterInfo(const MachineRegisterInfo&) LLVM_DELETED_FUNCTION;
void operator=(const MachineRegisterInfo&) LLVM_DELETED_FUNCTION;
public:
- explicit MachineRegisterInfo(const TargetRegisterInfo &TRI);
+ explicit MachineRegisterInfo(const TargetMachine &TM);
~MachineRegisterInfo();
//===--------------------------------------------------------------------===//
@@ -377,7 +382,8 @@ public:
bool isPhysRegUsed(unsigned Reg) const {
if (UsedPhysRegMask.test(Reg))
return true;
- for (MCRegUnitIterator Units(Reg, TRI); Units.isValid(); ++Units)
+ for (MCRegUnitIterator Units(Reg, getTargetRegisterInfo());
+ Units.isValid(); ++Units)
if (UsedRegUnits.test(*Units))
return true;
return false;
@@ -392,7 +398,8 @@ public:
/// setPhysRegUsed - Mark the specified register used in this function.
/// This should only be called during and after register allocation.
void setPhysRegUsed(unsigned Reg) {
- for (MCRegUnitIterator Units(Reg, TRI); Units.isValid(); ++Units)
+ for (MCRegUnitIterator Units(Reg, getTargetRegisterInfo());
+ Units.isValid(); ++Units)
UsedRegUnits.set(*Units);
}
@@ -406,7 +413,8 @@ public:
/// This should only be called during and after register allocation.
void setPhysRegUnused(unsigned Reg) {
UsedPhysRegMask.reset(Reg);
- for (MCRegUnitIterator Units(Reg, TRI); Units.isValid(); ++Units)
+ for (MCRegUnitIterator Units(Reg, getTargetRegisterInfo());
+ Units.isValid(); ++Units)
UsedRegUnits.reset(*Units);
}
@@ -466,7 +474,8 @@ public:
/// register, so a register allocator needs to track its liveness and
/// availability.
bool isAllocatable(unsigned PhysReg) const {
- return TRI->isInAllocatableClass(PhysReg) && !isReserved(PhysReg);
+ return getTargetRegisterInfo()->isInAllocatableClass(PhysReg) &&
+ !isReserved(PhysReg);
}
//===--------------------------------------------------------------------===//