if (isValueConstantValued(innerOp)) { return true; final boolean isOp1Constant = isValueConstantValued(op1); final boolean isOp2Constant = isValueConstantValued(op2); Value c2 = getConstantValueOf(op2); if (c2 instanceof IntConstant && ((IntConstant) c2).value == 0) { return false;
/** * Returns true if given value is determined to be constant valued, false otherwise **/ public static boolean isValueConstantValued(Value op) { if (op instanceof PhiExpr) { Iterator<Value> argsIt = ((PhiExpr) op).getValues().iterator(); Constant firstConstant = null; while (argsIt.hasNext()) { Value arg = argsIt.next(); if (!(arg instanceof Constant)) { return false; } if (firstConstant == null) { firstConstant = (Constant) arg; } else if (!firstConstant.equals(arg)) { return false; } } return true; } return Evaluator.isValueConstantValued(op); }
/** * Returns the constant value of <code>op</code> if it is easy to find the constant value; else returns <code>null</code>. **/ public static Value getConstantValueOf(Value op) { if (!(op instanceof PhiExpr)) { return Evaluator.getConstantValueOf(op); } if (!(isValueConstantValued(op))) { return null; } return ((PhiExpr) op).getValue(0); }
if (Evaluator.isValueConstantValued(cond)) { cond = Evaluator.getConstantValueOf(cond);
if (!isValueConstantValued(op)) { return null; return op; } else if (op instanceof UnopExpr) { Value c = getConstantValueOf(((UnopExpr) op).getOp()); if (op instanceof NegExpr) { return ((NumericConstant) c).negate(); final Value op2 = binExpr.getOp2(); final Value c1 = getConstantValueOf(op1); final Value c2 = getConstantValueOf(op2);
Value value = useBox.getValue(); if (!(value instanceof Constant)) { if (Evaluator.isValueConstantValued(value)) { Value constValue = Evaluator.getConstantValueOf(value); if (useBox.canContainValue(constValue)) { useBox.setValue(constValue);
if (isValueConstantValued(innerOp)) return true; if (!isValueConstantValued(((BinopExpr)op).getOp1()) || !isValueConstantValued(((BinopExpr)op).getOp2())) return false; Value c1 = getConstantValueOf(((BinopExpr)op).getOp1()); Value c2 = getConstantValueOf(((BinopExpr)op).getOp2()); if (isValueConstantValued(((BinopExpr)op).getOp1()) && isValueConstantValued(((BinopExpr)op).getOp2())) return true;
if (isValueConstantValued(innerOp)) return true; if (!isValueConstantValued(((BinopExpr)op).getOp1()) || !isValueConstantValued(((BinopExpr)op).getOp2())) return false; Value c1 = getConstantValueOf(((BinopExpr)op).getOp1()); Value c2 = getConstantValueOf(((BinopExpr)op).getOp2()); if (isValueConstantValued(((BinopExpr)op).getOp1()) && isValueConstantValued(((BinopExpr)op).getOp2())) return true;
if (Evaluator.isValueConstantValued(cond)) { cond = Evaluator.getConstantValueOf(cond);
if (Evaluator.isValueConstantValued(cond)) { cond = Evaluator.getConstantValueOf(cond);
Value value = useBox.getValue(); if (!(value instanceof Constant)) { if (Evaluator.isValueConstantValued(value)) { Value constValue = Evaluator.getConstantValueOf(value); if (useBox.canContainValue(constValue)) { useBox.setValue(constValue);
Value value = useBox.getValue(); if (!(value instanceof Constant)) { if (Evaluator.isValueConstantValued(value)) { Value constValue = Evaluator.getConstantValueOf(value); if (useBox.canContainValue(constValue)) { useBox.setValue(constValue);
if (!isValueConstantValued(op)) return null; return op; else if (op instanceof UnopExpr) { Value c = getConstantValueOf(((UnopExpr)op).getOp()); if (op instanceof NegExpr) return ((NumericConstant)c).negate(); Value c1 = getConstantValueOf(((BinopExpr)op).getOp1()); Value c2 = getConstantValueOf(((BinopExpr)op).getOp2()); if (op instanceof AddExpr) return ((NumericConstant)c1).add((NumericConstant)c2);
if (!isValueConstantValued(op)) return null; return op; else if (op instanceof UnopExpr) { Value c = getConstantValueOf(((UnopExpr)op).getOp()); if (op instanceof NegExpr) return ((NumericConstant)c).negate(); Value c1 = getConstantValueOf(((BinopExpr)op).getOp1()); Value c2 = getConstantValueOf(((BinopExpr)op).getOp2()); if (op instanceof AddExpr) return ((NumericConstant)c1).add((NumericConstant)c2);