* @see StackExpr
	 * @see StackManipStmt
	 */
	public void visit_dup(final Instruction inst) {
		// 0 -> 0 0

		db("      dup");

		if (Tree.USE_STACK) {
			saveStack();

			final StackExpr s0 = (StackExpr) stack.pop1();

			final StackExpr[] s = new StackExpr[] { s0 };
			manip(s, new int[] { 0, 0 }, StackManipStmt.DUP);

		} else {
			final Expr s0 = stack.pop1();

			final LocalExpr t0 = newStackLocal(stack.height(), s0.type());

			db("        s0: " + s0);
			db("        t0: " + t0);

			if (!t0.equalsExpr(s0)) {
				db("          t0 <- s0");
				addStore(t0, s0);
			}

			Expr copy = (Expr) t0.clone();
			copy.setDef(null);
			stack.push(copy);

			copy = (Expr) t0.clone();
			copy.setDef(null);
			stack.push(copy);
		}
	}