// $Id: AddArithOpExpr.java,v 1.1.1.1 1999/12/05 22:19:50 mpp Exp $

package IR2;

public class AddArithOpExpr extends ArithOpExpr {
  public AddArithOpExpr(RValue a1, RValue a2)
	throws SemanticTypeException { super(a1, a2); }

  public String node_name() { return "add_arith_op_expr"; }

  public String desc() { return super.desc("+"); }

  protected int op_num() { return DelocalizedBinaryOpInstruction.ADD; }


  /* Algebraic simplification optimization. */
  public RValue algebraic_simplify() {
    arg1 = arg1.algebraic_simplify();
    arg2 = arg2.algebraic_simplify();
    /* 0 + i == i */
    if (arg1 instanceof IntImmedExpr && ((IntImmedExpr)arg1).get_value() == 0)
      return arg2;
    /* i + 0 == i */
    if (arg2 instanceof IntImmedExpr && ((IntImmedExpr)arg2).get_value() == 0)
      return arg1;
    return this;
  }
}
