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

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

Issue 1714743002: VM: Separate precompilation-specific code, make flags const. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: fix build after merge Created 4 years, 10 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
« no previous file with comments | « runtime/vm/flow_graph_compiler.cc ('k') | runtime/vm/flow_graph_optimizer.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) 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/aot_optimizer.h"
7 #include "vm/block_scheduler.h" 8 #include "vm/block_scheduler.h"
8 #include "vm/branch_optimizer.h" 9 #include "vm/branch_optimizer.h"
9 #include "vm/compiler.h" 10 #include "vm/compiler.h"
10 #include "vm/flags.h" 11 #include "vm/flags.h"
11 #include "vm/flow_graph.h" 12 #include "vm/flow_graph.h"
12 #include "vm/flow_graph_builder.h" 13 #include "vm/flow_graph_builder.h"
13 #include "vm/flow_graph_compiler.h" 14 #include "vm/flow_graph_compiler.h"
14 #include "vm/flow_graph_optimizer.h" 15 #include "vm/flow_graph_optimizer.h"
15 #include "vm/flow_graph_type_propagator.h" 16 #include "vm/flow_graph_type_propagator.h"
16 #include "vm/il_printer.h" 17 #include "vm/il_printer.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 DEFINE_FLAG(int, inlining_recursion_depth_threshold, 1, 55 DEFINE_FLAG(int, inlining_recursion_depth_threshold, 1,
55 "Inline recursive function calls up to threshold recursion depth."); 56 "Inline recursive function calls up to threshold recursion depth.");
56 DEFINE_FLAG(int, max_inlined_per_depth, 500, 57 DEFINE_FLAG(int, max_inlined_per_depth, 500,
57 "Max. number of inlined calls per depth"); 58 "Max. number of inlined calls per depth");
58 DEFINE_FLAG(bool, print_inlining_tree, false, "Print inlining tree"); 59 DEFINE_FLAG(bool, print_inlining_tree, false, "Print inlining tree");
59 DEFINE_FLAG(bool, enable_inlining_annotations, false, 60 DEFINE_FLAG(bool, enable_inlining_annotations, false,
60 "Enable inlining annotations"); 61 "Enable inlining annotations");
61 62
62 DECLARE_FLAG(bool, compiler_stats); 63 DECLARE_FLAG(bool, compiler_stats);
63 DECLARE_FLAG(int, max_deoptimization_counter_threshold); 64 DECLARE_FLAG(int, max_deoptimization_counter_threshold);
64 DECLARE_FLAG(bool, polymorphic_with_deopt);
65 DECLARE_FLAG(bool, precompilation); 65 DECLARE_FLAG(bool, precompilation);
66 DECLARE_FLAG(bool, print_flow_graph); 66 DECLARE_FLAG(bool, print_flow_graph);
67 DECLARE_FLAG(bool, print_flow_graph_optimized); 67 DECLARE_FLAG(bool, print_flow_graph_optimized);
68 DECLARE_FLAG(bool, verify_compiler); 68 DECLARE_FLAG(bool, verify_compiler);
69 69
70 // Quick access to the current zone. 70 // Quick access to the current zone.
71 #define Z (zone()) 71 #define Z (zone())
72 #define I (isolate()) 72 #define I (isolate())
73 73
74 #define TRACE_INLINING(statement) \ 74 #define TRACE_INLINING(statement) \
(...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 // Compute SSA on the callee graph, catching bailouts. 783 // Compute SSA on the callee graph, catching bailouts.
784 callee_graph->ComputeSSA(caller_graph_->max_virtual_register_number(), 784 callee_graph->ComputeSSA(caller_graph_->max_virtual_register_number(),
785 param_stubs); 785 param_stubs);
786 DEBUG_ASSERT(callee_graph->VerifyUseLists()); 786 DEBUG_ASSERT(callee_graph->VerifyUseLists());
787 } 787 }
788 788
789 { 789 {
790 CSTAT_TIMER_SCOPE(thread(), graphinliner_opt_timer); 790 CSTAT_TIMER_SCOPE(thread(), graphinliner_opt_timer);
791 // TODO(fschneider): Improve suppression of speculative inlining. 791 // TODO(fschneider): Improve suppression of speculative inlining.
792 // Deopt-ids overlap between caller and callee. 792 // Deopt-ids overlap between caller and callee.
793 FlowGraphOptimizer optimizer(callee_graph,
794 inliner_->use_speculative_inlining_,
795 inliner_->inlining_black_list_);
796 if (FLAG_precompilation) { 793 if (FLAG_precompilation) {
794 AotOptimizer optimizer(callee_graph,
795 inliner_->use_speculative_inlining_,
796 inliner_->inlining_black_list_);
797 optimizer.PopulateWithICData(); 797 optimizer.PopulateWithICData();
798 798
799 optimizer.ApplyClassIds(); 799 optimizer.ApplyClassIds();
800 DEBUG_ASSERT(callee_graph->VerifyUseLists()); 800 DEBUG_ASSERT(callee_graph->VerifyUseLists());
801 801
802 FlowGraphTypePropagator::Propagate(callee_graph); 802 FlowGraphTypePropagator::Propagate(callee_graph);
803 DEBUG_ASSERT(callee_graph->VerifyUseLists()); 803 DEBUG_ASSERT(callee_graph->VerifyUseLists());
804
805 optimizer.ApplyICData();
806 DEBUG_ASSERT(callee_graph->VerifyUseLists());
807
808 // Optimize (a << b) & c patterns, merge instructions. Must occur
809 // before 'SelectRepresentations' which inserts conversion nodes.
810 optimizer.TryOptimizePatterns();
811 DEBUG_ASSERT(callee_graph->VerifyUseLists());
812 } else {
813 FlowGraphOptimizer optimizer(callee_graph,
814 inliner_->use_speculative_inlining_,
815 inliner_->inlining_black_list_);
816 optimizer.ApplyICData();
817 DEBUG_ASSERT(callee_graph->VerifyUseLists());
818
819 // Optimize (a << b) & c patterns, merge instructions. Must occur
820 // before 'SelectRepresentations' which inserts conversion nodes.
821 optimizer.TryOptimizePatterns();
822 DEBUG_ASSERT(callee_graph->VerifyUseLists());
804 } 823 }
805 optimizer.ApplyICData();
806 DEBUG_ASSERT(callee_graph->VerifyUseLists());
807
808 // Optimize (a << b) & c patterns, merge instructions. Must occur
809 // before 'SelectRepresentations' which inserts conversion nodes.
810 optimizer.TryOptimizePatterns();
811 DEBUG_ASSERT(callee_graph->VerifyUseLists());
812 } 824 }
813 825
814 if (FLAG_support_il_printer && FLAG_trace_inlining && 826 if (FLAG_support_il_printer && FLAG_trace_inlining &&
815 (FLAG_print_flow_graph || FLAG_print_flow_graph_optimized)) { 827 (FLAG_print_flow_graph || FLAG_print_flow_graph_optimized)) {
816 THR_Print("Callee graph for inlining %s\n", 828 THR_Print("Callee graph for inlining %s\n",
817 function.ToFullyQualifiedCString()); 829 function.ToFullyQualifiedCString());
818 FlowGraphPrinter printer(*callee_graph); 830 FlowGraphPrinter printer(*callee_graph);
819 printer.PrintBlocks(); 831 printer.PrintBlocks();
820 } 832 }
821 833
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after
1501 Value* input = second->InputAt(i); 1513 Value* input = second->InputAt(i);
1502 input->definition()->AddInputUse(input); 1514 input->definition()->AddInputUse(input);
1503 } 1515 }
1504 first->LinkTo(second); 1516 first->LinkTo(second);
1505 return second; 1517 return second;
1506 } 1518 }
1507 1519
1508 1520
1509 bool PolymorphicInliner::TryInlineRecognizedMethod(intptr_t receiver_cid, 1521 bool PolymorphicInliner::TryInlineRecognizedMethod(intptr_t receiver_cid,
1510 const Function& target) { 1522 const Function& target) {
1511 FlowGraphOptimizer optimizer(owner_->caller_graph(),
1512 false, // Speculative inlining not applicable.
1513 NULL);
1514 TargetEntryInstr* entry; 1523 TargetEntryInstr* entry;
1515 Definition* last; 1524 Definition* last;
1516 // Replace the receiver argument with a redefinition to prevent code from 1525 // Replace the receiver argument with a redefinition to prevent code from
1517 // the inlined body from being hoisted above the inlined entry. 1526 // the inlined body from being hoisted above the inlined entry.
1518 GrowableArray<Definition*> arguments(call_->ArgumentCount()); 1527 GrowableArray<Definition*> arguments(call_->ArgumentCount());
1519 Definition* receiver = call_->ArgumentAt(0); 1528 Definition* receiver = call_->ArgumentAt(0);
1520 RedefinitionInstr* redefinition = 1529 RedefinitionInstr* redefinition =
1521 new(Z) RedefinitionInstr(new(Z) Value(receiver)); 1530 new(Z) RedefinitionInstr(new(Z) Value(receiver));
1522 redefinition->set_ssa_temp_index( 1531 redefinition->set_ssa_temp_index(
1523 owner_->caller_graph()->alloc_ssa_temp_index()); 1532 owner_->caller_graph()->alloc_ssa_temp_index());
(...skipping 1524 matching lines...) Expand 10 before | Expand all | Expand 10 after
3048 return InlineDoubleOp(flow_graph, Token::kMUL, call, entry, last); 3057 return InlineDoubleOp(flow_graph, Token::kMUL, call, entry, last);
3049 case MethodRecognizer::kDoubleDiv: 3058 case MethodRecognizer::kDoubleDiv:
3050 return InlineDoubleOp(flow_graph, Token::kDIV, call, entry, last); 3059 return InlineDoubleOp(flow_graph, Token::kDIV, call, entry, last);
3051 default: 3060 default:
3052 return false; 3061 return false;
3053 } 3062 }
3054 } 3063 }
3055 3064
3056 3065
3057 } // namespace dart 3066 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/flow_graph_compiler.cc ('k') | runtime/vm/flow_graph_optimizer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698