Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/compiler.h" | 5 #include "vm/compiler.h" |
| 6 | 6 |
| 7 #include "vm/assembler.h" | 7 #include "vm/assembler.h" |
| 8 | 8 |
| 9 #include "vm/ast_printer.h" | 9 #include "vm/ast_printer.h" |
| 10 #include "vm/block_scheduler.h" | 10 #include "vm/block_scheduler.h" |
| (...skipping 955 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 966 intptr_t osr_id) { | 966 intptr_t osr_id) { |
| 967 Thread* volatile thread = Thread::Current(); | 967 Thread* volatile thread = Thread::Current(); |
| 968 Isolate* volatile isolate = thread->isolate(); | 968 Isolate* volatile isolate = thread->isolate(); |
| 969 StackZone stack_zone(isolate); | 969 StackZone stack_zone(isolate); |
| 970 Zone* volatile zone = stack_zone.GetZone(); | 970 Zone* volatile zone = stack_zone.GetZone(); |
| 971 LongJumpScope jump; | 971 LongJumpScope jump; |
| 972 if (setjmp(*jump.Set()) == 0) { | 972 if (setjmp(*jump.Set()) == 0) { |
| 973 TIMERSCOPE(isolate, time_compilation); | 973 TIMERSCOPE(isolate, time_compilation); |
| 974 Timer per_compile_timer(FLAG_trace_compiler, "Compilation time"); | 974 Timer per_compile_timer(FLAG_trace_compiler, "Compilation time"); |
| 975 per_compile_timer.Start(); | 975 per_compile_timer.Start(); |
| 976 | |
| 976 ParsedFunction* parsed_function = new(zone) ParsedFunction( | 977 ParsedFunction* parsed_function = new(zone) ParsedFunction( |
| 977 thread, Function::ZoneHandle(zone, function.raw())); | 978 thread, Function::ZoneHandle(zone, function.raw())); |
| 978 if (FLAG_trace_compiler) { | 979 if (FLAG_trace_compiler) { |
| 979 ISL_Print("Compiling %s%sfunction: '%s' @ token %" Pd ", size %" Pd "\n", | 980 ISL_Print("Compiling %s%sfunction: '%s' @ token %" Pd ", size %" Pd "\n", |
| 980 (osr_id == Isolate::kNoDeoptId ? "" : "osr "), | 981 (osr_id == Isolate::kNoDeoptId ? "" : "osr "), |
| 981 (optimized ? "optimized " : ""), | 982 (optimized ? "optimized " : ""), |
| 982 function.ToFullyQualifiedCString(), | 983 function.ToFullyQualifiedCString(), |
| 983 function.token_pos(), | 984 function.token_pos(), |
| 984 (function.end_token_pos() - function.token_pos())); | 985 (function.end_token_pos() - function.token_pos())); |
| 985 } | 986 } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1045 | 1046 |
| 1046 RawError* Compiler::CompileFunction(Thread* thread, | 1047 RawError* Compiler::CompileFunction(Thread* thread, |
| 1047 const Function& function) { | 1048 const Function& function) { |
| 1048 VMTagScope tagScope(thread->isolate(), VMTag::kCompileUnoptimizedTagId); | 1049 VMTagScope tagScope(thread->isolate(), VMTag::kCompileUnoptimizedTagId); |
| 1049 CompilationPipeline* pipeline = | 1050 CompilationPipeline* pipeline = |
| 1050 CompilationPipeline::New(thread->zone(), function); | 1051 CompilationPipeline::New(thread->zone(), function); |
| 1051 return CompileFunctionHelper(pipeline, function, false, Isolate::kNoDeoptId); | 1052 return CompileFunctionHelper(pipeline, function, false, Isolate::kNoDeoptId); |
| 1052 } | 1053 } |
| 1053 | 1054 |
| 1054 | 1055 |
| 1056 void Compiler::EnsureUnoptimizedCode(Thread* thread, | |
| 1057 const Function& function) { | |
| 1058 if (function.unoptimized_code() != Object::null()) { | |
| 1059 return; | |
| 1060 } | |
| 1061 Code& original_code = Code::ZoneHandle(); | |
|
srdjan
2015/04/02 17:43:40
pass thread->zone() to it.
Florian Schneider
2015/04/07 09:07:57
Done.
| |
| 1062 if (function.HasCode()) { | |
| 1063 original_code = function.CurrentCode(); | |
| 1064 } | |
| 1065 CompilationPipeline* pipeline = | |
| 1066 CompilationPipeline::New(thread->zone(), function); | |
| 1067 const Error& error = Error::Handle( | |
| 1068 CompileFunctionHelper(pipeline, function, false, Isolate::kNoDeoptId)); | |
| 1069 if (!error.IsNull()) { | |
| 1070 Exceptions::PropagateError(error); | |
| 1071 } | |
| 1072 if (!original_code.IsNull() && | |
|
Ivan Posva
2015/04/02 17:14:00
This logic here is really hard to follow. Please e
Florian Schneider
2015/04/07 09:07:57
Done.
| |
| 1073 (original_code.raw() != function.CurrentCode())) { | |
| 1074 function.AttachCode(original_code); | |
| 1075 } | |
| 1076 ASSERT(function.unoptimized_code() != Object::null()); | |
| 1077 if (FLAG_trace_compiler) { | |
| 1078 ISL_Print("Ensure unoptimized code for %s\n", function.ToCString()); | |
| 1079 } | |
| 1080 } | |
| 1081 | |
| 1082 | |
| 1055 RawError* Compiler::CompileOptimizedFunction(Thread* thread, | 1083 RawError* Compiler::CompileOptimizedFunction(Thread* thread, |
| 1056 const Function& function, | 1084 const Function& function, |
| 1057 intptr_t osr_id) { | 1085 intptr_t osr_id) { |
| 1058 VMTagScope tagScope(thread->isolate(), VMTag::kCompileOptimizedTagId); | 1086 VMTagScope tagScope(thread->isolate(), VMTag::kCompileOptimizedTagId); |
| 1059 CompilationPipeline* pipeline = | 1087 CompilationPipeline* pipeline = |
| 1060 CompilationPipeline::New(thread->zone(), function); | 1088 CompilationPipeline::New(thread->zone(), function); |
| 1061 return CompileFunctionHelper(pipeline, function, true, osr_id); | 1089 return CompileFunctionHelper(pipeline, function, true, osr_id); |
| 1062 } | 1090 } |
| 1063 | 1091 |
| 1064 | 1092 |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1231 const Object& result = | 1259 const Object& result = |
| 1232 PassiveObject::Handle(isolate->object_store()->sticky_error()); | 1260 PassiveObject::Handle(isolate->object_store()->sticky_error()); |
| 1233 isolate->object_store()->clear_sticky_error(); | 1261 isolate->object_store()->clear_sticky_error(); |
| 1234 return result.raw(); | 1262 return result.raw(); |
| 1235 } | 1263 } |
| 1236 UNREACHABLE(); | 1264 UNREACHABLE(); |
| 1237 return Object::null(); | 1265 return Object::null(); |
| 1238 } | 1266 } |
| 1239 | 1267 |
| 1240 } // namespace dart | 1268 } // namespace dart |
| OLD | NEW |