diff --git a/src/pass_mpi_collective.cpp b/src/pass_mpi_collective.cpp
index 713adc7e8a214e2e1af72584f2c981c3f3d2d179..da75c71b833abbe3b05fec92bdd8c2bd47e8c281 100644
--- a/src/pass_mpi_collective.cpp
+++ b/src/pass_mpi_collective.cpp
@@ -134,18 +134,25 @@ void pass_mpi_collective::split_blocks(function *fun)
 	basic_block bb;
 	gimple_stmt_iterator gsi;
 	gimple *stmt;
+	gimple *prev_stmt;
 	size_t nb_collective;
+	bool split;
 
 	FOR_EACH_BB_FN(bb, fun)
 	{
 		nb_collective = 0;
-		for (gsi = gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi))
+		stmt = NULL;
+		split = false;
+		for (gsi = gsi_start_bb(bb); !gsi_end_p(gsi) && ! split; gsi_next(&gsi))
 		{
+			prev_stmt = stmt;
 			stmt = gsi_stmt(gsi);
 			if (is_mpi_collec(stmt) != LAST_AND_UNUSED_MPI_COLLECTIVE_CODE)
-			{ ++nb_collective; }
-			if (nb_collective >= 2)
-			{ split_block(bb, stmt); }
+				++nb_collective;
+			if (nb_collective >= 2){
+				split_block(bb, prev_stmt);
+				split = true;
+			}
 		}
 	}
 }