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

Side by Side Diff: src/compiler.cc

Issue 16482004: Revert "Enable map dependency to in-flight compilation info." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: 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/compiler.h ('k') | src/hydrogen.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 global_scope_ = NULL; 99 global_scope_ = NULL;
100 extension_ = NULL; 100 extension_ = NULL;
101 pre_parse_data_ = NULL; 101 pre_parse_data_ = NULL;
102 zone_ = zone; 102 zone_ = zone;
103 deferred_handles_ = NULL; 103 deferred_handles_ = NULL;
104 code_stub_ = NULL; 104 code_stub_ = NULL;
105 prologue_offset_ = kPrologueOffsetNotSet; 105 prologue_offset_ = kPrologueOffsetNotSet;
106 opt_count_ = shared_info().is_null() ? 0 : shared_info()->opt_count(); 106 opt_count_ = shared_info().is_null() ? 0 : shared_info()->opt_count();
107 no_frame_ranges_ = isolate->cpu_profiler()->is_profiling() 107 no_frame_ranges_ = isolate->cpu_profiler()->is_profiling()
108 ? new List<OffsetRange>(2) : NULL; 108 ? new List<OffsetRange>(2) : NULL;
109 for (int i = 0; i < DependentCode::kGroupCount; i++) {
110 dependent_maps_[i] = NULL;
111 }
112 if (mode == STUB) { 109 if (mode == STUB) {
113 mode_ = STUB; 110 mode_ = STUB;
114 return; 111 return;
115 } 112 }
116 mode_ = V8::UseCrankshaft() ? mode : NONOPT; 113 mode_ = V8::UseCrankshaft() ? mode : NONOPT;
117 if (script_->type()->value() == Script::TYPE_NATIVE) { 114 if (script_->type()->value() == Script::TYPE_NATIVE) {
118 MarkAsNative(); 115 MarkAsNative();
119 } 116 }
120 if (!shared_info_.is_null()) { 117 if (!shared_info_.is_null()) {
121 ASSERT(language_mode() == CLASSIC_MODE); 118 ASSERT(language_mode() == CLASSIC_MODE);
122 SetLanguageMode(shared_info_->language_mode()); 119 SetLanguageMode(shared_info_->language_mode());
123 } 120 }
124 set_bailout_reason("unknown"); 121 set_bailout_reason("unknown");
125 } 122 }
126 123
127 124
128 CompilationInfo::~CompilationInfo() { 125 CompilationInfo::~CompilationInfo() {
129 delete deferred_handles_; 126 delete deferred_handles_;
130 delete no_frame_ranges_; 127 delete no_frame_ranges_;
131 #ifdef DEBUG
132 // Check that no dependent maps have been added or added dependent maps have
133 // been rolled back or committed.
134 for (int i = 0; i < DependentCode::kGroupCount; i++) {
135 ASSERT_EQ(NULL, dependent_maps_[i]);
136 }
137 #endif // DEBUG
138 } 128 }
139 129
140 130
141 void CompilationInfo::CommitDependentMaps(Handle<Code> code) {
142 for (int i = 0; i < DependentCode::kGroupCount; i++) {
143 ZoneList<Handle<Map> >* group_maps = dependent_maps_[i];
144 if (group_maps == NULL) continue;
145 ASSERT(!object_wrapper_.is_null());
146 for (int j = 0; j < group_maps->length(); j++) {
147 group_maps->at(j)->dependent_code()->UpdateToFinishedCode(
148 static_cast<DependentCode::DependencyGroup>(i), this, *code);
149 }
150 dependent_maps_[i] = NULL; // Zone-allocated, no need to delete.
151 }
152 }
153
154
155 void CompilationInfo::RollbackDependentMaps() {
156 // Unregister from all dependent maps if not yet committed.
157 for (int i = 0; i < DependentCode::kGroupCount; i++) {
158 ZoneList<Handle<Map> >* group_maps = dependent_maps_[i];
159 if (group_maps == NULL) continue;
160 for (int j = 0; j < group_maps->length(); j++) {
161 group_maps->at(j)->dependent_code()->RemoveCompilationInfo(
162 static_cast<DependentCode::DependencyGroup>(i), this);
163 }
164 dependent_maps_[i] = NULL; // Zone-allocated, no need to delete.
165 }
166 }
167
168
169 int CompilationInfo::num_parameters() const { 131 int CompilationInfo::num_parameters() const {
170 ASSERT(!IsStub()); 132 ASSERT(!IsStub());
171 return scope()->num_parameters(); 133 return scope()->num_parameters();
172 } 134 }
173 135
174 136
175 int CompilationInfo::num_heap_slots() const { 137 int CompilationInfo::num_heap_slots() const {
176 if (IsStub()) { 138 if (IsStub()) {
177 return 0; 139 return 0;
178 } else { 140 } else {
(...skipping 834 matching lines...) Expand 10 before | Expand all | Expand 10 after
1013 975
1014 if (isolate->has_pending_exception()) isolate->clear_pending_exception(); 976 if (isolate->has_pending_exception()) isolate->clear_pending_exception();
1015 } 977 }
1016 978
1017 979
1018 void Compiler::InstallOptimizedCode(OptimizingCompiler* optimizing_compiler) { 980 void Compiler::InstallOptimizedCode(OptimizingCompiler* optimizing_compiler) {
1019 SmartPointer<CompilationInfo> info(optimizing_compiler->info()); 981 SmartPointer<CompilationInfo> info(optimizing_compiler->info());
1020 // The function may have already been optimized by OSR. Simply continue. 982 // The function may have already been optimized by OSR. Simply continue.
1021 // Except when OSR already disabled optimization for some reason. 983 // Except when OSR already disabled optimization for some reason.
1022 if (info->shared_info()->optimization_disabled()) { 984 if (info->shared_info()->optimization_disabled()) {
1023 info->AbortOptimization(); 985 info->SetCode(Handle<Code>(info->shared_info()->code()));
1024 InstallFullCode(*info); 986 InstallFullCode(*info);
1025 if (FLAG_trace_parallel_recompilation) { 987 if (FLAG_trace_parallel_recompilation) {
1026 PrintF(" ** aborting optimization for "); 988 PrintF(" ** aborting optimization for ");
1027 info->closure()->PrintName(); 989 info->closure()->PrintName();
1028 PrintF(" as it has been disabled.\n"); 990 PrintF(" as it has been disabled.\n");
1029 } 991 }
1030 ASSERT(!info->closure()->IsMarkedForInstallingRecompiledCode()); 992 ASSERT(!info->closure()->IsMarkedForInstallingRecompiledCode());
1031 return; 993 return;
1032 } 994 }
1033 995
1034 Isolate* isolate = info->isolate(); 996 Isolate* isolate = info->isolate();
1035 VMState<COMPILER> state(isolate); 997 VMState<COMPILER> state(isolate);
1036 Logger::TimerEventScope timer( 998 Logger::TimerEventScope timer(
1037 isolate, Logger::TimerEventScope::v8_recompile_synchronous); 999 isolate, Logger::TimerEventScope::v8_recompile_synchronous);
1038 // If crankshaft succeeded, install the optimized code else install 1000 // If crankshaft succeeded, install the optimized code else install
1039 // the unoptimized code. 1001 // the unoptimized code.
1040 OptimizingCompiler::Status status = optimizing_compiler->last_status(); 1002 OptimizingCompiler::Status status = optimizing_compiler->last_status();
1041 if (info->HasAbortedDueToDependentMap()) { 1003 if (status != OptimizingCompiler::SUCCEEDED) {
1042 info->set_bailout_reason("bailed out due to dependent map"); 1004 optimizing_compiler->info()->set_bailout_reason(
1043 status = optimizing_compiler->AbortOptimization(); 1005 "failed/bailed out last time");
1044 } else if (status != OptimizingCompiler::SUCCEEDED) {
1045 info->set_bailout_reason("failed/bailed out last time");
1046 status = optimizing_compiler->AbortOptimization(); 1006 status = optimizing_compiler->AbortOptimization();
1047 } else { 1007 } else {
1048 status = optimizing_compiler->GenerateAndInstallCode(); 1008 status = optimizing_compiler->GenerateAndInstallCode();
1049 ASSERT(status == OptimizingCompiler::SUCCEEDED || 1009 ASSERT(status == OptimizingCompiler::SUCCEEDED ||
1050 status == OptimizingCompiler::BAILED_OUT); 1010 status == OptimizingCompiler::BAILED_OUT);
1051 } 1011 }
1052 1012
1053 InstallCodeCommon(*info); 1013 InstallCodeCommon(*info);
1054 if (status == OptimizingCompiler::SUCCEEDED) { 1014 if (status == OptimizingCompiler::SUCCEEDED) {
1055 Handle<Code> code = info->code(); 1015 Handle<Code> code = info->code();
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1201 } 1161 }
1202 } 1162 }
1203 1163
1204 GDBJIT(AddCode(Handle<String>(shared->DebugName()), 1164 GDBJIT(AddCode(Handle<String>(shared->DebugName()),
1205 Handle<Script>(info->script()), 1165 Handle<Script>(info->script()),
1206 Handle<Code>(info->code()), 1166 Handle<Code>(info->code()),
1207 info)); 1167 info));
1208 } 1168 }
1209 1169
1210 } } // namespace v8::internal 1170 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/compiler.h ('k') | src/hydrogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698