OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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/precompiler.h" | 5 #include "vm/precompiler.h" |
6 | 6 |
7 #include "vm/aot_optimizer.h" | 7 #include "vm/aot_optimizer.h" |
8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
9 #include "vm/ast_printer.h" | 9 #include "vm/ast_printer.h" |
10 #include "vm/branch_optimizer.h" | 10 #include "vm/branch_optimizer.h" |
(...skipping 2780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2791 } | 2791 } |
2792 bool is_compiled = false; | 2792 bool is_compiled = false; |
2793 Zone* const zone = thread()->zone(); | 2793 Zone* const zone = thread()->zone(); |
2794 #ifndef PRODUCT | 2794 #ifndef PRODUCT |
2795 TimelineStream* compiler_timeline = Timeline::GetCompilerStream(); | 2795 TimelineStream* compiler_timeline = Timeline::GetCompilerStream(); |
2796 #endif // !PRODUCT | 2796 #endif // !PRODUCT |
2797 CSTAT_TIMER_SCOPE(thread(), codegen_timer); | 2797 CSTAT_TIMER_SCOPE(thread(), codegen_timer); |
2798 HANDLESCOPE(thread()); | 2798 HANDLESCOPE(thread()); |
2799 | 2799 |
2800 // We may reattempt compilation if the function needs to be assembled using | 2800 // We may reattempt compilation if the function needs to be assembled using |
2801 // far branches on ARM and MIPS. In the else branch of the setjmp call, | 2801 // far branches on ARM. In the else branch of the setjmp call, done is set to |
2802 // done is set to false, and use_far_branches is set to true if there is a | 2802 // false, and use_far_branches is set to true if there is a longjmp from the |
2803 // longjmp from the ARM or MIPS assemblers. In all other paths through this | 2803 // ARM assembler. In all other paths through this while loop, done is set to |
2804 // while loop, done is set to true. use_far_branches is always false on ia32 | 2804 // true. use_far_branches is always false on ia32 and x64. |
2805 // and x64. | |
2806 bool done = false; | 2805 bool done = false; |
2807 // volatile because the variable may be clobbered by a longjmp. | 2806 // volatile because the variable may be clobbered by a longjmp. |
2808 volatile bool use_far_branches = false; | 2807 volatile bool use_far_branches = false; |
2809 volatile bool use_speculative_inlining = | 2808 volatile bool use_speculative_inlining = |
2810 FLAG_max_speculative_inlining_attempts > 0; | 2809 FLAG_max_speculative_inlining_attempts > 0; |
2811 GrowableArray<intptr_t> inlining_black_list; | 2810 GrowableArray<intptr_t> inlining_black_list; |
2812 | 2811 |
2813 while (!done) { | 2812 while (!done) { |
2814 const intptr_t prev_deopt_id = thread()->deopt_id(); | 2813 const intptr_t prev_deopt_id = thread()->deopt_id(); |
2815 thread()->set_deopt_id(0); | 2814 thread()->set_deopt_id(0); |
(...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3389 | 3388 |
3390 ASSERT(FLAG_precompiled_mode); | 3389 ASSERT(FLAG_precompiled_mode); |
3391 const bool optimized = function.IsOptimizable(); // False for natives. | 3390 const bool optimized = function.IsOptimizable(); // False for natives. |
3392 DartPrecompilationPipeline pipeline(zone, field_type_map); | 3391 DartPrecompilationPipeline pipeline(zone, field_type_map); |
3393 return PrecompileFunctionHelper(precompiler, &pipeline, function, optimized); | 3392 return PrecompileFunctionHelper(precompiler, &pipeline, function, optimized); |
3394 } | 3393 } |
3395 | 3394 |
3396 #endif // DART_PRECOMPILER | 3395 #endif // DART_PRECOMPILER |
3397 | 3396 |
3398 } // namespace dart | 3397 } // namespace dart |
OLD | NEW |