| Index: pkg/compiler/lib/src/ssa/types_propagation.dart | 
| diff --git a/pkg/compiler/lib/src/ssa/types_propagation.dart b/pkg/compiler/lib/src/ssa/types_propagation.dart | 
| index 49aa6f99cf3d19f255376d32cdcc2a7465b6ea71..7db5f0521277a5914cb8028552fd1d8f315427c1 100644 | 
| --- a/pkg/compiler/lib/src/ssa/types_propagation.dart | 
| +++ b/pkg/compiler/lib/src/ssa/types_propagation.dart | 
| @@ -397,7 +397,12 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase { | 
| addDependentInstructionsToWorkList(next); | 
| } | 
| } else { | 
| -        bool hasCandidates() => receiver.dominatedUsers(instruction).length > 1; | 
| +        DominatedUses uses; | 
| +        bool hasCandidates() { | 
| +          uses = | 
| +              DominatedUses.of(receiver, instruction, excludeDominator: true); | 
| +          return uses.isNotEmpty; | 
| +        } | 
|  | 
| if ((receiver.usedBy.length <= _MAX_QUICK_USERS) | 
| ? (hasCandidates() && computeNewType() != receiverType) | 
| @@ -407,7 +412,7 @@ class SsaTypePropagator extends HBaseVisitor implements OptimizationPhase { | 
| HTypeKnown converted = | 
| new HTypeKnown.witnessed(newType, receiver, instruction); | 
| instruction.block.addBefore(instruction.next, converted); | 
| -          receiver.replaceAllUsersDominatedBy(converted.next, converted); | 
| +          uses.replaceWith(converted); | 
| addDependentInstructionsToWorkList(converted); | 
| } | 
| } | 
|  |