OLD | NEW |
1 //===- subzero/src/IceRegAlloc.cpp - Linear-scan implementation -----------===// | 1 //===- subzero/src/IceRegAlloc.cpp - Linear-scan implementation -----------===// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // This file implements the LinearScan class, which performs the | 10 // This file implements the LinearScan class, which performs the |
(...skipping 215 matching lines...) Loading... |
226 } | 226 } |
227 } | 227 } |
228 Str << "\n"; | 228 Str << "\n"; |
229 } | 229 } |
230 | 230 |
231 Variable *Prefer = Cur.Var->getPreferredRegister(); | 231 Variable *Prefer = Cur.Var->getPreferredRegister(); |
232 int32_t PreferReg = Prefer && Prefer->hasRegTmp() ? Prefer->getRegNumTmp() | 232 int32_t PreferReg = Prefer && Prefer->hasRegTmp() ? Prefer->getRegNumTmp() |
233 : Variable::NoRegister; | 233 : Variable::NoRegister; |
234 bool AllowedToOverlap = Cur.Var->getRegisterOverlap() && | 234 bool AllowedToOverlap = Cur.Var->getRegisterOverlap() && |
235 PreferReg != Variable::NoRegister && | 235 PreferReg != Variable::NoRegister && |
| 236 RegMask[PreferReg] && |
236 !PrecoloredUnhandled[PreferReg]; | 237 !PrecoloredUnhandled[PreferReg]; |
237 if (PreferReg != Variable::NoRegister && | 238 if (PreferReg != Variable::NoRegister && |
238 (AllowedToOverlap || Free[PreferReg])) { | 239 (AllowedToOverlap || Free[PreferReg])) { |
239 // First choice: a preferred register that is either free or is | 240 // First choice: a preferred register that is either free or is |
240 // allowed to overlap with its linked variable. | 241 // allowed to overlap with its linked variable. |
241 Cur.Var->setRegNumTmp(PreferReg); | 242 Cur.Var->setRegNumTmp(PreferReg); |
242 if (Func->getContext()->isVerbose(IceV_LinearScan)) { | 243 if (Func->getContext()->isVerbose(IceV_LinearScan)) { |
243 Str << "Preferring "; | 244 Str << "Preferring "; |
244 Cur.dump(Func); | 245 Cur.dump(Func); |
245 Str << "\n"; | 246 Str << "\n"; |
(...skipping 222 matching lines...) Loading... |
468 } | 469 } |
469 Str << "++++++ Inactive:\n"; | 470 Str << "++++++ Inactive:\n"; |
470 for (UnorderedRanges::const_iterator I = Inactive.begin(), E = Inactive.end(); | 471 for (UnorderedRanges::const_iterator I = Inactive.begin(), E = Inactive.end(); |
471 I != E; ++I) { | 472 I != E; ++I) { |
472 I->dump(Func); | 473 I->dump(Func); |
473 Str << "\n"; | 474 Str << "\n"; |
474 } | 475 } |
475 } | 476 } |
476 | 477 |
477 } // end of namespace Ice | 478 } // end of namespace Ice |
OLD | NEW |