+static void FinalisePhis(ir_graph* irg)
+{
+ size_t i;
+
+ for (i = 0; i < count_addrs; i++) {
+ ir_node* next_phi;
+ ir_node* phi;
+
+ for (phi = unfinished_phis[i]; phi != NULL; phi = next_phi) {
+ ir_node* block = get_nodes_block(phi);
+ size_t block_n_preds = get_Block_n_cfgpreds(block);
+
+ next_phi = get_irn_link(phi);
+
+ DB((dbg, LEVEL_4, "===> Finialising phi %+F in %+F\n", phi, block));
+
+ if (block_n_preds == 1) {
+ ir_node* pred_block = get_Block_cfgpred_block(block, 0);
+ ir_nodeset_t* pred_sets = get_irn_link(pred_block);
+ ir_node* after = GenerateSync(irg, pred_block, &pred_sets[i]);
+
+ assert(is_Unknown(get_Phi_pred(phi, 0)));
+ exchange(phi, after);
+ } else {
+ ir_node** in;
+ size_t j;
+
+ NEW_ARR_A(ir_node*, in, block_n_preds);
+ for (j = 0; j < block_n_preds; j++) {
+ ir_node* pred_block = get_Block_cfgpred_block(block, j);
+ ir_nodeset_t* pred_sets = get_irn_link(pred_block);
+
+ if (is_Unknown(get_Phi_pred(phi, j))) {
+ set_Phi_pred(phi, j, GenerateSync(irg, pred_block, &pred_sets[i]));
+ }
+ }
+ }
+ }
+ }
+}
+
+