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

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

Issue 1073173003: Eliminate object table and use regular object pool for deoptimization infos. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 8 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 | « runtime/vm/assembler_x64.h ('k') | runtime/vm/deopt_instructions.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 (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 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 TimerScope timer(FLAG_compiler_stats, 712 TimerScope timer(FLAG_compiler_stats,
713 &CompilerStats::graphcompiler_timer, 713 &CompilerStats::graphcompiler_timer,
714 isolate); 714 isolate);
715 graph_compiler.CompileGraph(); 715 graph_compiler.CompileGraph();
716 pipeline->FinalizeCompilation(); 716 pipeline->FinalizeCompilation();
717 } 717 }
718 { 718 {
719 TimerScope timer(FLAG_compiler_stats, 719 TimerScope timer(FLAG_compiler_stats,
720 &CompilerStats::codefinalizer_timer, 720 &CompilerStats::codefinalizer_timer,
721 isolate); 721 isolate);
722 // CreateDeoptInfo uses the object pool and needs to be done before
723 // FinalizeCode.
724 const Array& deopt_info_array = Array::Handle(
725 graph_compiler.CreateDeoptInfo(&assembler));
722 const Code& code = Code::Handle( 726 const Code& code = Code::Handle(
723 Code::FinalizeCode(function, &assembler, optimized)); 727 Code::FinalizeCode(function, &assembler, optimized));
724 code.set_is_optimized(optimized); 728 code.set_is_optimized(optimized);
725 code.set_inlined_intervals(graph_compiler.inlined_code_intervals()); 729 code.set_inlined_intervals(graph_compiler.inlined_code_intervals());
726 code.set_inlined_id_to_function( 730 code.set_inlined_id_to_function(
727 Array::Handle(graph_compiler.InliningIdToFunction())); 731 Array::Handle(graph_compiler.InliningIdToFunction()));
728 graph_compiler.FinalizePcDescriptors(code); 732 graph_compiler.FinalizePcDescriptors(code);
729 graph_compiler.FinalizeDeoptInfo(code); 733 code.set_deopt_info_array(deopt_info_array);
730 graph_compiler.FinalizeStackmaps(code); 734 graph_compiler.FinalizeStackmaps(code);
731 graph_compiler.FinalizeVarDescriptors(code); 735 graph_compiler.FinalizeVarDescriptors(code);
732 graph_compiler.FinalizeExceptionHandlers(code); 736 graph_compiler.FinalizeExceptionHandlers(code);
733 graph_compiler.FinalizeStaticCallTargetsTable(code); 737 graph_compiler.FinalizeStaticCallTargetsTable(code);
734 738
735 if (optimized) { 739 if (optimized) {
736 if (osr_id == Isolate::kNoDeoptId) { 740 if (osr_id == Isolate::kNoDeoptId) {
737 CodePatcher::PatchEntry(Code::Handle(function.CurrentCode())); 741 CodePatcher::PatchEntry(Code::Handle(function.CurrentCode()));
738 if (FLAG_trace_compiler || FLAG_trace_patching) { 742 if (FLAG_trace_compiler || FLAG_trace_patching) {
739 if (FLAG_trace_compiler) { 743 if (FLAG_trace_compiler) {
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 ISL_Print("%4" Pd ": 0x%" Px " %s (%s)\n", 859 ISL_Print("%4" Pd ": 0x%" Px " %s (%s)\n",
856 i, 860 i,
857 start + offset.Value(), 861 start + offset.Value(),
858 DeoptInfo::ToCString(deopt_table, info), 862 DeoptInfo::ToCString(deopt_table, info),
859 DeoptReasonToCString( 863 DeoptReasonToCString(
860 static_cast<ICData::DeoptReasonId>(reason))); 864 static_cast<ICData::DeoptReasonId>(reason)));
861 } 865 }
862 ISL_Print("}\n"); 866 ISL_Print("}\n");
863 } 867 }
864 868
865 const Array& object_table = Array::Handle(code.object_table()); 869 const Array& object_pool = Array::Handle(code.ObjectPool());
866 if (object_table.Length() > 0) {
867 ISL_Print("Object Table: {\n");
868 for (intptr_t i = 0; i < object_table.Length(); i++) {
869 ISL_Print(" %" Pd ": %s\n", i,
870 Object::Handle(object_table.At(i)).ToCString());
871 }
872 ISL_Print("}\n");
873 }
874
875 const Array& object_pool = Array::Handle(
876 Instructions::Handle(code.instructions()).object_pool());
877 if (object_pool.Length() > 0) { 870 if (object_pool.Length() > 0) {
878 ISL_Print("Object Pool: {\n"); 871 ISL_Print("Object Pool: {\n");
879 for (intptr_t i = 0; i < object_pool.Length(); i++) { 872 for (intptr_t i = 0; i < object_pool.Length(); i++) {
880 ISL_Print(" %" Pd ": %s\n", i, 873 ISL_Print(" %" Pd ": %s\n", i,
881 Object::Handle(object_pool.At(i)).ToCString()); 874 Object::Handle(object_pool.At(i)).ToCString());
882 } 875 }
883 ISL_Print("}\n"); 876 ISL_Print("}\n");
884 } 877 }
885 878
886 ISL_Print("Stackmaps for function '%s' {\n", function_fullname); 879 ISL_Print("Stackmaps for function '%s' {\n", function_fullname);
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
1275 const Object& result = 1268 const Object& result =
1276 PassiveObject::Handle(isolate->object_store()->sticky_error()); 1269 PassiveObject::Handle(isolate->object_store()->sticky_error());
1277 isolate->object_store()->clear_sticky_error(); 1270 isolate->object_store()->clear_sticky_error();
1278 return result.raw(); 1271 return result.raw();
1279 } 1272 }
1280 UNREACHABLE(); 1273 UNREACHABLE();
1281 return Object::null(); 1274 return Object::null();
1282 } 1275 }
1283 1276
1284 } // namespace dart 1277 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/assembler_x64.h ('k') | runtime/vm/deopt_instructions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698