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

Unified Diff: pkg/compiler/lib/src/ssa/builder.dart

Issue 1345413002: dart2js ssa: Inlining heuristics ignore assert() statement size. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | sdk/lib/_internal/js_runtime/lib/js_rti.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/ssa/builder.dart
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index 40e291d2cce465bcba536335cd827a5c942d264b..068c836ceb74564cd907b764134fc9c43f7f5988 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -1363,14 +1363,16 @@ class SsaBuilder extends ast.Visitor
bool doesNotContainCode() {
// A function with size 1 does not contain any code.
- return InlineWeeder.canBeInlined(function, 1, true);
+ return InlineWeeder.canBeInlined(function, 1, true,
+ enableUserAssertions: compiler.enableUserAssertions);
}
bool reductiveHeuristic() {
// The call is on a path which is executed rarely, so inline only if it
// does not make the program larger.
if (isCalledOnce(element)) {
- return InlineWeeder.canBeInlined(function, -1, false);
+ return InlineWeeder.canBeInlined(function, -1, false,
+ enableUserAssertions: compiler.enableUserAssertions);
}
// TODO(sra): Measure if inlining would 'reduce' the size. One desirable
// case we miss by doing nothing is inlining very simple constructors
@@ -1408,7 +1410,8 @@ class SsaBuilder extends ast.Visitor
// We may have forced the inlining of some methods. Therefore check
// if we can inline this method regardless of size.
assert(InlineWeeder.canBeInlined(function, -1, false,
- allowLoops: true));
+ allowLoops: true,
+ enableUserAssertions: compiler.enableUserAssertions));
return true;
}
@@ -1431,7 +1434,8 @@ class SsaBuilder extends ast.Visitor
}
bool canInline;
canInline = InlineWeeder.canBeInlined(
- function, maxInliningNodes, useMaxInliningNodes);
+ function, maxInliningNodes, useMaxInliningNodes,
+ enableUserAssertions: compiler.enableUserAssertions);
if (canInline) {
backend.inlineCache.markAsInlinable(element, insideLoop: insideLoop);
} else {
@@ -8468,19 +8472,24 @@ class InlineWeeder extends ast.Visitor {
final int maxInliningNodes;
final bool useMaxInliningNodes;
final bool allowLoops;
+ final bool enableUserAssertions;
InlineWeeder(this.maxInliningNodes,
this.useMaxInliningNodes,
- this.allowLoops);
+ this.allowLoops,
+ this.enableUserAssertions);
static bool canBeInlined(FunctionElement function,
int maxInliningNodes,
bool useMaxInliningNodes,
- {bool allowLoops: false}) {
+ {bool allowLoops: false,
+ bool enableUserAssertions: null}) {
+ assert(enableUserAssertions is bool); // Ensure we passed it.
if (function.resolvedAst.elements.containsTryStatement) return false;
InlineWeeder weeder =
- new InlineWeeder(maxInliningNodes, useMaxInliningNodes, allowLoops);
+ new InlineWeeder(maxInliningNodes, useMaxInliningNodes, allowLoops,
+ enableUserAssertions);
ast.FunctionExpression functionExpression = function.node;
weeder.visit(functionExpression.initializers);
weeder.visit(functionExpression.body);
@@ -8512,6 +8521,13 @@ class InlineWeeder extends ast.Visitor {
}
@override
+ void visitAssert(ast.Assert node) {
+ if (enableUserAssertions) {
+ visitNode(node);
+ }
+ }
+
+ @override
void visitAsyncModifier(ast.AsyncModifier node) {
if (node.isYielding || node.isAsynchronous) {
tooDifficult = true;
« no previous file with comments | « no previous file | sdk/lib/_internal/js_runtime/lib/js_rti.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698