From fe1f21cc22a959f1f2ec7c217b91cc80c6bf1963 Mon Sep 17 00:00:00 2001
From: "nicolas.marie" <nicolas.marie@ensiie.eu>
Date: Tue, 10 Oct 2023 17:55:34 +0200
Subject: [PATCH] refactor dominance frontier compute

---
 include/pass_mpi_collective.hpp |  3 +-
 src/pass_mpi_collective.cpp     | 90 ++++++++++++++++-----------------
 2 files changed, 45 insertions(+), 48 deletions(-)

diff --git a/include/pass_mpi_collective.hpp b/include/pass_mpi_collective.hpp
index dfad6a3..74f4fea 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 d902530..dad7621 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;
-- 
GitLab