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

Side by Side Diff: runtime/vm/flow_graph_allocator.cc

Issue 10910119: Implement new optional parameters syntax in the vm (issue 4290). (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/flow_graph.cc ('k') | runtime/vm/flow_graph_builder.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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/flow_graph_allocator.h" 5 #include "vm/flow_graph_allocator.h"
6 6
7 #include "vm/bit_vector.h" 7 #include "vm/bit_vector.h"
8 #include "vm/intermediate_language.h" 8 #include "vm/intermediate_language.h"
9 #include "vm/il_printer.h" 9 #include "vm/il_printer.h"
10 #include "vm/flow_graph.h" 10 #include "vm/flow_graph.h"
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 ParameterInstr* param = val->definition()->AsParameter(); 524 ParameterInstr* param = val->definition()->AsParameter();
525 if (param == NULL) continue; 525 if (param == NULL) continue;
526 526
527 // Handle the parameters specially. They are spilled on entry. 527 // Handle the parameters specially. They are spilled on entry.
528 LiveRange* range = GetLiveRange(param->ssa_temp_index()); 528 LiveRange* range = GetLiveRange(param->ssa_temp_index());
529 range->AddUseInterval(graph_entry->start_pos(), graph_entry->end_pos()); 529 range->AddUseInterval(graph_entry->start_pos(), graph_entry->end_pos());
530 range->DefineAt(graph_entry->start_pos()); 530 range->DefineAt(graph_entry->start_pos());
531 531
532 // Assert that copied and non-copied parameters are mutually exclusive. 532 // Assert that copied and non-copied parameters are mutually exclusive.
533 // This might change in the future and, if so, the index will be wrong. 533 // This might change in the future and, if so, the index will be wrong.
534 ASSERT(flow_graph_.copied_parameter_count() == 0 || 534 ASSERT((flow_graph_.num_copied_params() == 0) ||
535 flow_graph_.non_copied_parameter_count() == 0); 535 (flow_graph_.num_non_copied_params() == 0));
536 // Slot index for the leftmost copied parameter is 0. 536 // Slot index for the leftmost copied parameter is 0.
537 intptr_t slot_index = param->index(); 537 intptr_t slot_index = param->index();
538 // Slot index for the rightmost fixed parameter is -1. 538 // Slot index for the rightmost fixed parameter is -1.
539 slot_index -= flow_graph_.non_copied_parameter_count(); 539 slot_index -= flow_graph_.num_non_copied_params();
540 540
541 range->set_assigned_location(Location::StackSlot(slot_index)); 541 range->set_assigned_location(Location::StackSlot(slot_index));
542 range->set_spill_slot(Location::StackSlot(slot_index)); 542 range->set_spill_slot(Location::StackSlot(slot_index));
543 if (flow_graph_.copied_parameter_count() > 0) { 543 if (flow_graph_.num_copied_params() > 0) {
544 ASSERT(spill_slots_.length() == slot_index); 544 ASSERT(spill_slots_.length() == slot_index);
545 spill_slots_.Add(range->End()); 545 spill_slots_.Add(range->End());
546 } 546 }
547 547
548 AssignSafepoints(range); 548 AssignSafepoints(range);
549 549
550 range->finger()->Initialize(range); 550 range->finger()->Initialize(range);
551 UsePosition* use = 551 UsePosition* use =
552 range->finger()->FirstRegisterBeneficialUse(graph_entry->start_pos()); 552 range->finger()->FirstRegisterBeneficialUse(graph_entry->start_pos());
553 if (use != NULL) { 553 if (use != NULL) {
554 LiveRange* tail = 554 LiveRange* tail =
555 SplitBetween(range, graph_entry->start_pos(), use->pos()); 555 SplitBetween(range, graph_entry->start_pos(), use->pos());
556 // All incoming parameters are tagged. 556 // All incoming parameters are tagged.
557 CompleteRange(tail, Location::kRegister); 557 CompleteRange(tail, Location::kRegister);
558 } 558 }
559 ConvertAllUses(range); 559 ConvertAllUses(range);
560 if (flow_graph_.copied_parameter_count() > 0) { 560 if (flow_graph_.num_copied_params() > 0) {
561 MarkAsObjectAtSafepoints(range); 561 MarkAsObjectAtSafepoints(range);
562 } 562 }
563 } 563 }
564 564
565 // Process global constants. 565 // Process global constants.
566 ConstantInstr* null_defn = graph_entry->constant_null(); 566 ConstantInstr* null_defn = graph_entry->constant_null();
567 LiveRange* range = GetLiveRange(null_defn->ssa_temp_index()); 567 LiveRange* range = GetLiveRange(null_defn->ssa_temp_index());
568 range->AddUseInterval(graph_entry->start_pos(), graph_entry->end_pos()); 568 range->AddUseInterval(graph_entry->start_pos(), graph_entry->end_pos());
569 range->DefineAt(graph_entry->start_pos()); 569 range->DefineAt(graph_entry->start_pos());
570 range->set_assigned_location(Location::Constant(null_defn->value())); 570 range->set_assigned_location(Location::Constant(null_defn->value()));
(...skipping 1612 matching lines...) Expand 10 before | Expand all | Expand 10 after
2183 OS::Print("-- [after ssa allocator] ir [%s] -------------\n", 2183 OS::Print("-- [after ssa allocator] ir [%s] -------------\n",
2184 function.ToFullyQualifiedCString()); 2184 function.ToFullyQualifiedCString());
2185 FlowGraphPrinter printer(flow_graph_, true); 2185 FlowGraphPrinter printer(flow_graph_, true);
2186 printer.PrintBlocks(); 2186 printer.PrintBlocks();
2187 OS::Print("----------------------------------------------\n"); 2187 OS::Print("----------------------------------------------\n");
2188 } 2188 }
2189 } 2189 }
2190 2190
2191 2191
2192 } // namespace dart 2192 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph.cc ('k') | runtime/vm/flow_graph_builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698