@Override
 public IRStm unNx() {
   return IR.SEQ(
       test.unCx(t, f),
       IR.SEQ(IR.LABEL(t), thenExp.unNx(), IR.JUMP(join)),
       IR.SEQ(IR.LABEL(f), elseExp.unNx(), IR.JUMP(join)),
       IR.LABEL(join));
 }
 @Override
 public IRExp unEx() {
   Temp res = new Temp();
   return IR.ESEQ(
       IR.SEQ(
           test.unCx(t, f),
           IR.SEQ(IR.LABEL(t), IR.MOVE(IR.TEMP(res), thenExp.unEx())),
           IR.SEQ(IR.LABEL(f), IR.MOVE(IR.TEMP(res), elseExp.unEx()))),
       IR.TEMP(res));
 }