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: src/hydrogen-gvn.cc

Issue 17827005: Get rid of ZoneScope completely. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Suggestions from danno Created 7 years, 6 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 | « src/hydrogen-gvn.h ('k') | src/isolate.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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 data_[i] = instr; 358 data_[i] = instr;
359 } 359 }
360 } 360 }
361 } 361 }
362 362
363 363
364 HGlobalValueNumberer::HGlobalValueNumberer(HGraph* graph, CompilationInfo* info) 364 HGlobalValueNumberer::HGlobalValueNumberer(HGraph* graph, CompilationInfo* info)
365 : graph_(graph), 365 : graph_(graph),
366 info_(info), 366 info_(info),
367 removed_side_effects_(false), 367 removed_side_effects_(false),
368 phase_zone_(info->phase_zone()), 368 zone_(graph->isolate()),
369 phase_zone_scope_(phase_zone_, DELETE_ON_EXIT), 369 block_side_effects_(graph->blocks()->length(), zone()),
370 block_side_effects_(graph->blocks()->length(), phase_zone_), 370 loop_side_effects_(graph->blocks()->length(), zone()),
371 loop_side_effects_(graph->blocks()->length(), phase_zone_), 371 visited_on_paths_(zone(), graph->blocks()->length()) {
372 visited_on_paths_(phase_zone_, graph->blocks()->length()) {
373 ASSERT(!AllowHandleAllocation::IsAllowed()); 372 ASSERT(!AllowHandleAllocation::IsAllowed());
374 block_side_effects_.AddBlock(GVNFlagSet(), graph_->blocks()->length(), 373 block_side_effects_.AddBlock(GVNFlagSet(), graph_->blocks()->length(),
375 phase_zone_); 374 zone());
376 loop_side_effects_.AddBlock(GVNFlagSet(), graph_->blocks()->length(), 375 loop_side_effects_.AddBlock(GVNFlagSet(), graph_->blocks()->length(),
377 phase_zone_); 376 zone());
378 } 377 }
379 378
380 bool HGlobalValueNumberer::Analyze() { 379 bool HGlobalValueNumberer::Analyze() {
381 removed_side_effects_ = false; 380 removed_side_effects_ = false;
382 ComputeBlockSideEffects(); 381 ComputeBlockSideEffects();
383 if (FLAG_loop_invariant_code_motion) { 382 if (FLAG_loop_invariant_code_motion) {
384 LoopInvariantCodeMotion(); 383 LoopInvariantCodeMotion();
385 } 384 }
386 AnalyzeGraph(); 385 AnalyzeGraph();
387 return removed_side_effects_; 386 return removed_side_effects_;
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 int dominated_index_; 750 int dominated_index_;
752 int length_; 751 int length_;
753 }; 752 };
754 753
755 // This is a recursive traversal of the dominator tree but it has been turned 754 // This is a recursive traversal of the dominator tree but it has been turned
756 // into a loop to avoid stack overflows. 755 // into a loop to avoid stack overflows.
757 // The logical "stack frames" of the recursion are kept in a list of 756 // The logical "stack frames" of the recursion are kept in a list of
758 // GvnBasicBlockState instances. 757 // GvnBasicBlockState instances.
759 void HGlobalValueNumberer::AnalyzeGraph() { 758 void HGlobalValueNumberer::AnalyzeGraph() {
760 HBasicBlock* entry_block = graph_->entry_block(); 759 HBasicBlock* entry_block = graph_->entry_block();
761 HValueMap* entry_map = new(phase_zone()) HValueMap(phase_zone()); 760 HValueMap* entry_map = new(zone()) HValueMap(zone());
762 GvnBasicBlockState* current = 761 GvnBasicBlockState* current =
763 GvnBasicBlockState::CreateEntry(phase_zone(), entry_block, entry_map); 762 GvnBasicBlockState::CreateEntry(zone(), entry_block, entry_map);
764 763
765 while (current != NULL) { 764 while (current != NULL) {
766 HBasicBlock* block = current->block(); 765 HBasicBlock* block = current->block();
767 HValueMap* map = current->map(); 766 HValueMap* map = current->map();
768 HSideEffectMap* dominators = current->dominators(); 767 HSideEffectMap* dominators = current->dominators();
769 768
770 TRACE_GVN_2("Analyzing block B%d%s\n", 769 TRACE_GVN_2("Analyzing block B%d%s\n",
771 block->block_id(), 770 block->block_id(),
772 block->IsLoopHeader() ? " (loop header)" : ""); 771 block->IsLoopHeader() ? " (loop header)" : "");
773 772
(...skipping 21 matching lines...) Expand all
795 if (other != NULL) { 794 if (other != NULL) {
796 ASSERT(instr->Equals(other) && other->Equals(instr)); 795 ASSERT(instr->Equals(other) && other->Equals(instr));
797 TRACE_GVN_4("Replacing value %d (%s) with value %d (%s)\n", 796 TRACE_GVN_4("Replacing value %d (%s) with value %d (%s)\n",
798 instr->id(), 797 instr->id(),
799 instr->Mnemonic(), 798 instr->Mnemonic(),
800 other->id(), 799 other->id(),
801 other->Mnemonic()); 800 other->Mnemonic());
802 if (instr->HasSideEffects()) removed_side_effects_ = true; 801 if (instr->HasSideEffects()) removed_side_effects_ = true;
803 instr->DeleteAndReplaceWith(other); 802 instr->DeleteAndReplaceWith(other);
804 } else { 803 } else {
805 map->Add(instr, phase_zone()); 804 map->Add(instr, zone());
806 } 805 }
807 } 806 }
808 if (instr->IsLinked() && 807 if (instr->IsLinked() &&
809 instr->CheckFlag(HValue::kTrackSideEffectDominators)) { 808 instr->CheckFlag(HValue::kTrackSideEffectDominators)) {
810 for (int i = 0; i < kNumberOfTrackedSideEffects; i++) { 809 for (int i = 0; i < kNumberOfTrackedSideEffects; i++) {
811 HValue* other = dominators->at(i); 810 HValue* other = dominators->at(i);
812 GVNFlag changes_flag = HValue::ChangesFlagFromInt(i); 811 GVNFlag changes_flag = HValue::ChangesFlagFromInt(i);
813 GVNFlag depends_on_flag = HValue::DependsOnFlagFromInt(i); 812 GVNFlag depends_on_flag = HValue::DependsOnFlagFromInt(i);
814 if (instr->DependsOnFlags().Contains(depends_on_flag) && 813 if (instr->DependsOnFlags().Contains(depends_on_flag) &&
815 (other != NULL)) { 814 (other != NULL)) {
816 TRACE_GVN_5("Side-effect #%d in %d (%s) is dominated by %d (%s)\n", 815 TRACE_GVN_5("Side-effect #%d in %d (%s) is dominated by %d (%s)\n",
817 i, 816 i,
818 instr->id(), 817 instr->id(),
819 instr->Mnemonic(), 818 instr->Mnemonic(),
820 other->id(), 819 other->id(),
821 other->Mnemonic()); 820 other->Mnemonic());
822 instr->SetSideEffectDominator(changes_flag, other); 821 instr->SetSideEffectDominator(changes_flag, other);
823 } 822 }
824 } 823 }
825 } 824 }
826 instr = next; 825 instr = next;
827 } 826 }
828 827
829 HBasicBlock* dominator_block; 828 HBasicBlock* dominator_block;
830 GvnBasicBlockState* next = 829 GvnBasicBlockState* next =
831 current->next_in_dominator_tree_traversal(phase_zone(), 830 current->next_in_dominator_tree_traversal(zone(),
832 &dominator_block); 831 &dominator_block);
833 832
834 if (next != NULL) { 833 if (next != NULL) {
835 HBasicBlock* dominated = next->block(); 834 HBasicBlock* dominated = next->block();
836 HValueMap* successor_map = next->map(); 835 HValueMap* successor_map = next->map();
837 HSideEffectMap* successor_dominators = next->dominators(); 836 HSideEffectMap* successor_dominators = next->dominators();
838 837
839 // Kill everything killed on any path between this block and the 838 // Kill everything killed on any path between this block and the
840 // dominated block. We don't have to traverse these paths if the 839 // dominated block. We don't have to traverse these paths if the
841 // value map and the dominators list is already empty. If the range 840 // value map and the dominators list is already empty. If the range
842 // of block ids (block_id, dominated_id) is empty there are no such 841 // of block ids (block_id, dominated_id) is empty there are no such
843 // paths. 842 // paths.
844 if ((!successor_map->IsEmpty() || !successor_dominators->IsEmpty()) && 843 if ((!successor_map->IsEmpty() || !successor_dominators->IsEmpty()) &&
845 dominator_block->block_id() + 1 < dominated->block_id()) { 844 dominator_block->block_id() + 1 < dominated->block_id()) {
846 visited_on_paths_.Clear(); 845 visited_on_paths_.Clear();
847 GVNFlagSet side_effects_on_all_paths = 846 GVNFlagSet side_effects_on_all_paths =
848 CollectSideEffectsOnPathsToDominatedBlock(dominator_block, 847 CollectSideEffectsOnPathsToDominatedBlock(dominator_block,
849 dominated); 848 dominated);
850 successor_map->Kill(side_effects_on_all_paths); 849 successor_map->Kill(side_effects_on_all_paths);
851 successor_dominators->Kill(side_effects_on_all_paths); 850 successor_dominators->Kill(side_effects_on_all_paths);
852 } 851 }
853 } 852 }
854 current = next; 853 current = next;
855 } 854 }
856 } 855 }
857 856
858 } } // namespace v8::internal 857 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/hydrogen-gvn.h ('k') | src/isolate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698