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

Side by Side Diff: src/hydrogen-bce.cc

Issue 358363002: Move platform abstraction to base library (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: updates Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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/hydrogen-bce.h" 5 #include "src/hydrogen-bce.h"
6 6
7 namespace v8 { 7 namespace v8 {
8 namespace internal { 8 namespace internal {
9 9
10 10
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 TightenCheck(lower_check_, new_check, new_offset); 163 TightenCheck(lower_check_, new_check, new_offset);
164 UpdateLowerOffsets(lower_check_, lower_offset_); 164 UpdateLowerOffsets(lower_check_, lower_offset_);
165 } 165 }
166 } else { 166 } else {
167 // Should never have called CoverCheck() in this case. 167 // Should never have called CoverCheck() in this case.
168 UNREACHABLE(); 168 UNREACHABLE();
169 } 169 }
170 170
171 if (!keep_new_check) { 171 if (!keep_new_check) {
172 if (FLAG_trace_bce) { 172 if (FLAG_trace_bce) {
173 OS::Print("Eliminating check #%d after tightening\n", 173 base::OS::Print("Eliminating check #%d after tightening\n",
174 new_check->id()); 174 new_check->id());
175 } 175 }
176 new_check->block()->graph()->isolate()->counters()-> 176 new_check->block()->graph()->isolate()->counters()->
177 bounds_checks_eliminated()->Increment(); 177 bounds_checks_eliminated()->Increment();
178 new_check->DeleteAndReplaceWith(new_check->ActualValue()); 178 new_check->DeleteAndReplaceWith(new_check->ActualValue());
179 } else { 179 } else {
180 HBoundsCheck* first_check = new_check == lower_check_ ? upper_check_ 180 HBoundsCheck* first_check = new_check == lower_check_ ? upper_check_
181 : lower_check_; 181 : lower_check_;
182 if (FLAG_trace_bce) { 182 if (FLAG_trace_bce) {
183 OS::Print("Moving second check #%d after first check #%d\n", 183 base::OS::Print("Moving second check #%d after first check #%d\n",
184 new_check->id(), first_check->id()); 184 new_check->id(), first_check->id());
185 } 185 }
186 // The length is guaranteed to be live at first_check. 186 // The length is guaranteed to be live at first_check.
187 ASSERT(new_check->length() == first_check->length()); 187 ASSERT(new_check->length() == first_check->length());
188 HInstruction* old_position = new_check->next(); 188 HInstruction* old_position = new_check->next();
189 new_check->Unlink(); 189 new_check->Unlink();
190 new_check->InsertAfter(first_check); 190 new_check->InsertAfter(first_check);
191 MoveIndexIfNecessary(new_check->index(), new_check, old_position); 191 MoveIndexIfNecessary(new_check->index(), new_check, old_position);
192 } 192 }
193 } 193 }
194 194
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 } 276 }
277 277
278 void TightenCheck(HBoundsCheck* original_check, 278 void TightenCheck(HBoundsCheck* original_check,
279 HBoundsCheck* tighter_check, 279 HBoundsCheck* tighter_check,
280 int32_t new_offset) { 280 int32_t new_offset) {
281 ASSERT(original_check->length() == tighter_check->length()); 281 ASSERT(original_check->length() == tighter_check->length());
282 MoveIndexIfNecessary(tighter_check->index(), original_check, tighter_check); 282 MoveIndexIfNecessary(tighter_check->index(), original_check, tighter_check);
283 original_check->ReplaceAllUsesWith(original_check->index()); 283 original_check->ReplaceAllUsesWith(original_check->index());
284 original_check->SetOperandAt(0, tighter_check->index()); 284 original_check->SetOperandAt(0, tighter_check->index());
285 if (FLAG_trace_bce) { 285 if (FLAG_trace_bce) {
286 OS::Print("Tightened check #%d with offset %d from #%d\n", 286 base::OS::Print("Tightened check #%d with offset %d from #%d\n",
287 original_check->id(), new_offset, tighter_check->id()); 287 original_check->id(), new_offset, tighter_check->id());
288 } 288 }
289 } 289 }
290 290
291 DISALLOW_COPY_AND_ASSIGN(BoundsCheckBbData); 291 DISALLOW_COPY_AND_ASSIGN(BoundsCheckBbData);
292 }; 292 };
293 293
294 294
295 static bool BoundsCheckKeyMatch(void* key1, void* key2) { 295 static bool BoundsCheckKeyMatch(void* key1, void* key2) {
296 BoundsCheckKey* k1 = static_cast<BoundsCheckKey*>(key1); 296 BoundsCheckKey* k1 = static_cast<BoundsCheckKey*>(key1);
297 BoundsCheckKey* k2 = static_cast<BoundsCheckKey*>(key2); 297 BoundsCheckKey* k2 = static_cast<BoundsCheckKey*>(key2);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 bb_data_list = new(zone()) BoundsCheckBbData(key, 389 bb_data_list = new(zone()) BoundsCheckBbData(key,
390 offset, 390 offset,
391 offset, 391 offset,
392 bb, 392 bb,
393 check, 393 check,
394 check, 394 check,
395 bb_data_list, 395 bb_data_list,
396 NULL); 396 NULL);
397 *data_p = bb_data_list; 397 *data_p = bb_data_list;
398 if (FLAG_trace_bce) { 398 if (FLAG_trace_bce) {
399 OS::Print("Fresh bounds check data for block #%d: [%d]\n", 399 base::OS::Print("Fresh bounds check data for block #%d: [%d]\n",
400 bb->block_id(), offset); 400 bb->block_id(), offset);
401 } 401 }
402 } else if (data->OffsetIsCovered(offset)) { 402 } else if (data->OffsetIsCovered(offset)) {
403 bb->graph()->isolate()->counters()-> 403 bb->graph()->isolate()->counters()->
404 bounds_checks_eliminated()->Increment(); 404 bounds_checks_eliminated()->Increment();
405 if (FLAG_trace_bce) { 405 if (FLAG_trace_bce) {
406 OS::Print("Eliminating bounds check #%d, offset %d is covered\n", 406 base::OS::Print("Eliminating bounds check #%d, offset %d is covered\n",
407 check->id(), offset); 407 check->id(), offset);
408 } 408 }
409 check->DeleteAndReplaceWith(check->ActualValue()); 409 check->DeleteAndReplaceWith(check->ActualValue());
410 } else if (data->BasicBlock() == bb) { 410 } else if (data->BasicBlock() == bb) {
411 // TODO(jkummerow): I think the following logic would be preferable: 411 // TODO(jkummerow): I think the following logic would be preferable:
412 // if (data->Basicblock() == bb || 412 // if (data->Basicblock() == bb ||
413 // graph()->use_optimistic_licm() || 413 // graph()->use_optimistic_licm() ||
414 // bb->IsLoopSuccessorDominator()) { 414 // bb->IsLoopSuccessorDominator()) {
415 // data->CoverCheck(check, offset) 415 // data->CoverCheck(check, offset)
416 // } else { 416 // } else {
417 // /* add pristine BCBbData like in (data == NULL) case above */ 417 // /* add pristine BCBbData like in (data == NULL) case above */
(...skipping 14 matching lines...) Expand all
432 : data->UpperOffset(); 432 : data->UpperOffset();
433 bb_data_list = new(zone()) BoundsCheckBbData(key, 433 bb_data_list = new(zone()) BoundsCheckBbData(key,
434 new_lower_offset, 434 new_lower_offset,
435 new_upper_offset, 435 new_upper_offset,
436 bb, 436 bb,
437 data->LowerCheck(), 437 data->LowerCheck(),
438 data->UpperCheck(), 438 data->UpperCheck(),
439 bb_data_list, 439 bb_data_list,
440 data); 440 data);
441 if (FLAG_trace_bce) { 441 if (FLAG_trace_bce) {
442 OS::Print("Updated bounds check data for block #%d: [%d - %d]\n", 442 base::OS::Print("Updated bounds check data for block #%d: [%d - %d]\n",
443 bb->block_id(), new_lower_offset, new_upper_offset); 443 bb->block_id(), new_lower_offset, new_upper_offset);
444 } 444 }
445 table_.Insert(key, bb_data_list, zone()); 445 table_.Insert(key, bb_data_list, zone());
446 } 446 }
447 } 447 }
448 448
449 return bb_data_list; 449 return bb_data_list;
450 } 450 }
451 451
452 452
453 void HBoundsCheckEliminationPhase::PostProcessBlock( 453 void HBoundsCheckEliminationPhase::PostProcessBlock(
454 HBasicBlock* block, BoundsCheckBbData* data) { 454 HBasicBlock* block, BoundsCheckBbData* data) {
455 while (data != NULL) { 455 while (data != NULL) {
456 if (data->FatherInDominatorTree()) { 456 if (data->FatherInDominatorTree()) {
457 table_.Insert(data->Key(), data->FatherInDominatorTree(), zone()); 457 table_.Insert(data->Key(), data->FatherInDominatorTree(), zone());
458 } else { 458 } else {
459 table_.Delete(data->Key()); 459 table_.Delete(data->Key());
460 } 460 }
461 data = data->NextInBasicBlock(); 461 data = data->NextInBasicBlock();
462 } 462 }
463 } 463 }
464 464
465 } } // namespace v8::internal 465 } } // namespace v8::internal
OLDNEW
« src/base/macros.h ('K') | « src/hydrogen.cc ('k') | src/hydrogen-gvn.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698