diff --git a/kernel/select.cc b/kernel/select.cc
index ae76f4f43..df13fce1f 100644
--- a/kernel/select.cc
+++ b/kernel/select.cc
@@ -325,6 +325,12 @@ static void select_stmt(RTLIL::Design *design, std::string arg)
 			if (design->selection_stack.size() > 0)
 				work_stack.push_back(design->selection_stack.back());
 		} else
+		if (arg == "##") {
+			while (work_stack.size() > 1) {
+				select_op_union(design, work_stack.front(), work_stack.back());
+				work_stack.pop_back();
+			}
+		} else
 		if (arg == "#n") {
 			if (work_stack.size() < 1)
 				log_cmd_error("Must have at least one element on stack for operator #n.\n");
@@ -617,6 +623,9 @@ struct SelectPass : public Pass {
 		log("    #\n");
 		log("        push a copy of the current selection to the stack\n");
 		log("\n");
+		log("    ##\n");
+		log("        replace the stack with a union of all elements on it\n");
+		log("\n");
 		log("    #n\n");
 		log("        replace top set with its invert\n");
 		log("\n");