DfaValue (DfaValue left, DfaValue right, DfaMemoryState state, DfIntegralType resultType, LongRangeBinOp op) { if (op == null) return myFactory.getUnknown(); DfaValue value = doCreate(left, right, state, resultType, op); if (value != null) { return value; } DfIntegralType leftType = ObjectUtils.tryCast(state.getDfType(left), DfIntegralType.class); DfIntegralType rightType = ObjectUtils.tryCast(state.getDfType(right), DfIntegralType.class); if (leftType == null || rightType == null) { return myFactory.fromDfType(resultType); } if (op == LongRangeBinOp.MUL) { if (LongRangeSet.point(1).equals(leftType.getRange())) return right; if (LongRangeSet.point(1).equals(rightType.getRange())) return left; } if (op == LongRangeBinOp.DIV) { if (LongRangeSet.point(1).equals(rightType.getRange())) return left; } if (op == LongRangeBinOp.SHL || op == LongRangeBinOp.SHR || op == LongRangeBinOp.USHR) { if (LongRangeSet.point(0).equals(rightType.getRange())) return left; } DfType resType = leftType.eval(rightType, op); return myFactory.fromDfType(resType); }