+/* initialize data structure for given irn in given phase */
+static void *irn_phi_class_init(ir_phase *ph, const ir_node *irn, void *data) {
+ irn_phi_class_t *ipc = data ? data : phase_alloc(ph, sizeof(ipc[0]));
+ (void) irn;
+ memset(ipc, 0, sizeof(ipc[0]));
+ return ipc;
+}
+
+/**
+ * Builds the phi class, starting from.
+ * @param phi_classes The phi class object
+ * @param irn The to start from
+ * @param pc The phi class this irn should be put into.
+ * Set to NULL if you want a new one.
+ */
+static void phi_class_build(phi_classes_t *phi_classes, ir_node *irn, ir_node ***pc) {
+ const ir_edge_t *edge;
+
+ assert((! phi_classes->pure_phi_classes || is_Phi(irn)) && "Node must be Phi when pure_phi_classes set.");
+
+ /* If irn has a phi class assigned already
+ * return immediately to stop recursion */
+ if (_get_phi_class(&phi_classes->ph, irn)) {
+ DBG((phi_classes->dbg, LEVEL_2, "\talready done for %+F\n", irn));
+ return;
+ }