diff options
author | Chris Lattner <sabre@nondot.org> | 2005-01-23 22:45:13 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-01-23 22:45:13 +0000 |
commit | b0f31bf19b9cd0107900728123d4848eae462e6c (patch) | |
tree | f29cc2a0f3ce60a0c643f835852678b5aaad643e /lib/CodeGen/RegAllocLinearScan.cpp | |
parent | ce9c41e77a2ec75d48a173b9baf0f4a3bf49fac7 (diff) |
Update these register allocators to set the PhysRegUsed info in MachineFunction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19791 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/RegAllocLinearScan.cpp')
-rw-r--r-- | lib/CodeGen/RegAllocLinearScan.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/CodeGen/RegAllocLinearScan.cpp b/lib/CodeGen/RegAllocLinearScan.cpp index 0878e466d2..cf7a264e4e 100644 --- a/lib/CodeGen/RegAllocLinearScan.cpp +++ b/lib/CodeGen/RegAllocLinearScan.cpp @@ -48,6 +48,7 @@ namespace { const TargetMachine* tm_; const MRegisterInfo* mri_; LiveIntervals* li_; + bool *PhysRegsUsed; /// handled_ - Intervals are added to the handled_ set in the order of their /// start value. This is uses for backtracking. @@ -139,6 +140,10 @@ bool RA::runOnMachineFunction(MachineFunction &fn) { mri_ = tm_->getRegisterInfo(); li_ = &getAnalysis<LiveIntervals>(); + PhysRegsUsed = new bool[mri_->getNumRegs()]; + std::fill(PhysRegsUsed, PhysRegsUsed+mri_->getNumRegs(), false); + fn.setUsedPhysRegs(PhysRegsUsed); + if (!prt_.get()) prt_.reset(new PhysRegTracker(*mri_)); vrm_.reset(new VirtRegMap(*mf_)); if (!spiller_.get()) spiller_.reset(createSpiller()); @@ -147,6 +152,7 @@ bool RA::runOnMachineFunction(MachineFunction &fn) { linearScan(); + // Rewrite spill code and update the PhysRegsUsed set. spiller_->runOnMachineFunction(*mf_, *vrm_); vrm_.reset(); // Free the VirtRegMap @@ -170,9 +176,10 @@ void RA::initIntervalSets() "interval sets should be empty on initialization"); for (LiveIntervals::iterator i = li_->begin(), e = li_->end(); i != e; ++i) { - if (MRegisterInfo::isPhysicalRegister(i->second.reg)) + if (MRegisterInfo::isPhysicalRegister(i->second.reg)) { + PhysRegsUsed[i->second.reg] = true; fixed_.push_back(std::make_pair(&i->second, i->second.begin())); - else + } else unhandled_.push(&i->second); } } |