| 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/flow_graph_inliner.h" | 5 #include "vm/flow_graph_inliner.h" |
| 6 | 6 |
| 7 #include "vm/aot_optimizer.h" | 7 #include "vm/aot_optimizer.h" |
| 8 #include "vm/block_scheduler.h" | 8 #include "vm/block_scheduler.h" |
| 9 #include "vm/branch_optimizer.h" | 9 #include "vm/branch_optimizer.h" |
| 10 #include "vm/compiler.h" | 10 #include "vm/compiler.h" |
| (...skipping 943 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 954 inliner_->NextInlineId(callee_graph->function(), | 954 inliner_->NextInlineId(callee_graph->function(), |
| 955 call_data->call->token_pos(), | 955 call_data->call->token_pos(), |
| 956 call_data->caller_inlining_id_)); | 956 call_data->caller_inlining_id_)); |
| 957 TRACE_INLINING(THR_Print(" Success\n")); | 957 TRACE_INLINING(THR_Print(" Success\n")); |
| 958 PRINT_INLINING_TREE(NULL, | 958 PRINT_INLINING_TREE(NULL, |
| 959 &call_data->caller, &function, call); | 959 &call_data->caller, &function, call); |
| 960 return true; | 960 return true; |
| 961 } else { | 961 } else { |
| 962 error = thread()->sticky_error(); | 962 error = thread()->sticky_error(); |
| 963 thread()->clear_sticky_error(); | 963 thread()->clear_sticky_error(); |
| 964 ASSERT(error.IsLanguageError()); | |
| 965 | 964 |
| 966 if (LanguageError::Cast(error).kind() == Report::kBailout) { | 965 if (error.IsLanguageError() && |
| 966 (LanguageError::Cast(error).kind() == Report::kBailout)) { |
| 967 if (error.raw() == Object::background_compilation_error().raw()) { | 967 if (error.raw() == Object::background_compilation_error().raw()) { |
| 968 // Fall through to exit the compilation, and retry it later. | 968 // Fall through to exit the compilation, and retry it later. |
| 969 } else { | 969 } else { |
| 970 thread()->set_deopt_id(prev_deopt_id); | 970 thread()->set_deopt_id(prev_deopt_id); |
| 971 TRACE_INLINING(THR_Print(" Bailout: %s\n", | 971 TRACE_INLINING(THR_Print(" Bailout: %s\n", |
| 972 error.ToErrorCString())); | 972 error.ToErrorCString())); |
| 973 PRINT_INLINING_TREE("Bailout", | 973 PRINT_INLINING_TREE("Bailout", |
| 974 &call_data->caller, &function, call); | 974 &call_data->caller, &function, call); |
| 975 return false; | 975 return false; |
| 976 } | 976 } |
| 977 } else { | 977 } else { |
| 978 // Fall through to exit long jump scope. | 978 // Fall through to exit long jump scope. |
| 979 ASSERT(FLAG_precompiled_mode); | |
| 980 } | 979 } |
| 981 } | 980 } |
| 982 } | 981 } |
| 983 | 982 |
| 984 // Propagate a compile-time error. In precompilation we attempt to | 983 // Propagate a compile-time error. In precompilation we attempt to |
| 985 // inline functions that have never been compiled before; when JITing we | 984 // inline functions that have never been compiled before; when JITing we |
| 986 // should only see compile-time errors in unoptimized compilation. | 985 // should only see language errors in unoptimized compilation. |
| 986 // Otherwise, there can be an out-of-memory error (unhandled exception). |
| 987 // In background compilation we may abort compilation as the state | 987 // In background compilation we may abort compilation as the state |
| 988 // changes while compiling. Propagate that 'error' and retry compilation | 988 // changes while compiling. Propagate that 'error' and retry compilation |
| 989 // later. | 989 // later. |
| 990 ASSERT(FLAG_precompiled_mode || Compiler::IsBackgroundCompilation()); | 990 ASSERT(FLAG_precompiled_mode || |
| 991 Compiler::IsBackgroundCompilation() || |
| 992 error.IsUnhandledException()); |
| 991 Thread::Current()->long_jump_base()->Jump(1, error); | 993 Thread::Current()->long_jump_base()->Jump(1, error); |
| 992 UNREACHABLE(); | 994 UNREACHABLE(); |
| 993 return false; | 995 return false; |
| 994 } | 996 } |
| 995 | 997 |
| 996 void PrintInlinedInfo(const Function& top) { | 998 void PrintInlinedInfo(const Function& top) { |
| 997 if (inlined_info_.length() > 0) { | 999 if (inlined_info_.length() > 0) { |
| 998 THR_Print("Inlining into: '%s' growth: %f (%" Pd " -> %" Pd ")\n", | 1000 THR_Print("Inlining into: '%s' growth: %f (%" Pd " -> %" Pd ")\n", |
| 999 top.ToFullyQualifiedCString(), | 1001 top.ToFullyQualifiedCString(), |
| 1000 GrowthFactor(), | 1002 GrowthFactor(), |
| (...skipping 2781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3782 return true; | 3784 return true; |
| 3783 } | 3785 } |
| 3784 | 3786 |
| 3785 default: | 3787 default: |
| 3786 return false; | 3788 return false; |
| 3787 } | 3789 } |
| 3788 } | 3790 } |
| 3789 | 3791 |
| 3790 | 3792 |
| 3791 } // namespace dart | 3793 } // namespace dart |
| OLD | NEW |