mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-03 14:21:30 +00:00 
			
		
		
		
	Move getSubRegIndex out of generated code into MCRegisterInfo, devirtualize it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151821 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		@@ -248,6 +248,16 @@ public:
 | 
				
			|||||||
    return *(SubRegIndices + (Reg - 1) * NumSubRegIndices + Idx - 1);
 | 
					    return *(SubRegIndices + (Reg - 1) * NumSubRegIndices + Idx - 1);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// getSubRegIndex - For a given register pair, return the sub-register index
 | 
				
			||||||
 | 
					  /// if the second register is a sub-register of the first. Return zero
 | 
				
			||||||
 | 
					  /// otherwise.
 | 
				
			||||||
 | 
					  unsigned getSubRegIndex(unsigned RegNo, unsigned SubRegNo) const {
 | 
				
			||||||
 | 
					    for (unsigned I = 1; I <= NumSubRegIndices; ++I)
 | 
				
			||||||
 | 
					      if (getSubReg(RegNo, I) == SubRegNo)
 | 
				
			||||||
 | 
					        return I;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /// getSuperRegisters - Return the list of registers that are super-registers
 | 
					  /// getSuperRegisters - Return the list of registers that are super-registers
 | 
				
			||||||
  /// of the specified register, or a null list of there are none. The list
 | 
					  /// of the specified register, or a null list of there are none. The list
 | 
				
			||||||
  /// returned is zero terminated and sorted according to super-sub register
 | 
					  /// returned is zero terminated and sorted according to super-sub register
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -383,11 +383,6 @@ public:
 | 
				
			|||||||
  /// used by register scavenger to determine what registers are free.
 | 
					  /// used by register scavenger to determine what registers are free.
 | 
				
			||||||
  virtual BitVector getReservedRegs(const MachineFunction &MF) const = 0;
 | 
					  virtual BitVector getReservedRegs(const MachineFunction &MF) const = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /// getSubRegIndex - For a given register pair, return the sub-register index
 | 
					 | 
				
			||||||
  /// if the second register is a sub-register of the first. Return zero
 | 
					 | 
				
			||||||
  /// otherwise.
 | 
					 | 
				
			||||||
  virtual unsigned getSubRegIndex(unsigned RegNo, unsigned SubRegNo) const = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /// getMatchingSuperReg - Return a super-register of the specified register
 | 
					  /// getMatchingSuperReg - Return a super-register of the specified register
 | 
				
			||||||
  /// Reg so its sub-register of index SubIdx is Reg.
 | 
					  /// Reg so its sub-register of index SubIdx is Reg.
 | 
				
			||||||
  unsigned getMatchingSuperReg(unsigned Reg, unsigned SubIdx,
 | 
					  unsigned getMatchingSuperReg(unsigned Reg, unsigned SubIdx,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -486,7 +486,6 @@ RegisterInfoEmitter::runTargetHeader(raw_ostream &OS, CodeGenTarget &Target,
 | 
				
			|||||||
     << "(unsigned RA, unsigned D = 0, unsigned E = 0);\n"
 | 
					     << "(unsigned RA, unsigned D = 0, unsigned E = 0);\n"
 | 
				
			||||||
     << "  virtual bool needsStackRealignment(const MachineFunction &) const\n"
 | 
					     << "  virtual bool needsStackRealignment(const MachineFunction &) const\n"
 | 
				
			||||||
     << "     { return false; }\n"
 | 
					     << "     { return false; }\n"
 | 
				
			||||||
     << "  unsigned getSubRegIndex(unsigned RegNo, unsigned SubRegNo) const;\n"
 | 
					 | 
				
			||||||
     << "  unsigned composeSubRegIndices(unsigned, unsigned) const;\n"
 | 
					     << "  unsigned composeSubRegIndices(unsigned, unsigned) const;\n"
 | 
				
			||||||
     << "  const TargetRegisterClass *"
 | 
					     << "  const TargetRegisterClass *"
 | 
				
			||||||
        "getSubClassWithSubReg(const TargetRegisterClass*, unsigned) const;\n"
 | 
					        "getSubClassWithSubReg(const TargetRegisterClass*, unsigned) const;\n"
 | 
				
			||||||
@@ -766,16 +765,6 @@ RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  std::string ClassName = Target.getName() + "GenRegisterInfo";
 | 
					  std::string ClassName = Target.getName() + "GenRegisterInfo";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  OS << "unsigned " << ClassName
 | 
					 | 
				
			||||||
     << "::getSubRegIndex(unsigned RegNo, unsigned SubRegNo) const {\n";
 | 
					 | 
				
			||||||
  if (SubRegIndices.size()) {
 | 
					 | 
				
			||||||
    OS << "  for (unsigned I = 1; I <= " << SubRegIndices.size() << "; ++I)\n"
 | 
					 | 
				
			||||||
       << "    if (getSubReg(RegNo, I) == SubRegNo)\n"
 | 
					 | 
				
			||||||
       << "      return I;\n";
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  OS << "  return 0;\n";
 | 
					 | 
				
			||||||
  OS << "}\n\n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Emit composeSubRegIndices
 | 
					  // Emit composeSubRegIndices
 | 
				
			||||||
  OS << "unsigned " << ClassName
 | 
					  OS << "unsigned " << ClassName
 | 
				
			||||||
     << "::composeSubRegIndices(unsigned IdxA, unsigned IdxB) const {\n"
 | 
					     << "::composeSubRegIndices(unsigned IdxA, unsigned IdxB) const {\n"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user