anchor.diff:      if (s is Assign && t is Assign && s.variable == t.variable) {
         Statement next = combineStatements(s.next, t.next);
         if (next != null) {
  -        --t.variable.writeCount; // Two assignments become one.
  +        // Destroy both original assignments to the variable.
  +        --s.variable.writeCount;
  +        --t.variable.writeCount;
  +        // The Assign constructor will increment the reference count again.
           return new Assign(s.variable,
                             combine(s.definition, t.definition),
                             next);
  
positive.code:   Expression visitVariableUse(VariableUse node) {
      // Propagate constant to use site.
      Expression constant = constantEnvironment[node.variable];
      if (constant != null) return constant;
  
      // Propagate a variable's definition to its use site if:
      // 1.  It has a single use, to avoid code growth and potential duplication
  
negative.code:     //     reorder expressions with side effects.
      if (!environment.isEmpty &&
          environment.last.variable == node.variable &&
          node.variable.readCount == 1) {
        --node.variable.readCount;
        return visitExpression(environment.removeLast().definition);
      }
  
  