anchor.diff:    }
   
     void processWorklist() {
  -    while (!worklist.isEmpty) {
  -      int id = worklist.removeLast();
  -      HInstruction instruction = workmap[id];
  -      assert(instruction != null);
  -      workmap.remove(id);
  -      if (updateType(instruction)) {
  -        addDependentInstructionsToWorkList(instruction);
  +    do {
  +      while (!worklist.isEmpty) {
  +        int id = worklist.removeLast();
  +        HInstruction instruction = workmap[id];
  +        assert(instruction != null);
  +        workmap.remove(id);
  +        if (updateType(instruction)) {
  +          addDependentInstructionsToWorkList(instruction);
  +        }
         }
  -    }
  -  }
  +      // While processing the optimizable arithmetic instructions, we
  +      // may discover better type information for dominated users of
  +      // replaced operands, so we may need to take another stab at
  +      // emptying the worklist afterwards.
  +      processPendingOptimizations();
  +    } while (!worklist.isEmpty);
  +  }
  +
   
     void addDependentInstructionsToWorkList(HInstruction instruction) {}
   
  
positive.code:     }
      return false;
    }
  }
  
  class SsaNonSpeculativeTypePropagator extends SsaTypePropagator {
  
negative.code: 
    final Map<int, HInstruction> workmap = new Map<int, HInstruction>();
    final List<int> worklist = new List<int>();
    final Map<HInstruction, Function> pendingOptimizations =
        new Map<HInstruction, Function>();  
  
    final Compiler compiler;
    String get name => 'type propagator';
  