OLD | NEW |
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/globals.h" // Needed here to get TARGET_ARCH_XXX. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_XXX. |
6 | 6 |
7 #include "vm/flow_graph_compiler.h" | 7 #include "vm/flow_graph_compiler.h" |
8 | 8 |
9 #include "vm/bit_vector.h" | 9 #include "vm/bit_vector.h" |
10 #include "vm/cha.h" | 10 #include "vm/cha.h" |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 DECLARE_FLAG(bool, support_debugger); | 68 DECLARE_FLAG(bool, support_debugger); |
69 DECLARE_FLAG(bool, use_field_guards); | 69 DECLARE_FLAG(bool, use_field_guards); |
70 DECLARE_FLAG(bool, use_cha_deopt); | 70 DECLARE_FLAG(bool, use_cha_deopt); |
71 DECLARE_FLAG(bool, use_osr); | 71 DECLARE_FLAG(bool, use_osr); |
72 DECLARE_FLAG(bool, warn_on_javascript_compatibility); | 72 DECLARE_FLAG(bool, warn_on_javascript_compatibility); |
73 DECLARE_FLAG(bool, print_stop_message); | 73 DECLARE_FLAG(bool, print_stop_message); |
74 DECLARE_FLAG(bool, lazy_dispatchers); | 74 DECLARE_FLAG(bool, lazy_dispatchers); |
75 DECLARE_FLAG(bool, interpret_irregexp); | 75 DECLARE_FLAG(bool, interpret_irregexp); |
76 DECLARE_FLAG(bool, enable_mirrors); | 76 DECLARE_FLAG(bool, enable_mirrors); |
77 DECLARE_FLAG(bool, link_natives_lazily); | 77 DECLARE_FLAG(bool, link_natives_lazily); |
| 78 DECLARE_FLAG(bool, trace_compiler); |
78 | 79 |
79 bool FLAG_precompilation = false; | 80 bool FLAG_precompilation = false; |
80 static void PrecompilationModeHandler(bool value) { | 81 static void PrecompilationModeHandler(bool value) { |
81 if (value) { | 82 if (value) { |
82 #if defined(TARGET_ARCH_IA32) | 83 #if defined(TARGET_ARCH_IA32) |
83 FATAL("Precompilation not supported on IA32"); | 84 FATAL("Precompilation not supported on IA32"); |
84 #endif | 85 #endif |
85 FLAG_precompilation = true; | 86 FLAG_precompilation = true; |
86 | 87 |
87 FLAG_always_megamorphic_calls = true; | 88 FLAG_always_megamorphic_calls = true; |
(...skipping 821 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
909 | 910 |
910 | 911 |
911 Label* FlowGraphCompiler::AddDeoptStub(intptr_t deopt_id, | 912 Label* FlowGraphCompiler::AddDeoptStub(intptr_t deopt_id, |
912 ICData::DeoptReasonId reason, | 913 ICData::DeoptReasonId reason, |
913 uint32_t flags) { | 914 uint32_t flags) { |
914 if (intrinsic_mode()) { | 915 if (intrinsic_mode()) { |
915 return &intrinsic_slow_path_label_; | 916 return &intrinsic_slow_path_label_; |
916 } | 917 } |
917 | 918 |
918 // No deoptimization allowed when 'always_optimize' is set. | 919 // No deoptimization allowed when 'always_optimize' is set. |
919 ASSERT(!Compiler::always_optimize()); | 920 if (Compiler::always_optimize()) { |
| 921 if (FLAG_trace_compiler) { |
| 922 THR_Print( |
| 923 "Retrying compilation %s, suppressing inlining of deopt_id:%" Pd "\n", |
| 924 parsed_function_.function().ToFullyQualifiedCString(), deopt_id); |
| 925 } |
| 926 ASSERT(deopt_id != 0); // longjmp must return non-zero value. |
| 927 Thread::Current()->long_jump_base()->Jump( |
| 928 deopt_id, Object::speculative_inlining_error()); |
| 929 } |
| 930 |
920 ASSERT(is_optimizing_); | 931 ASSERT(is_optimizing_); |
921 CompilerDeoptInfoWithStub* stub = | 932 CompilerDeoptInfoWithStub* stub = |
922 new(zone()) CompilerDeoptInfoWithStub(deopt_id, | 933 new(zone()) CompilerDeoptInfoWithStub(deopt_id, |
923 reason, | 934 reason, |
924 flags, | 935 flags, |
925 pending_deoptimization_env_); | 936 pending_deoptimization_env_); |
926 deopt_infos_.Add(stub); | 937 deopt_infos_.Add(stub); |
927 return stub->entry_label(); | 938 return stub->entry_label(); |
928 } | 939 } |
929 | 940 |
(...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1846 | 1857 |
1847 | 1858 |
1848 void FlowGraphCompiler::FrameStateClear() { | 1859 void FlowGraphCompiler::FrameStateClear() { |
1849 ASSERT(!is_optimizing()); | 1860 ASSERT(!is_optimizing()); |
1850 frame_state_.TruncateTo(0); | 1861 frame_state_.TruncateTo(0); |
1851 } | 1862 } |
1852 #endif | 1863 #endif |
1853 | 1864 |
1854 | 1865 |
1855 } // namespace dart | 1866 } // namespace dart |
OLD | NEW |