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

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

Issue 539153002: Port and integrate the irregexp engine from V8 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated to current version Created 6 years, 2 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 (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 live_in->Add(defn->ssa_temp_index()); 211 live_in->Add(defn->ssa_temp_index());
212 if (defn->HasPairRepresentation()) { 212 if (defn->HasPairRepresentation()) {
213 live_in->Add(ToSecondPairVreg(defn->ssa_temp_index())); 213 live_in->Add(ToSecondPairVreg(defn->ssa_temp_index()));
214 } 214 }
215 } 215 }
216 } 216 }
217 } 217 }
218 } 218 }
219 219
220 // Handle phis. 220 // Handle phis.
221 if (block->IsJoinEntry()) { 221 if (block->IsJoinEntry() || block->IsIndirectEntry()) {
222 JoinEntryInstr* join = block->AsJoinEntry(); 222 JoinEntryInstr* join = block->AsJoinEntry();
223 for (PhiIterator it(join); !it.Done(); it.Advance()) { 223 for (PhiIterator it(join); !it.Done(); it.Advance()) {
224 // TODO(johnmccutchan): Fix handling of PhiInstr with PairLocation. 224 // TODO(johnmccutchan): Fix handling of PhiInstr with PairLocation.
225 PhiInstr* phi = it.Current(); 225 PhiInstr* phi = it.Current();
226 ASSERT(phi != NULL); 226 ASSERT(phi != NULL);
227 kill->Add(phi->ssa_temp_index()); 227 kill->Add(phi->ssa_temp_index());
228 live_in->Remove(phi->ssa_temp_index()); 228 live_in->Remove(phi->ssa_temp_index());
229 229
230 // If a phi input is not defined by the corresponding predecessor it 230 // If a phi input is not defined by the corresponding predecessor it
231 // must be marked live-in for that predecessor. 231 // must be marked live-in for that predecessor.
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 for (BitVector::Iterator it(liveness_.GetLiveInSetAt(i)); 568 for (BitVector::Iterator it(liveness_.GetLiveInSetAt(i));
569 !it.Done(); 569 !it.Done();
570 it.Advance()) { 570 it.Advance()) {
571 LiveRange* range = GetLiveRange(it.Current()); 571 LiveRange* range = GetLiveRange(it.Current());
572 if (HasOnlyUnconstrainedUsesInLoop(range, block_info)) { 572 if (HasOnlyUnconstrainedUsesInLoop(range, block_info)) {
573 range->MarkHasOnlyUnconstrainedUsesInLoop(block_info->loop_id()); 573 range->MarkHasOnlyUnconstrainedUsesInLoop(block_info->loop_id());
574 } 574 }
575 } 575 }
576 } 576 }
577 577
578 if (block->IsJoinEntry()) { 578 if (block->IsJoinEntry() || block->IsIndirectEntry()) {
579 ConnectIncomingPhiMoves(block->AsJoinEntry()); 579 ConnectIncomingPhiMoves(block->AsJoinEntry());
580 } else if (block->IsCatchBlockEntry()) { 580 } else if (block->IsCatchBlockEntry()) {
581 // Process initial definitions. 581 // Process initial definitions.
582 CatchBlockEntryInstr* catch_entry = block->AsCatchBlockEntry(); 582 CatchBlockEntryInstr* catch_entry = block->AsCatchBlockEntry();
583 for (intptr_t i = 0; 583 for (intptr_t i = 0;
584 i < catch_entry->initial_definitions()->length(); 584 i < catch_entry->initial_definitions()->length();
585 i++) { 585 i++) {
586 Definition* defn = (*catch_entry->initial_definitions())[i]; 586 Definition* defn = (*catch_entry->initial_definitions())[i];
587 LiveRange* range = GetLiveRange(defn->ssa_temp_index()); 587 LiveRange* range = GetLiveRange(defn->ssa_temp_index());
588 range->DefineAt(catch_entry->start_pos()); // Defined at block entry. 588 range->DefineAt(catch_entry->start_pos()); // Defined at block entry.
(...skipping 2251 matching lines...) Expand 10 before | Expand all | Expand 10 after
2840 for (intptr_t i = 0; 2840 for (intptr_t i = 0;
2841 i < catch_entry->initial_definitions()->length(); 2841 i < catch_entry->initial_definitions()->length();
2842 ++i) { 2842 ++i) {
2843 Definition* def = (*catch_entry->initial_definitions())[i]; 2843 Definition* def = (*catch_entry->initial_definitions())[i];
2844 ASSERT(!def->HasPairRepresentation()); 2844 ASSERT(!def->HasPairRepresentation());
2845 value_representations_[def->ssa_temp_index()] = 2845 value_representations_[def->ssa_temp_index()] =
2846 RepresentationForRange(def->representation()); 2846 RepresentationForRange(def->representation());
2847 } 2847 }
2848 } 2848 }
2849 // Phis. 2849 // Phis.
2850 if (block->IsJoinEntry()) { 2850 if (block->IsJoinEntry() || block->IsIndirectEntry()) {
2851 JoinEntryInstr* join = block->AsJoinEntry(); 2851 JoinEntryInstr* join = block->AsJoinEntry();
2852 for (PhiIterator it(join); !it.Done(); it.Advance()) { 2852 for (PhiIterator it(join); !it.Done(); it.Advance()) {
2853 // TODO(johnmccutchan): Fix handling of PhiInstr with PairLocation. 2853 // TODO(johnmccutchan): Fix handling of PhiInstr with PairLocation.
2854 PhiInstr* phi = it.Current(); 2854 PhiInstr* phi = it.Current();
2855 if ((phi != NULL) && (phi->ssa_temp_index() >= 0)) { 2855 if ((phi != NULL) && (phi->ssa_temp_index() >= 0)) {
2856 ASSERT(!phi->HasPairRepresentation()); 2856 ASSERT(!phi->HasPairRepresentation());
2857 value_representations_[phi->ssa_temp_index()] = 2857 value_representations_[phi->ssa_temp_index()] =
2858 RepresentationForRange(phi->representation()); 2858 RepresentationForRange(phi->representation());
2859 } 2859 }
2860 } 2860 }
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
2945 OS::Print("-- [after ssa allocator] ir [%s] -------------\n", 2945 OS::Print("-- [after ssa allocator] ir [%s] -------------\n",
2946 function.ToFullyQualifiedCString()); 2946 function.ToFullyQualifiedCString());
2947 FlowGraphPrinter printer(flow_graph_, true); 2947 FlowGraphPrinter printer(flow_graph_, true);
2948 printer.PrintBlocks(); 2948 printer.PrintBlocks();
2949 OS::Print("----------------------------------------------\n"); 2949 OS::Print("----------------------------------------------\n");
2950 } 2950 }
2951 } 2951 }
2952 2952
2953 2953
2954 } // namespace dart 2954 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698