Chromium Code Reviews

Side by Side Diff: src/IceRegAlloc.cpp

Issue 544713002: Subzero: Make sure register preferences obey register class constraints. (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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...)
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...)
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
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine