OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/hydrogen.h" | 5 #include "src/hydrogen.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "src/v8.h" | 9 #include "src/v8.h" |
10 | 10 |
(...skipping 7548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7559 Min(FLAG_max_inlined_source_size, kUnlimitedMaxInlinedSourceSize)) { | 7559 Min(FLAG_max_inlined_source_size, kUnlimitedMaxInlinedSourceSize)) { |
7560 TraceInline(target, caller, "target text too big"); | 7560 TraceInline(target, caller, "target text too big"); |
7561 return kNotInlinable; | 7561 return kNotInlinable; |
7562 } | 7562 } |
7563 | 7563 |
7564 // Target must be inlineable. | 7564 // Target must be inlineable. |
7565 if (!target_shared->IsInlineable()) { | 7565 if (!target_shared->IsInlineable()) { |
7566 TraceInline(target, caller, "target not inlineable"); | 7566 TraceInline(target, caller, "target not inlineable"); |
7567 return kNotInlinable; | 7567 return kNotInlinable; |
7568 } | 7568 } |
7569 if (target_shared->dont_inline()) { | 7569 if (target_shared->DisableOptimizationReason() != kNoReason) { |
7570 TraceInline(target, caller, "target contains unsupported syntax [early]"); | 7570 TraceInline(target, caller, "target contains unsupported syntax [early]"); |
7571 return kNotInlinable; | 7571 return kNotInlinable; |
7572 } | 7572 } |
7573 | 7573 |
7574 int nodes_added = target_shared->ast_node_count(); | 7574 int nodes_added = target_shared->ast_node_count(); |
7575 return nodes_added; | 7575 return nodes_added; |
7576 } | 7576 } |
7577 | 7577 |
7578 | 7578 |
7579 bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> target, | 7579 bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> target, |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7646 } | 7646 } |
7647 FunctionLiteral* function = target_info.function(); | 7647 FunctionLiteral* function = target_info.function(); |
7648 | 7648 |
7649 // The following conditions must be checked again after re-parsing, because | 7649 // The following conditions must be checked again after re-parsing, because |
7650 // earlier the information might not have been complete due to lazy parsing. | 7650 // earlier the information might not have been complete due to lazy parsing. |
7651 nodes_added = function->ast_node_count(); | 7651 nodes_added = function->ast_node_count(); |
7652 if (nodes_added > Min(FLAG_max_inlined_nodes, kUnlimitedMaxInlinedNodes)) { | 7652 if (nodes_added > Min(FLAG_max_inlined_nodes, kUnlimitedMaxInlinedNodes)) { |
7653 TraceInline(target, caller, "target AST is too large [late]"); | 7653 TraceInline(target, caller, "target AST is too large [late]"); |
7654 return false; | 7654 return false; |
7655 } | 7655 } |
7656 AstProperties::Flags* flags(function->flags()); | 7656 if (function->dont_optimize()) { |
7657 if (flags->Contains(kDontInline) || function->dont_optimize()) { | |
7658 TraceInline(target, caller, "target contains unsupported syntax [late]"); | 7657 TraceInline(target, caller, "target contains unsupported syntax [late]"); |
7659 return false; | 7658 return false; |
7660 } | 7659 } |
7661 | 7660 |
7662 // If the function uses the arguments object check that inlining of functions | 7661 // If the function uses the arguments object check that inlining of functions |
7663 // with arguments object is enabled and the arguments-variable is | 7662 // with arguments object is enabled and the arguments-variable is |
7664 // stack allocated. | 7663 // stack allocated. |
7665 if (function->scope()->arguments() != NULL) { | 7664 if (function->scope()->arguments() != NULL) { |
7666 if (!FLAG_inline_arguments) { | 7665 if (!FLAG_inline_arguments) { |
7667 TraceInline(target, caller, "target uses arguments object"); | 7666 TraceInline(target, caller, "target uses arguments object"); |
(...skipping 4696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12364 if (ShouldProduceTraceOutput()) { | 12363 if (ShouldProduceTraceOutput()) { |
12365 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 12364 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
12366 } | 12365 } |
12367 | 12366 |
12368 #ifdef DEBUG | 12367 #ifdef DEBUG |
12369 graph_->Verify(false); // No full verify. | 12368 graph_->Verify(false); // No full verify. |
12370 #endif | 12369 #endif |
12371 } | 12370 } |
12372 | 12371 |
12373 } } // namespace v8::internal | 12372 } } // namespace v8::internal |
OLD | NEW |