private static DfType compareInteger(DfaCallArguments args, DfaMemoryState state) {
    DfaValue[] arguments = args.myArguments;
    if (arguments.length != 2) return DfType.TOP;
    RelationType relation = state.getRelation(arguments[0], arguments[1]);
    if (relation == null) {
      LongRangeSet left = DfLongType.extractRange(state.getDfType(arguments[0]));
      LongRangeSet right = DfLongType.extractRange(state.getDfType(arguments[1]));
      if (left.isEmpty() || right.isEmpty()) return DfType.BOTTOM;
      if (left.max() < right.min()) {
        relation = RelationType.LT;
      }
      else if (left.max() <= right.min()) {
        relation = RelationType.LE;
      }
      else if (left.min() > right.max()) {
        relation = RelationType.GT;
      }
      else if (left.min() >= right.max()) {
        relation = RelationType.GE;
      }
      else if (!left.intersects(right)) {
        relation = RelationType.NE;
      }
      else if (left.getConstantValue() != null && left.equals(right)) {
        relation = RelationType.EQ;
      }
    }
    if (relation != null) {
      return intRangeClamped(LongRangeSet.point(0).fromRelation(relation));
    }
    return DfType.TOP;
  }
private static DfType compareInteger(DfaCallArguments args, DfaMemoryState state)