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

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

Issue 982873004: Thread/Isolate refactoring: new(Isolate) -> new(Zone) (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 9 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/code_generator.h" 5 #include "vm/code_generator.h"
6 6
7 #include "vm/assembler.h" 7 #include "vm/assembler.h"
8 #include "vm/ast.h" 8 #include "vm/ast.h"
9 #include "vm/code_patcher.h" 9 #include "vm/code_patcher.h"
10 #include "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 DartFrameIterator iterator; 651 DartFrameIterator iterator;
652 StackFrame* caller_frame = iterator.NextFrame(); 652 StackFrame* caller_frame = iterator.NextFrame();
653 ASSERT(caller_frame != NULL); 653 ASSERT(caller_frame != NULL);
654 const Code& caller_code = Code::Handle(caller_frame->LookupDartCode()); 654 const Code& caller_code = Code::Handle(caller_frame->LookupDartCode());
655 ASSERT(!caller_code.IsNull()); 655 ASSERT(!caller_code.IsNull());
656 ASSERT(caller_code.is_optimized()); 656 ASSERT(caller_code.is_optimized());
657 const Function& target_function = Function::Handle( 657 const Function& target_function = Function::Handle(
658 caller_code.GetStaticCallTargetFunctionAt(caller_frame->pc())); 658 caller_code.GetStaticCallTargetFunctionAt(caller_frame->pc()));
659 if (!target_function.HasCode()) { 659 if (!target_function.HasCode()) {
660 const Error& error = 660 const Error& error =
661 Error::Handle(Compiler::CompileFunction(isolate, target_function)); 661 Error::Handle(Compiler::CompileFunction(thread, target_function));
662 if (!error.IsNull()) { 662 if (!error.IsNull()) {
663 Exceptions::PropagateError(error); 663 Exceptions::PropagateError(error);
664 } 664 }
665 } 665 }
666 const Code& target_code = Code::Handle(target_function.CurrentCode()); 666 const Code& target_code = Code::Handle(target_function.CurrentCode());
667 // Before patching verify that we are not repeatedly patching to the same 667 // Before patching verify that we are not repeatedly patching to the same
668 // target. 668 // target.
669 ASSERT(target_code.EntryPoint() != 669 ASSERT(target_code.EntryPoint() !=
670 CodePatcher::GetStaticCallTargetAt(caller_frame->pc(), caller_code)); 670 CodePatcher::GetStaticCallTargetAt(caller_frame->pc(), caller_code));
671 const Instructions& instrs = 671 const Instructions& instrs =
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 // seen before. Compile the target if necessary and update the ICData. 923 // seen before. Compile the target if necessary and update the ICData.
924 // Arg0: argument. 924 // Arg0: argument.
925 // Arg1: IC data object. 925 // Arg1: IC data object.
926 DEFINE_RUNTIME_ENTRY(StaticCallMissHandlerOneArg, 2) { 926 DEFINE_RUNTIME_ENTRY(StaticCallMissHandlerOneArg, 2) {
927 const Instance& arg = Instance::CheckedHandle(arguments.ArgAt(0)); 927 const Instance& arg = Instance::CheckedHandle(arguments.ArgAt(0));
928 const ICData& ic_data = ICData::CheckedHandle(arguments.ArgAt(1)); 928 const ICData& ic_data = ICData::CheckedHandle(arguments.ArgAt(1));
929 // IC data for static call is prepopulated with the statically known target. 929 // IC data for static call is prepopulated with the statically known target.
930 ASSERT(ic_data.NumberOfChecks() == 1); 930 ASSERT(ic_data.NumberOfChecks() == 1);
931 const Function& target = Function::Handle(ic_data.GetTargetAt(0)); 931 const Function& target = Function::Handle(ic_data.GetTargetAt(0));
932 if (!target.HasCode()) { 932 if (!target.HasCode()) {
933 const Error& error = Error::Handle(Compiler::CompileFunction(isolate, 933 const Error& error = Error::Handle(Compiler::CompileFunction(thread,
934 target)); 934 target));
935 if (!error.IsNull()) { 935 if (!error.IsNull()) {
936 Exceptions::PropagateError(error); 936 Exceptions::PropagateError(error);
937 } 937 }
938 } 938 }
939 ASSERT(!target.IsNull() && target.HasCode()); 939 ASSERT(!target.IsNull() && target.HasCode());
940 ic_data.AddReceiverCheck(arg.GetClassId(), target, 1); 940 ic_data.AddReceiverCheck(arg.GetClassId(), target, 1);
941 if (FLAG_trace_ic) { 941 if (FLAG_trace_ic) {
942 DartFrameIterator iterator; 942 DartFrameIterator iterator;
943 StackFrame* caller_frame = iterator.NextFrame(); 943 StackFrame* caller_frame = iterator.NextFrame();
(...skipping 12 matching lines...) Expand all
956 // Arg1: argument 1. 956 // Arg1: argument 1.
957 // Arg2: IC data object. 957 // Arg2: IC data object.
958 DEFINE_RUNTIME_ENTRY(StaticCallMissHandlerTwoArgs, 3) { 958 DEFINE_RUNTIME_ENTRY(StaticCallMissHandlerTwoArgs, 3) {
959 const Instance& arg0 = Instance::CheckedHandle(arguments.ArgAt(0)); 959 const Instance& arg0 = Instance::CheckedHandle(arguments.ArgAt(0));
960 const Instance& arg1 = Instance::CheckedHandle(arguments.ArgAt(1)); 960 const Instance& arg1 = Instance::CheckedHandle(arguments.ArgAt(1));
961 const ICData& ic_data = ICData::CheckedHandle(arguments.ArgAt(2)); 961 const ICData& ic_data = ICData::CheckedHandle(arguments.ArgAt(2));
962 // IC data for static call is prepopulated with the statically known target. 962 // IC data for static call is prepopulated with the statically known target.
963 ASSERT(ic_data.NumberOfChecks() > 0); 963 ASSERT(ic_data.NumberOfChecks() > 0);
964 const Function& target = Function::Handle(ic_data.GetTargetAt(0)); 964 const Function& target = Function::Handle(ic_data.GetTargetAt(0));
965 if (!target.HasCode()) { 965 if (!target.HasCode()) {
966 const Error& error = Error::Handle(Compiler::CompileFunction(isolate, 966 const Error& error = Error::Handle(Compiler::CompileFunction(thread,
967 target)); 967 target));
968 if (!error.IsNull()) { 968 if (!error.IsNull()) {
969 Exceptions::PropagateError(error); 969 Exceptions::PropagateError(error);
970 } 970 }
971 } 971 }
972 ASSERT(!target.IsNull() && target.HasCode()); 972 ASSERT(!target.IsNull() && target.HasCode());
973 GrowableArray<intptr_t> cids(2); 973 GrowableArray<intptr_t> cids(2);
974 cids.Add(arg0.GetClassId()); 974 cids.Add(arg0.GetClassId());
975 cids.Add(arg1.GetClassId()); 975 cids.Add(arg1.GetClassId());
976 ic_data.AddCheck(cids, target); 976 ic_data.AddCheck(cids, target);
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
1255 function.ToFullyQualifiedCString(), 1255 function.ToFullyQualifiedCString(),
1256 osr_id, 1256 osr_id,
1257 function.usage_counter()); 1257 function.usage_counter());
1258 } 1258 }
1259 1259
1260 const Code& original_code = Code::Handle(function.CurrentCode()); 1260 const Code& original_code = Code::Handle(function.CurrentCode());
1261 // Since the code is referenced from the frame and the ZoneHandle, 1261 // Since the code is referenced from the frame and the ZoneHandle,
1262 // it cannot have been removed from the function. 1262 // it cannot have been removed from the function.
1263 ASSERT(!original_code.IsNull()); 1263 ASSERT(!original_code.IsNull());
1264 const Error& error = Error::Handle(Compiler::CompileOptimizedFunction( 1264 const Error& error = Error::Handle(Compiler::CompileOptimizedFunction(
1265 isolate, function, osr_id)); 1265 thread, function, osr_id));
1266 if (!error.IsNull()) { 1266 if (!error.IsNull()) {
1267 Exceptions::PropagateError(error); 1267 Exceptions::PropagateError(error);
1268 } 1268 }
1269 1269
1270 const Code& optimized_code = Code::Handle(function.CurrentCode()); 1270 const Code& optimized_code = Code::Handle(function.CurrentCode());
1271 // The current code will not be changed in the case that the compiler 1271 // The current code will not be changed in the case that the compiler
1272 // bailed out during OSR compilation. 1272 // bailed out during OSR compilation.
1273 if (optimized_code.raw() != original_code.raw()) { 1273 if (optimized_code.raw() != original_code.raw()) {
1274 // The OSR code does not work for calling the function, so restore the 1274 // The OSR code does not work for calling the function, so restore the
1275 // unoptimized code. Patch the stack frame to return into the OSR 1275 // unoptimized code. Patch the stack frame to return into the OSR
(...skipping 30 matching lines...) Expand all
1306 const Function& function = Function::CheckedHandle(isolate, 1306 const Function& function = Function::CheckedHandle(isolate,
1307 arguments.ArgAt(0)); 1307 arguments.ArgAt(0));
1308 ASSERT(!function.IsNull()); 1308 ASSERT(!function.IsNull());
1309 ASSERT(function.HasCode()); 1309 ASSERT(function.HasCode());
1310 1310
1311 if (CanOptimizeFunction(function, isolate)) { 1311 if (CanOptimizeFunction(function, isolate)) {
1312 // Reset usage counter for reoptimization before calling optimizer to 1312 // Reset usage counter for reoptimization before calling optimizer to
1313 // prevent recursive triggering of function optimization. 1313 // prevent recursive triggering of function optimization.
1314 function.set_usage_counter(0); 1314 function.set_usage_counter(0);
1315 const Error& error = Error::Handle( 1315 const Error& error = Error::Handle(
1316 isolate, Compiler::CompileOptimizedFunction(isolate, function)); 1316 isolate, Compiler::CompileOptimizedFunction(thread, function));
1317 if (!error.IsNull()) { 1317 if (!error.IsNull()) {
1318 Exceptions::PropagateError(error); 1318 Exceptions::PropagateError(error);
1319 } 1319 }
1320 const Code& optimized_code = Code::Handle(isolate, function.CurrentCode()); 1320 const Code& optimized_code = Code::Handle(isolate, function.CurrentCode());
1321 ASSERT(!optimized_code.IsNull()); 1321 ASSERT(!optimized_code.IsNull());
1322 } 1322 }
1323 arguments.SetReturn(Code::Handle(isolate, function.CurrentCode())); 1323 arguments.SetReturn(Code::Handle(isolate, function.CurrentCode()));
1324 } 1324 }
1325 1325
1326 1326
(...skipping 15 matching lines...) Expand all
1342 ASSERT(frame->IsDartFrame()); 1342 ASSERT(frame->IsDartFrame());
1343 const Code& caller_code = Code::Handle(isolate, frame->LookupDartCode()); 1343 const Code& caller_code = Code::Handle(isolate, frame->LookupDartCode());
1344 ASSERT(caller_code.is_optimized()); 1344 ASSERT(caller_code.is_optimized());
1345 const Function& target_function = Function::Handle( 1345 const Function& target_function = Function::Handle(
1346 isolate, caller_code.GetStaticCallTargetFunctionAt(frame->pc())); 1346 isolate, caller_code.GetStaticCallTargetFunctionAt(frame->pc()));
1347 const Code& target_code = Code::Handle( 1347 const Code& target_code = Code::Handle(
1348 isolate, caller_code.GetStaticCallTargetCodeAt(frame->pc())); 1348 isolate, caller_code.GetStaticCallTargetCodeAt(frame->pc()));
1349 ASSERT(!target_code.IsNull()); 1349 ASSERT(!target_code.IsNull());
1350 if (!target_function.HasCode()) { 1350 if (!target_function.HasCode()) {
1351 const Error& error = Error::Handle( 1351 const Error& error = Error::Handle(
1352 isolate, Compiler::CompileFunction(isolate, target_function)); 1352 isolate, Compiler::CompileFunction(thread, target_function));
1353 if (!error.IsNull()) { 1353 if (!error.IsNull()) {
1354 Exceptions::PropagateError(error); 1354 Exceptions::PropagateError(error);
1355 } 1355 }
1356 } 1356 }
1357 ASSERT(target_function.HasCode()); 1357 ASSERT(target_function.HasCode());
1358 ASSERT(target_function.raw() == target_code.function()); 1358 ASSERT(target_function.raw() == target_code.function());
1359 1359
1360 const Code& current_target_code = Code::Handle( 1360 const Code& current_target_code = Code::Handle(
1361 isolate, target_function.CurrentCode()); 1361 isolate, target_function.CurrentCode());
1362 const Instructions& instrs = Instructions::Handle( 1362 const Instructions& instrs = Instructions::Handle(
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
1679 const intptr_t elm_size = old_data.ElementSizeInBytes(); 1679 const intptr_t elm_size = old_data.ElementSizeInBytes();
1680 const TypedData& new_data = 1680 const TypedData& new_data =
1681 TypedData::Handle(TypedData::New(cid, new_size, Heap::kOld)); 1681 TypedData::Handle(TypedData::New(cid, new_size, Heap::kOld));
1682 TypedData::Copy(new_data, 0, old_data, 0, old_size * elm_size); 1682 TypedData::Copy(new_data, 0, old_data, 0, old_size * elm_size);
1683 typed_data_cell.SetAt(0, new_data); 1683 typed_data_cell.SetAt(0, new_data);
1684 arguments.SetReturn(new_data); 1684 arguments.SetReturn(new_data);
1685 } 1685 }
1686 1686
1687 1687
1688 } // namespace dart 1688 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/allocation.cc ('k') | runtime/vm/compiler.h » ('j') | runtime/vm/compiler.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698