+#ifdef NEED_SORT
+/**
+ * Walker for cf_dependent_on().
+ * This function searches a node tgt recursively from a given node
+ * but is restricted to the given extended basic block.
+ *
+ * @return 1 if tgt was reachable from curr, 0 if not.
+ */
+static int check_cf_dependence(ir_node *curr, ir_node *tgt, ir_extblk *extbb)
+{
+ int n, i;
+
+ /* Note: we did not include the leader in our serach, so
+ there could not be any loops here. */
+ if (get_Block_extbb(curr) != extbb)
+ return 0;
+
+ if (curr == tgt)
+ return 1;
+
+ for (i = 0, n = get_Block_n_cfgpreds(curr); i < n; ++i) {
+ if (check_cf_dependence(get_Block_cfgpred_block(curr, i), tgt, extbb))
+ return 1;
+ }
+ return 0;
+}
+
+/**
+ * Check if a block is control dependent on another one.
+ * Both blocks must be in the same extended basic block.
+ * @param blk1 The first block.
+ * @param blk2 The second block.
+ * @return 1, if blk1 is control dependent (transitively) on blk2, 0 if not.
+ */
+static int cf_dependent_on(ir_node *blk1, ir_node *blk2)
+{
+ ir_extblk *extbb = get_Block_extbb(blk1);
+ ir_graph *irg = get_irn_irg(blk1);
+
+ assert(extbb == get_Block_extbb(blk2));
+ return check_cf_dependence(blk1, blk2, extbb);
+}
+
+/**
+ * Compare two blocks for dependency.
+ *
+ * @return
+ * 0 if both blocks nodes are equal
+ * 1 block b1 depends on block b2
+ * -1 block b2 depends on block d2
+ */
+static int block_order(const void *b1, const void *b2)
+{
+ ir_node *n1 = *(ir_node **)b1;
+ ir_node *n2 = *(ir_node **)b2;
+
+ return n1 == n2 ? 0 : (cf_dependent_on(n1, n2) ? -1 : 1);
+}
+#endif /* NEED_SORT */
+