X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbesched.h;h=eb7907d1f80e3c93df88fa2d5956efd8d02e1484;hb=b7908561f0eedb4fd052a2c5396f33e0883dfa5d;hp=aa8c314ac945d7de7123d98662d0b3df6eace7e8;hpb=d6ad56f1135216a000cb556c5a32c95e66883cd7;p=libfirm diff --git a/ir/be/besched.h b/ir/be/besched.h index aa8c314ac..eb7907d1f 100644 --- a/ir/be/besched.h +++ b/ir/be/besched.h @@ -188,6 +188,16 @@ static inline bool sched_comes_after(const ir_node *n1, const ir_node *n2) #define sched_foreach_safe(block, irn) \ for (ir_node *irn, *irn##__next = sched_first(block); !sched_is_end(irn = irn##__next) ? irn##__next = sched_next(irn), 1 : 0;) +/** + * A shorthand macro for reversely iterating over a schedule while the current + * node may be removed or replaced. + * + * @param block The block. + * @param irn A ir node pointer used as an iterator. + */ +#define sched_foreach_reverse_safe(block, irn) \ + for (ir_node *irn, *irn##__prev = sched_last(block); !sched_is_begin(irn = irn##__prev) ? irn##__prev = sched_prev(irn), 1 : 0;) + /** * Type for a function scheduling a graph */