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

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

Issue 288343010: Fix inlining tree printing to skip duplicates as the gathered inlined info is aggregated from many … (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 7 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 | « no previous file | no next file » | 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) 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/flow_graph_inliner.h" 5 #include "vm/flow_graph_inliner.h"
6 6
7 #include "vm/block_scheduler.h" 7 #include "vm/block_scheduler.h"
8 #include "vm/compiler.h" 8 #include "vm/compiler.h"
9 #include "vm/flags.h" 9 #include "vm/flags.h"
10 #include "vm/flow_graph.h" 10 #include "vm/flow_graph.h"
(...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 GrowthFactor(), 810 GrowthFactor(),
811 initial_size_, 811 initial_size_,
812 inlined_size_); 812 inlined_size_);
813 PrintInlinedInfoFor(top, 1); 813 PrintInlinedInfoFor(top, 1);
814 } 814 }
815 } 815 }
816 816
817 private: 817 private:
818 friend class PolymorphicInliner; 818 friend class PolymorphicInliner;
819 819
820
821 static bool Contains(const GrowableArray<intptr_t>& a, intptr_t deopt_id) {
822 for (intptr_t i = 0; i < a.length(); i++) {
823 if (a[i] == deopt_id) return true;
824 }
825 return false;
826 }
827
820 void PrintInlinedInfoFor(const Function& caller, intptr_t depth) { 828 void PrintInlinedInfoFor(const Function& caller, intptr_t depth) {
829 // Prevent duplicate printing as inlined_info aggregates all inlinining.
830 GrowableArray<intptr_t> call_instructions_printed;
821 // Print those that were inlined. 831 // Print those that were inlined.
822 for (intptr_t i = 0; i < inlined_info_.length(); i++) { 832 for (intptr_t i = 0; i < inlined_info_.length(); i++) {
823 const InlinedInfo& info = inlined_info_[i]; 833 const InlinedInfo& info = inlined_info_[i];
824 if (info.bailout_reason != NULL) { 834 if (info.bailout_reason != NULL) {
825 continue; 835 continue;
826 } 836 }
827 if ((info.inlined_depth == depth) && 837 if ((info.inlined_depth == depth) &&
828 (info.caller->raw() == caller.raw())) { 838 (info.caller->raw() == caller.raw()) &&
839 !Contains(call_instructions_printed, info.call_instr->GetDeoptId())) {
829 for (int t = 0; t < depth; t++) { 840 for (int t = 0; t < depth; t++) {
830 OS::Print(" "); 841 OS::Print(" ");
831 } 842 }
832 OS::Print("%" Pd " %s\n", 843 OS::Print("%" Pd " %s\n",
833 info.call_instr->GetDeoptId(), 844 info.call_instr->GetDeoptId(),
834 info.inlined->ToQualifiedCString()); 845 info.inlined->ToQualifiedCString());
835 PrintInlinedInfoFor(*info.inlined, depth + 1); 846 PrintInlinedInfoFor(*info.inlined, depth + 1);
847 call_instructions_printed.Add(info.call_instr->GetDeoptId());
836 } 848 }
837 } 849 }
850 call_instructions_printed.Clear();
838 // Print those that were not inlined. 851 // Print those that were not inlined.
839 for (intptr_t i = 0; i < inlined_info_.length(); i++) { 852 for (intptr_t i = 0; i < inlined_info_.length(); i++) {
840 const InlinedInfo& info = inlined_info_[i]; 853 const InlinedInfo& info = inlined_info_[i];
841 if (info.bailout_reason == NULL) { 854 if (info.bailout_reason == NULL) {
842 continue; 855 continue;
843 } 856 }
844 if ((info.inlined_depth == depth) && 857 if ((info.inlined_depth == depth) &&
845 (info.caller->raw() == caller.raw())) { 858 (info.caller->raw() == caller.raw()) &&
859 !Contains(call_instructions_printed, info.call_instr->GetDeoptId())) {
846 for (int t = 0; t < depth; t++) { 860 for (int t = 0; t < depth; t++) {
847 OS::Print(" "); 861 OS::Print(" ");
848 } 862 }
849 OS::Print("NO %" Pd " %s - %s\n", 863 OS::Print("NO %" Pd " %s - %s\n",
850 info.call_instr->GetDeoptId(), 864 info.call_instr->GetDeoptId(),
851 info.inlined->ToQualifiedCString(), 865 info.inlined->ToQualifiedCString(),
852 info.bailout_reason); 866 info.bailout_reason);
867 call_instructions_printed.Add(info.call_instr->GetDeoptId());
853 } 868 }
854 } 869 }
855 } 870 }
856 871
857 void InlineCall(InlinedCallData* call_data) { 872 void InlineCall(InlinedCallData* call_data) {
858 TimerScope timer(FLAG_compiler_stats, 873 TimerScope timer(FLAG_compiler_stats,
859 &CompilerStats::graphinliner_subst_timer, 874 &CompilerStats::graphinliner_subst_timer,
860 Isolate::Current()); 875 Isolate::Current());
861 FlowGraph* callee_graph = call_data->callee_graph; 876 FlowGraph* callee_graph = call_data->callee_graph;
862 TargetEntryInstr* callee_entry = 877 TargetEntryInstr* callee_entry =
(...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after
1675 OS::Print("After Inlining of %s\n", flow_graph_-> 1690 OS::Print("After Inlining of %s\n", flow_graph_->
1676 parsed_function().function().ToFullyQualifiedCString()); 1691 parsed_function().function().ToFullyQualifiedCString());
1677 FlowGraphPrinter printer(*flow_graph_); 1692 FlowGraphPrinter printer(*flow_graph_);
1678 printer.PrintBlocks(); 1693 printer.PrintBlocks();
1679 } 1694 }
1680 } 1695 }
1681 } 1696 }
1682 } 1697 }
1683 1698
1684 } // namespace dart 1699 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698