Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: src/IceRegAlloc.cpp

Issue 830303003: Subzero: Clean up a few areas. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Rewrite another loop using reverse_range() Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/IceOperand.h ('k') | src/IceTargetLoweringX8632.cpp » ('j') | 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 476 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 std::vector<RegWeight> Weights(RegMask.size()); 487 std::vector<RegWeight> Weights(RegMask.size());
488 488
489 // Remove registers from the Free[] list where an Unhandled 489 // Remove registers from the Free[] list where an Unhandled
490 // precolored range overlaps with the current range, and set those 490 // precolored range overlaps with the current range, and set those
491 // registers to infinite weight so that they aren't candidates for 491 // registers to infinite weight so that they aren't candidates for
492 // eviction. Cur->rangeEndsBefore(Item) is an early exit check 492 // eviction. Cur->rangeEndsBefore(Item) is an early exit check
493 // that turns a guaranteed O(N^2) algorithm into expected linear 493 // that turns a guaranteed O(N^2) algorithm into expected linear
494 // complexity. 494 // complexity.
495 llvm::SmallBitVector PrecoloredUnhandledMask(RegMask.size()); 495 llvm::SmallBitVector PrecoloredUnhandledMask(RegMask.size());
496 // Note: PrecoloredUnhandledMask is only used for dumping. 496 // Note: PrecoloredUnhandledMask is only used for dumping.
497 for (auto I = UnhandledPrecolored.rbegin(), E = UnhandledPrecolored.rend(); 497 for (Variable *Item : reverse_range(UnhandledPrecolored)) {
498 I != E; ++I) {
499 Variable *Item = *I;
500 assert(Item->hasReg()); 498 assert(Item->hasReg());
501 if (Cur->rangeEndsBefore(Item)) 499 if (Cur->rangeEndsBefore(Item))
502 break; 500 break;
503 if (Item->rangeOverlaps(Cur)) { 501 if (Item->rangeOverlaps(Cur)) {
504 int32_t ItemReg = Item->getRegNum(); // Note: not getRegNumTmp() 502 int32_t ItemReg = Item->getRegNum(); // Note: not getRegNumTmp()
505 Weights[ItemReg].setWeight(RegWeight::Inf); 503 Weights[ItemReg].setWeight(RegWeight::Inf);
506 Free[ItemReg] = false; 504 Free[ItemReg] = false;
507 PrecoloredUnhandledMask[ItemReg] = true; 505 PrecoloredUnhandledMask[ItemReg] = true;
508 // Disable AllowOverlap if the preferred register is one of 506 // Disable AllowOverlap if the preferred register is one of
509 // these precolored unhandled overlapping ranges. 507 // these precolored unhandled overlapping ranges.
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 if (!Func->getContext()->isVerbose(IceV_LinearScan)) 722 if (!Func->getContext()->isVerbose(IceV_LinearScan))
725 return; 723 return;
726 Func->resetCurrentNode(); 724 Func->resetCurrentNode();
727 Str << "**** Current regalloc state:\n"; 725 Str << "**** Current regalloc state:\n";
728 Str << "++++++ Handled:\n"; 726 Str << "++++++ Handled:\n";
729 for (const Variable *Item : Handled) { 727 for (const Variable *Item : Handled) {
730 dumpLiveRange(Item, Func); 728 dumpLiveRange(Item, Func);
731 Str << "\n"; 729 Str << "\n";
732 } 730 }
733 Str << "++++++ Unhandled:\n"; 731 Str << "++++++ Unhandled:\n";
734 for (auto I = Unhandled.rbegin(), E = Unhandled.rend(); I != E; ++I) { 732 for (const Variable *Item : reverse_range(Unhandled)) {
735 dumpLiveRange(*I, Func); 733 dumpLiveRange(Item, Func);
736 Str << "\n"; 734 Str << "\n";
737 } 735 }
738 Str << "++++++ Active:\n"; 736 Str << "++++++ Active:\n";
739 for (const Variable *Item : Active) { 737 for (const Variable *Item : Active) {
740 dumpLiveRange(Item, Func); 738 dumpLiveRange(Item, Func);
741 Str << "\n"; 739 Str << "\n";
742 } 740 }
743 Str << "++++++ Inactive:\n"; 741 Str << "++++++ Inactive:\n";
744 for (const Variable *Item : Inactive) { 742 for (const Variable *Item : Inactive) {
745 dumpLiveRange(Item, Func); 743 dumpLiveRange(Item, Func);
746 Str << "\n"; 744 Str << "\n";
747 } 745 }
748 } 746 }
749 747
750 } // end of namespace Ice 748 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceOperand.h ('k') | src/IceTargetLoweringX8632.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698