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

Side by Side Diff: src/compiler/live-range-separator.cc

Issue 1319843002: [turbofan] LiveRange splintering optimizations. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 3 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 | « no previous file | src/compiler/register-allocator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/live-range-separator.h" 5 #include "src/compiler/live-range-separator.h"
6 #include "src/compiler/register-allocator.h" 6 #include "src/compiler/register-allocator.h"
7 7
8 namespace v8 { 8 namespace v8 {
9 namespace internal { 9 namespace internal {
10 namespace compiler { 10 namespace compiler {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 InstructionSequence *code = data->code(); 111 InstructionSequence *code = data->code();
112 int code_block_count = code->InstructionBlockCount(); 112 int code_block_count = code->InstructionBlockCount();
113 Zone *zone = data->allocation_zone(); 113 Zone *zone = data->allocation_zone();
114 ZoneVector<BitVector *> &in_sets = data->live_in_sets(); 114 ZoneVector<BitVector *> &in_sets = data->live_in_sets();
115 115
116 for (int i = 0; i < code_block_count; ++i) { 116 for (int i = 0; i < code_block_count; ++i) {
117 InstructionBlock *block = code->InstructionBlockAt(RpoNumber::FromInt(i)); 117 InstructionBlock *block = code->InstructionBlockAt(RpoNumber::FromInt(i));
118 if (!block->IsDeferred()) continue; 118 if (!block->IsDeferred()) continue;
119 119
120 RpoNumber last_deferred = block->last_deferred(); 120 RpoNumber last_deferred = block->last_deferred();
121 i = last_deferred.ToInt(); 121 // last_deferred + 1 is not deferred, so no point in visiting it.
122 i = last_deferred.ToInt() + 1;
122 123
123 LifetimePosition first_cut = LifetimePosition::GapFromInstructionIndex( 124 LifetimePosition first_cut = LifetimePosition::GapFromInstructionIndex(
124 block->first_instruction_index()); 125 block->first_instruction_index());
125 126
126 LifetimePosition last_cut = LifetimePosition::GapFromInstructionIndex( 127 LifetimePosition last_cut = LifetimePosition::GapFromInstructionIndex(
127 static_cast<int>(code->instructions().size())); 128 static_cast<int>(code->instructions().size()));
128 129
129 const BitVector *in_set = in_sets[i]; 130 const BitVector *in_set = in_sets[block->rpo_number().ToInt()];
130 InstructionBlock *last = code->InstructionBlockAt(last_deferred); 131 InstructionBlock *last = code->InstructionBlockAt(last_deferred);
131 const BitVector *out_set = LiveRangeBuilder::ComputeLiveOut(last, data); 132 const BitVector *out_set = LiveRangeBuilder::ComputeLiveOut(last, data);
132 last_cut = LifetimePosition::GapFromInstructionIndex( 133 last_cut = LifetimePosition::GapFromInstructionIndex(
133 last->last_instruction_index()); 134 last->last_instruction_index());
134 135
135 BitVector ranges_to_splinter(*in_set, zone); 136 BitVector ranges_to_splinter(*in_set, zone);
136 ranges_to_splinter.Union(*out_set); 137 ranges_to_splinter.Union(*out_set);
137 BitVector::Iterator iterator(&ranges_to_splinter); 138 BitVector::Iterator iterator(&ranges_to_splinter);
138 139
139 while (!iterator.Done()) { 140 while (!iterator.Done()) {
(...skipping 24 matching lines...) Expand all
164 TopLevelLiveRange *splinter_parent = range->splintered_from(); 165 TopLevelLiveRange *splinter_parent = range->splintered_from();
165 166
166 splinter_parent->Merge(range, data()); 167 splinter_parent->Merge(range, data());
167 } 168 }
168 } 169 }
169 170
170 171
171 } // namespace compiler 172 } // namespace compiler
172 } // namespace internal 173 } // namespace internal
173 } // namespace v8 174 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/compiler/register-allocator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698