| Index: pkg/compiler/lib/src/tree_ir/optimization/variable_merger.dart
|
| diff --git a/pkg/compiler/lib/src/tree_ir/optimization/variable_merger.dart b/pkg/compiler/lib/src/tree_ir/optimization/variable_merger.dart
|
| index bcc16ca158e3f42c15b2a3a4068954f6a5802dee..273d7a46da0f652eab97ed824c401e02562994ed 100644
|
| --- a/pkg/compiler/lib/src/tree_ir/optimization/variable_merger.dart
|
| +++ b/pkg/compiler/lib/src/tree_ir/optimization/variable_merger.dart
|
| @@ -24,7 +24,8 @@ class VariableMerger implements Pass {
|
| _computeLiveness(builder.blocks);
|
| PriorityPairs priority = new PriorityPairs()..build(node);
|
| Map<Variable, Variable> subst = _computeRegisterAllocation(
|
| - builder.blocks, node.parameters, priority, minifying: minifying);
|
| + builder.blocks, node.parameters, priority,
|
| + minifying: minifying);
|
| new SubstituteVariables(subst).apply(node);
|
| }
|
| }
|
| @@ -276,8 +277,8 @@ class PriorityPairs extends RecursiveVisitor {
|
| if (value is VariableUse) {
|
| _prioritize(node.variable, value.variable);
|
| } else if (value is ApplyBuiltinOperator &&
|
| - isCompoundableOperator(value.operator) &&
|
| - value.arguments[0] is VariableUse) {
|
| + isCompoundableOperator(value.operator) &&
|
| + value.arguments[0] is VariableUse) {
|
| VariableUse use = value.arguments[0];
|
| _prioritize(node.variable, use.variable);
|
| }
|
| @@ -385,10 +386,9 @@ void _computeLiveness(List<Block> blocks) {
|
| ///
|
| /// We then compute a graph coloring, where the color of a node denotes which
|
| /// variable it will be substituted by.
|
| -Map<Variable, Variable> _computeRegisterAllocation(List<Block> blocks,
|
| - List<Variable> parameters,
|
| - PriorityPairs priority,
|
| - {bool minifying}) {
|
| +Map<Variable, Variable> _computeRegisterAllocation(
|
| + List<Block> blocks, List<Variable> parameters, PriorityPairs priority,
|
| + {bool minifying}) {
|
| Map<Variable, Set<Variable>> interference = <Variable, Set<Variable>>{};
|
|
|
| bool allowUnmotivatedMerge(Variable x, Variable y) {
|
| @@ -407,8 +407,8 @@ Map<Variable, Variable> _computeRegisterAllocation(List<Block> blocks,
|
| // The presence of the phi implies that the two variables can contain the
|
| // same value, so it is not that confusing that they get the same name.
|
| return x.element == null ||
|
| - y.element == null ||
|
| - x.element.name == y.element.name;
|
| + y.element == null ||
|
| + x.element.name == y.element.name;
|
| }
|
|
|
| Set<Variable> empty = new Set<Variable>();
|
| @@ -423,9 +423,8 @@ Map<Variable, Variable> _computeRegisterAllocation(List<Block> blocks,
|
| interference.putIfAbsent(variable, () => new Set<Variable>());
|
| }
|
| // Get variables that are live at the catch block.
|
| - Set<Variable> liveCatch = block.catchBlock != null
|
| - ? block.catchBlock.liveIn
|
| - : empty;
|
| + Set<Variable> liveCatch =
|
| + block.catchBlock != null ? block.catchBlock.liveIn : empty;
|
| // Add edges for each variable being assigned here.
|
| for (VariableAccess access in block.accesses.reversed) {
|
| Variable variable = access.variable;
|
| @@ -509,8 +508,7 @@ Map<Variable, Variable> _computeRegisterAllocation(List<Block> blocks,
|
| searchPriorityPairs(parameter, parameter);
|
| }
|
|
|
| - v1loop:
|
| - for (Variable v1 in variables) {
|
| + v1loop: for (Variable v1 in variables) {
|
| // Ignore if the variable has already been assigned a register.
|
| if (subst.containsKey(v1)) continue;
|
|
|
| @@ -532,7 +530,7 @@ Map<Variable, Variable> _computeRegisterAllocation(List<Block> blocks,
|
|
|
| // Find an unused color.
|
| Set<Variable> potential = new Set<Variable>.from(
|
| - registers.where((v2) => allowUnmotivatedMerge(v1, v2)));
|
| + registers.where((v2) => allowUnmotivatedMerge(v1, v2)));
|
| for (Variable v2 in interferenceSet) {
|
| Variable v2subst = subst[v2];
|
| if (v2subst != null) {
|
| @@ -554,7 +552,6 @@ Map<Variable, Variable> _computeRegisterAllocation(List<Block> blocks,
|
|
|
| /// Performs variable substitution and removes redundant assignments.
|
| class SubstituteVariables extends RecursiveTransformer {
|
| -
|
| Map<Variable, Variable> mapping;
|
|
|
| SubstituteVariables(this.mapping);
|
|
|