diff --git a/include/pass_mpi_collective.hpp b/include/pass_mpi_collective.hpp index dfad6a3785e817ccf4b6c4ea2d3208e058f87adf..74f4feaee76d1e2ab0b3586683439ff61a010d93 100644 --- a/include/pass_mpi_collective.hpp +++ b/include/pass_mpi_collective.hpp @@ -59,8 +59,7 @@ public: // calculate dominances void label_dom(function *fun); - void compute_dominance_frontiers(function *fun); - void compute_post_dominance_frontiers(function *fun); + void label_dom_front(function *fun); void free_dom_data(); private: diff --git a/src/pass_mpi_collective.cpp b/src/pass_mpi_collective.cpp index d902530ce65a5925910fc2ad2052ebc13704b0bf..dad7621bfa60eb355baaa385301c44d452f497f0 100644 --- a/src/pass_mpi_collective.cpp +++ b/src/pass_mpi_collective.cpp @@ -59,8 +59,7 @@ unsigned int pass_mpi_collective::execute(function *fun) alloc_bb_aux(fun); label_collec(fun); label_dom(fun); - compute_dominance_frontiers(fun); - compute_post_dominance_frontiers(fun); + label_dom_front(fun); cfgviz_dump(fun, "_split"); free_dom_data(); @@ -274,72 +273,72 @@ void pass_mpi_collective::label_dom(function *fun) } } -void pass_mpi_collective::compute_dominance_frontiers(function *fun) +void pass_mpi_collective::label_dom_front(function *fun) { edge p; edge_iterator ei; - basic_block b; + basic_block bb; + basic_block dom_bb; + basic_block runner; + bb_data *data; - FOR_EACH_BB_FN(b, fun) + FOR_EACH_BB_FN(bb, fun) { - if (EDGE_COUNT(b->preds) >= 2) + if (EDGE_COUNT(bb->preds) < 2) + { + continue; + } + dom_bb = get_immediate_dominator(CDI_DOMINATORS, bb); + FOR_EACH_EDGE(p, ei, bb->preds) { - basic_block domsb = get_immediate_dominator(CDI_DOMINATORS, b); - FOR_EACH_EDGE(p, ei, b->preds) + runner = p->src; + if (runner == ENTRY_BLOCK_PTR_FOR_FN(fun)) { - basic_block runner = p->src; - if (runner == ENTRY_BLOCK_PTR_FOR_FN(fun)) - { - continue; - } - while (runner != domsb) + continue; + } + while (runner != dom_bb) + { + data = (bb_data *) runner->aux; + if (data->dom_front.count(bb) > 0) { - bb_data *data = (bb_data *) runner->aux; - if (data->dom_front.count(b) > 0) - { - break; - } - data->dom_front.insert(b); - runner = get_immediate_dominator(CDI_DOMINATORS, runner); + break; } + data->dom_front.insert(bb); + runner = get_immediate_dominator(CDI_DOMINATORS, runner); } } } -} -void pass_mpi_collective::compute_post_dominance_frontiers(function *fun) -{ - edge p; - edge_iterator ei; - basic_block b; - FOR_EACH_BB_FN(b, fun) + FOR_EACH_BB_FN(bb, fun) { - if (EDGE_COUNT(b->succs) >= 2) + if (EDGE_COUNT(bb->succs) < 2) { - basic_block domsb = get_immediate_dominator(CDI_POST_DOMINATORS, b); - FOR_EACH_EDGE(p, ei, b->succs) + continue; + } + dom_bb = get_immediate_dominator(CDI_POST_DOMINATORS, bb); + FOR_EACH_EDGE(p, ei, bb->succs) + { + runner = p->dest; + if (runner == EXIT_BLOCK_PTR_FOR_FN(fun)) { - basic_block runner = p->dest; - if (runner == EXIT_BLOCK_PTR_FOR_FN(fun)) - { - continue; - } - while (runner != domsb) + continue; + } + while (runner != dom_bb) + { + data = (bb_data *) runner->aux; + if (data->post_dom_front.count(bb) > 0) { - bb_data *data = (bb_data *) runner->aux; - if (data->post_dom_front.count(b) > 0) - { - break; - } - data->post_dom_front.insert(b); - runner = get_immediate_dominator(CDI_POST_DOMINATORS, runner); + break; } + data->post_dom_front.insert(bb); + runner = get_immediate_dominator(CDI_POST_DOMINATORS, runner); } } } } + void pass_mpi_collective::free_dom_data() { free_dominance_info(CDI_DOMINATORS); @@ -451,8 +450,7 @@ void pass_mpi_collective::cfgviz_internal_dump(function *fun, FILE *out) fprintf(out, "}\n"); } -void pass_mpi_collective::cfgviz_dump(function *fun, - const char *suffix) +void pass_mpi_collective::cfgviz_dump(function *fun, const char *suffix) { char *target_filename; FILE *out;