+ } else if (is_Sync(n)) {
+ /* we assume that most of the time the inputs of a Sync node are already
+ * sorted, so check this first as a shortcut */
+ bool ins_sorted = true;
+ int arity = get_irn_arity(n);
+ const ir_node *last = get_irn_n(n, 0);
+ int i;
+ for (i = 1; i < arity; ++i) {
+ const ir_node *node = get_irn_n(n, i);
+ if (get_irn_node_nr(node) < get_irn_node_nr(last)) {
+ ins_sorted = false;
+ break;
+ }
+ last = node;
+ }
+
+ if (!ins_sorted) {
+ ir_node **ins = get_irn_in(n)+1;
+ ir_node **new_ins = XMALLOCN(ir_node*, arity);
+ memcpy(new_ins, ins, arity*sizeof(ins[0]));
+ qsort(new_ins, arity, sizeof(new_ins[0]), cmp_node_nr);
+ set_irn_in(n, arity, new_ins);
+ xfree(new_ins);
+ }