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

Side by Side Diff: src/hydrogen.cc

Issue 24350014: Use Unique<Object> in HConstant and remove UniqueValueId. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 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
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 631 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 642
643 HConstant* HGraph::GetConstantMinus1() { 643 HConstant* HGraph::GetConstantMinus1() {
644 return GetConstant(&constant_minus1_, -1); 644 return GetConstant(&constant_minus1_, -1);
645 } 645 }
646 646
647 647
648 #define DEFINE_GET_CONSTANT(Name, name, htype, boolean_value) \ 648 #define DEFINE_GET_CONSTANT(Name, name, htype, boolean_value) \
649 HConstant* HGraph::GetConstant##Name() { \ 649 HConstant* HGraph::GetConstant##Name() { \
650 if (!constant_##name##_.is_set()) { \ 650 if (!constant_##name##_.is_set()) { \
651 HConstant* constant = new(zone()) HConstant( \ 651 HConstant* constant = new(zone()) HConstant( \
652 isolate()->factory()->name##_value(), \ 652 Unique<Object>::CreateImmovable(isolate()->factory()->name##_value()), \
653 UniqueValueId::name##_value(isolate()->heap()), \
654 Representation::Tagged(), \ 653 Representation::Tagged(), \
655 htype, \ 654 htype, \
656 false, \ 655 false, \
657 true, \ 656 true, \
658 false, \ 657 false, \
659 boolean_value); \ 658 boolean_value); \
660 constant->InsertAfter(GetConstantUndefined()); \ 659 constant->InsertAfter(GetConstantUndefined()); \
661 constant_##name##_.set(constant); \ 660 constant_##name##_.set(constant); \
662 } \ 661 } \
663 return constant_##name##_.get(); \ 662 return constant_##name##_.get(); \
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 finished_ = true; 1031 finished_ = true;
1033 } 1032 }
1034 1033
1035 1034
1036 HGraph* HGraphBuilder::CreateGraph() { 1035 HGraph* HGraphBuilder::CreateGraph() {
1037 graph_ = new(zone()) HGraph(info_); 1036 graph_ = new(zone()) HGraph(info_);
1038 if (FLAG_hydrogen_stats) isolate()->GetHStatistics()->Initialize(info_); 1037 if (FLAG_hydrogen_stats) isolate()->GetHStatistics()->Initialize(info_);
1039 CompilationPhase phase("H_Block building", info_); 1038 CompilationPhase phase("H_Block building", info_);
1040 set_current_block(graph()->entry_block()); 1039 set_current_block(graph()->entry_block());
1041 if (!BuildGraph()) return NULL; 1040 if (!BuildGraph()) return NULL;
1042 graph()->FinalizeUniqueValueIds(); 1041 graph()->FinalizeUniqueness();
1043 return graph_; 1042 return graph_;
1044 } 1043 }
1045 1044
1046 1045
1047 HInstruction* HGraphBuilder::AddInstruction(HInstruction* instr) { 1046 HInstruction* HGraphBuilder::AddInstruction(HInstruction* instr) {
1048 ASSERT(current_block() != NULL); 1047 ASSERT(current_block() != NULL);
1049 current_block()->AddInstruction(instr); 1048 current_block()->AddInstruction(instr);
1050 if (graph()->IsInsideNoSideEffectsScope()) { 1049 if (graph()->IsInsideNoSideEffectsScope()) {
1051 instr->SetFlag(HValue::kHasNoObservableSideEffects); 1050 instr->SetFlag(HValue::kHasNoObservableSideEffects);
1052 } 1051 }
(...skipping 1097 matching lines...) Expand 10 before | Expand all | Expand 10 after
2150 } 2149 }
2151 2150
2152 2151
2153 HBasicBlock* HGraph::CreateBasicBlock() { 2152 HBasicBlock* HGraph::CreateBasicBlock() {
2154 HBasicBlock* result = new(zone()) HBasicBlock(this); 2153 HBasicBlock* result = new(zone()) HBasicBlock(this);
2155 blocks_.Add(result, zone()); 2154 blocks_.Add(result, zone());
2156 return result; 2155 return result;
2157 } 2156 }
2158 2157
2159 2158
2160 void HGraph::FinalizeUniqueValueIds() { 2159 void HGraph::FinalizeUniqueness() {
2161 DisallowHeapAllocation no_gc; 2160 DisallowHeapAllocation no_gc;
2162 ASSERT(!isolate()->optimizing_compiler_thread()->IsOptimizerThread()); 2161 ASSERT(!isolate()->optimizing_compiler_thread()->IsOptimizerThread());
2163 for (int i = 0; i < blocks()->length(); ++i) { 2162 for (int i = 0; i < blocks()->length(); ++i) {
2164 for (HInstructionIterator it(blocks()->at(i)); !it.Done(); it.Advance()) { 2163 for (HInstructionIterator it(blocks()->at(i)); !it.Done(); it.Advance()) {
2165 it.Current()->FinalizeUniqueValueId(); 2164 it.Current()->FinalizeUniqueness();
2166 } 2165 }
2167 } 2166 }
2168 } 2167 }
2169 2168
2170 2169
2171 // Block ordering was implemented with two mutually recursive methods, 2170 // Block ordering was implemented with two mutually recursive methods,
2172 // HGraph::Postorder and HGraph::PostorderLoopBlocks. 2171 // HGraph::Postorder and HGraph::PostorderLoopBlocks.
2173 // The recursion could lead to stack overflow so the algorithm has been 2172 // The recursion could lead to stack overflow so the algorithm has been
2174 // implemented iteratively. 2173 // implemented iteratively.
2175 // At a high level the algorithm looks like this: 2174 // At a high level the algorithm looks like this:
(...skipping 7598 matching lines...) Expand 10 before | Expand all | Expand 10 after
9774 if (ShouldProduceTraceOutput()) { 9773 if (ShouldProduceTraceOutput()) {
9775 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 9774 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
9776 } 9775 }
9777 9776
9778 #ifdef DEBUG 9777 #ifdef DEBUG
9779 graph_->Verify(false); // No full verify. 9778 graph_->Verify(false); // No full verify.
9780 #endif 9779 #endif
9781 } 9780 }
9782 9781
9783 } } // namespace v8::internal 9782 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/hydrogen.h ('k') | src/hydrogen-instructions.h » ('j') | src/hydrogen-instructions.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698