| 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++) {
|
|
|