anchor.diff:      attachLocationToLast(node);
     }
   
  +  static String mapRelationalOperator(String op, bool inverse) {
  +    Map<String, String> inverseOperator = const <String, String>{
  +      "==" : "!=",
  +      "!=" : "==",
  +      "===": "!==",
  +      "!==": "===",
  +      "<"  : ">=",
  +      "<=" : ">",
  +      ">"  : "<=",
  +      ">=" : "<"
  +    };
  +    return inverse ? inverseOperator[op] : op;
  +  }
  +
     void generateNot(HInstruction input) {
       bool canGenerateOptimizedComparison(HInstruction instruction) {
         if (instruction is !HRelational) return false;
  
positive.code:           && right.instructionType.isUseful() && right.isInteger();
      }
  
      if (input is HBoolify && isGenerateAtUseSite(input)) {
        use(input.inputs[0]);
        push(new js.Binary("!==", pop(), newLiteralBool(true)), input);
      } else if (canGenerateOptimizedComparison(input) &&
                 isGenerateAtUseSite(input)) {
        Map<String, String> inverseOperator = const <String, String>{
          "==" : "!=",
          "!=" : "==",
          "===": "!==",
          "!==": "===",
          "<"  : ">=",
          "<=" : ">",
          ">"  : "<=",
          ">=" : "<"
        };
        HRelational relational = input;
        BinaryOperation operation = relational.operation(backend.constantSystem);
        visitRelational(input, inverseOperator[operation.name.stringValue]);
      } else {
        use(input);
        push(new js.Prefix("!", pop()));
  
negative.code:           new js.Binary("==", pop(), new js.LiteralNull());
        use(right);
        js.Binary rightEqualsNull =
            new js.Binary(mapRelationalOperator("==", inverse),
                          pop(), new js.LiteralNull());
        use(right);
        use(left);
        js.Binary tripleEq = new js.Binary(mapRelationalOperator("===", inverse),
                                           pop(), pop());
  
        push(new js.Conditional(leftEqualsNull, rightEqualsNull, tripleEq));
      }
    }
  
    visitIdentity(HIdentity node) {
      emitIdentityComparison(node.left, node.right, false);
    }
  
    visitAdd(HAdd node)               => visitInvokeBinary(node, '+');
  