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

Unified Diff: runtime/vm/flow_graph_compiler.cc

Issue 1096203007: VM: Use canonical empty-array for empty inlining meta-data. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: saved one more array per unoptimized code object 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/flow_graph_compiler.h ('k') | runtime/vm/object.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/flow_graph_compiler.cc
===================================================================
--- runtime/vm/flow_graph_compiler.cc (revision 45397)
+++ runtime/vm/flow_graph_compiler.cc (working copy)
@@ -128,7 +128,7 @@
patch_code_pc_offset_(Code::kInvalidPc),
lazy_deopt_pc_offset_(Code::kInvalidPc),
deopt_id_to_ic_data_(NULL),
- inlined_code_intervals_(NULL),
+ inlined_code_intervals_(Array::ZoneHandle(Object::empty_array().raw())),
inline_id_to_function_(inline_id_to_function),
caller_inline_id_(caller_inline_id) {
ASSERT(flow_graph->parsed_function().function().raw() ==
@@ -448,43 +448,46 @@
// truncate 'inline_id_to_function_'.
}
- intervals.Add(IntervalStruct(prev_offset, prev_inlining_id));
- inlined_code_intervals_ = &Array::ZoneHandle(Array::New(
- intervals.length() * Code::kInlIntNumEntries, Heap::kOld));
- Smi& start_h = Smi::Handle();
- Smi& caller_inline_id = Smi::Handle();
- Smi& inline_id = Smi::Handle();
- for (intptr_t i = 0; i < intervals.length(); i++) {
- if (FLAG_trace_inlining_intervals && is_optimizing()) {
- const Function* function =
- inline_id_to_function_.At(intervals[i].inlining_id);
- intervals[i].Dump();
- OS::Print(" %s parent %" Pd "\n",
- function->ToQualifiedCString(),
- caller_inline_id_[intervals[i].inlining_id]);
+ if (is_optimizing()) {
+ intervals.Add(IntervalStruct(prev_offset, prev_inlining_id));
+ inlined_code_intervals_ =
+ Array::New(intervals.length() * Code::kInlIntNumEntries, Heap::kOld);
+ Smi& start_h = Smi::Handle();
+ Smi& caller_inline_id = Smi::Handle();
+ Smi& inline_id = Smi::Handle();
+ for (intptr_t i = 0; i < intervals.length(); i++) {
+ if (FLAG_trace_inlining_intervals && is_optimizing()) {
+ const Function* function =
+ inline_id_to_function_.At(intervals[i].inlining_id);
+ intervals[i].Dump();
+ OS::Print(" %s parent %" Pd "\n",
+ function->ToQualifiedCString(),
+ caller_inline_id_[intervals[i].inlining_id]);
+ }
+ const intptr_t id = intervals[i].inlining_id;
+ start_h = Smi::New(intervals[i].start);
+ inline_id = Smi::New(id);
+ caller_inline_id = Smi::New(caller_inline_id_[intervals[i].inlining_id]);
+
+ const intptr_t p = i * Code::kInlIntNumEntries;
+ inlined_code_intervals_.SetAt(p + Code::kInlIntStart, start_h);
+ inlined_code_intervals_.SetAt(p + Code::kInlIntInliningId, inline_id);
+ inlined_code_intervals_.SetAt(
+ p + Code::kInlIntCallerId, caller_inline_id);
}
- const intptr_t id = intervals[i].inlining_id;
- start_h = Smi::New(intervals[i].start);
- inline_id = Smi::New(id);
- caller_inline_id = Smi::New(caller_inline_id_[intervals[i].inlining_id]);
-
- const intptr_t p = i * Code::kInlIntNumEntries;
- inlined_code_intervals_->SetAt(p + Code::kInlIntStart, start_h);
- inlined_code_intervals_->SetAt(p + Code::kInlIntInliningId, inline_id);
- inlined_code_intervals_->SetAt(p + Code::kInlIntCallerId, caller_inline_id);
}
set_current_block(NULL);
if (FLAG_trace_inlining_intervals && is_optimizing()) {
OS::Print("Intervals:\n");
Smi& temp = Smi::Handle();
- for (intptr_t i = 0; i < inlined_code_intervals_->Length();
+ for (intptr_t i = 0; i < inlined_code_intervals_.Length();
i += Code::kInlIntNumEntries) {
- temp ^= inlined_code_intervals_->At(i + Code::kInlIntStart);
+ temp ^= inlined_code_intervals_.At(i + Code::kInlIntStart);
ASSERT(!temp.IsNull());
OS::Print("% " Pd " start: %" Px " ", i, temp.Value());
- temp ^= inlined_code_intervals_->At(i + Code::kInlIntInliningId);
+ temp ^= inlined_code_intervals_.At(i + Code::kInlIntInliningId);
OS::Print("inl-id: %" Pd " ", temp.Value());
- temp ^= inlined_code_intervals_->At(i + Code::kInlIntCallerId);
+ temp ^= inlined_code_intervals_.At(i + Code::kInlIntCallerId);
OS::Print("caller-id: %" Pd " \n", temp.Value());
}
}
@@ -1606,6 +1609,9 @@
RawArray* FlowGraphCompiler::InliningIdToFunction() const {
+ if (inline_id_to_function_.length() == 0) {
+ return Object::empty_array().raw();
+ }
const Array& res = Array::Handle(
Array::New(inline_id_to_function_.length(), Heap::kOld));
for (intptr_t i = 0; i < inline_id_to_function_.length(); i++) {
« no previous file with comments | « runtime/vm/flow_graph_compiler.h ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698