+struct pass_t {
+ ir_prog_pass_t pass;
+ dump_graph_func *dump_graph;
+ char suffix[1];
+};
+
+/**
+ * Wrapper around dump_all_ir_graphs().
+ */
+static int dump_all_ir_graphs_wrapper(ir_prog *irp, void *context) {
+ struct pass_t *pass = context;
+
+ (void)irp;
+ dump_all_ir_graphs(pass->dump_graph, pass->suffix);
+ return 0;
+}
+
+ir_prog_pass_t *dump_all_ir_graph_pass(
+ const char *name, dump_graph_func *dump_graph, const char *suffix) {
+ size_t len = strlen(suffix);
+ struct pass_t *pass = xmalloc(sizeof(*pass) + len);
+ ir_prog_pass_t *res = def_prog_pass_constructor(
+ &pass->pass, name ? name : "dump_all_graphs", dump_all_ir_graphs_wrapper);
+
+ /* this pass does not change anything, so neither dump nor verify is needed. */
+ res->dump_irprog = ir_prog_no_dump;
+ res->verify_irprog = ir_prog_no_verify;
+
+ pass->dump_graph = dump_graph;
+ strcpy(pass->suffix, suffix);
+
+ return res;
+}