Use newly added API in MRegisterInfo.
authorAlkis Evlogimenos <alkis@evlogimenos.com>
Thu, 26 Aug 2004 22:22:38 +0000 (22:22 +0000)
committerAlkis Evlogimenos <alkis@evlogimenos.com>
Thu, 26 Aug 2004 22:22:38 +0000 (22:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16060 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/LiveIntervalAnalysis.h
lib/CodeGen/LiveIntervalAnalysis.cpp
lib/CodeGen/LiveIntervalAnalysis.h

index 37b64571aa6748aa9bfb73d2c80a373960182139..73d730a647ecb4d679794a12907c50bc506033f6 100644 (file)
@@ -47,6 +47,8 @@ namespace llvm {
     typedef std::map<unsigned, unsigned> Reg2RegMap;
     Reg2RegMap r2rMap_;
 
+    std::vector<bool> allocatableRegs_;
+
   public:
     struct InstrSlots
     {
index 6cf95d20903eeb2eabd0cb7d8bb75f077ac40af3..14bccf6fa96b3de5566a447e6ade3e516d8194b2 100644 (file)
@@ -87,6 +87,7 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
   tm_ = &fn.getTarget();
   mri_ = tm_->getRegisterInfo();
   lv_ = &getAnalysis<LiveVariables>();
+  allocatableRegs_ = mri_->getAllocatableSet(fn);
 
   // number MachineInstrs
   unsigned miIndex = 0;
@@ -484,7 +485,7 @@ void LiveIntervals::handleRegisterDef(MachineBasicBlock *MBB,
                                       unsigned reg) {
   if (MRegisterInfo::isVirtualRegister(reg))
     handleVirtualRegisterDef(MBB, MI, getOrCreateInterval(reg));
-  else if (lv_->getAllocatablePhysicalRegisters()[reg]) {
+  else if (allocatableRegs_[reg]) {
     handlePhysicalRegisterDef(MBB, MI, getOrCreateInterval(reg));
     for (const unsigned* AS = mri_->getAliasSet(reg); *AS; ++AS)
       handlePhysicalRegisterDef(MBB, MI, getOrCreateInterval(*AS));
@@ -541,10 +542,8 @@ void LiveIntervals::joinIntervalsInMachineBB(MachineBasicBlock *MBB) {
     // on not allocatable physical registers
     unsigned regA, regB;
     if (TII.isMoveInstr(*mi, regA, regB) &&
-        (MRegisterInfo::isVirtualRegister(regA) ||
-         lv_->getAllocatablePhysicalRegisters()[regA]) &&
-        (MRegisterInfo::isVirtualRegister(regB) ||
-         lv_->getAllocatablePhysicalRegisters()[regB])) {
+        (MRegisterInfo::isVirtualRegister(regA) || allocatableRegs_[regA]) &&
+        (MRegisterInfo::isVirtualRegister(regB) || allocatableRegs_[regB])) {
 
       // Get representative registers.
       regA = rep(regA);
index 37b64571aa6748aa9bfb73d2c80a373960182139..73d730a647ecb4d679794a12907c50bc506033f6 100644 (file)
@@ -47,6 +47,8 @@ namespace llvm {
     typedef std::map<unsigned, unsigned> Reg2RegMap;
     Reg2RegMap r2rMap_;
 
+    std::vector<bool> allocatableRegs_;
+
   public:
     struct InstrSlots
     {