mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-10-30 00:16:48 +00:00 
			
		
		
		
	Implement automatically updated def/use lists for all MachineInstr register
operands. The lists are currently kept in MachineRegisterInfo, but it does not yet provide an iterator interface to them. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45477 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		| @@ -1,4 +1,4 @@ | ||||
| //===-- MachineRegisterInfo.cpp -------------------------------------------===// | ||||
| //===-- lib/Codegen/MachineRegisterInfo.cpp -------------------------------===// | ||||
| // | ||||
| //                     The LLVM Compiler Infrastructure | ||||
| // | ||||
| @@ -17,4 +17,30 @@ using namespace llvm; | ||||
| MachineRegisterInfo::MachineRegisterInfo(const MRegisterInfo &MRI) { | ||||
|   VRegInfo.reserve(256); | ||||
|   UsedPhysRegs.resize(MRI.getNumRegs()); | ||||
|    | ||||
|   // Create the physreg use/def lists. | ||||
|   PhysRegUseDefLists = new MachineOperand*[MRI.getNumRegs()]; | ||||
|   memset(PhysRegUseDefLists, 0, sizeof(MachineOperand*)*MRI.getNumRegs()); | ||||
| } | ||||
|  | ||||
| MachineRegisterInfo::~MachineRegisterInfo() { | ||||
| #ifndef NDEBUG | ||||
|   for (unsigned i = 0, e = VRegInfo.size(); i != e; ++i) | ||||
|     assert(VRegInfo[i].second == 0 && "Vreg use list non-empty still?"); | ||||
| #endif | ||||
|   delete [] PhysRegUseDefLists; | ||||
| } | ||||
|  | ||||
| /// HandleVRegListReallocation - We just added a virtual register to the | ||||
| /// VRegInfo info list and it reallocated.  Update the use/def lists info | ||||
| /// pointers. | ||||
| void MachineRegisterInfo::HandleVRegListReallocation() { | ||||
|   // The back pointers for the vreg lists point into the previous vector. | ||||
|   // Update them to point to their correct slots. | ||||
|   for (unsigned i = 0, e = VRegInfo.size(); i != e; ++i) { | ||||
|     MachineOperand *List = VRegInfo[i].second; | ||||
|     if (!List) continue; | ||||
|     // Update the back-pointer to be accurate once more. | ||||
|     List->Contents.Reg.Prev = &VRegInfo[i].second; | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user