14 #include "bephicongr_t.h"
17 size_t phi_irn_data_offset = 0;
19 void be_phi_congr_class_init(void) {
20 phi_irn_data_offset = register_additional_node_data(sizeof(phi_info_t));
24 #define set_phi_class(n,new_tgt) get_irn_phi_info(n)->phi_congr_class=new_tgt
25 #define set_phi_class_size(n,v) get_irn_phi_info(n)->phi_class_size=v
26 #define inc_phi_class_size(n) get_irn_phi_info(n)->phi_class_size++
28 static void correct_phi_class(ir_node *n, ir_node *new_tgt){
30 check = get_phi_class_size(n) + get_phi_class_size(new_tgt);
32 for (i = 0, max = get_irn_arity(n); i < max; i++) {
33 ir_node *arg = get_irn_n(n, i);
34 set_phi_class(arg, new_tgt);
35 inc_phi_class_size(new_tgt);
38 get_irn_phi_info(n)->phi_class_size=0;
39 //set_phi_class_size(n, 0);
41 assert((check == get_phi_class_size(n) + get_phi_class_size(new_tgt)) && "Re-setting pointers went wrong.");
45 void det_phi_congr_class(ir_node *curr_phi) {
47 assert(is_Phi(curr_phi) && "This must be a phi node.");
49 set_phi_class(curr_phi, curr_phi);
51 for (i = 0, n = get_irn_arity(curr_phi); i < n; i++) {
54 arg = get_irn_n(curr_phi, i);
55 pc = get_phi_class(arg);
57 set_phi_class(arg, curr_phi);
59 correct_phi_class(pc, curr_phi);
64 void be_det_phi_congr_classes(void) {
65 //forall phis: det_phi_congr_classes(n);