diff --git a/src/tableau/tableau_optimization.cpp b/src/tableau/tableau_optimization.cpp index 02221685..864736af 100644 --- a/src/tableau/tableau_optimization.cpp +++ b/src/tableau/tableau_optimization.cpp @@ -388,11 +388,14 @@ void merge_rotations(Tableau& tableau) { return; } - auto& clifford = std::get(tableau.front()); - auto& rotations = std::get>(tableau.back()); - - merge_rotations(rotations); - absorb_clifford_rotations(clifford, rotations); + auto& clifford = std::get(tableau.front()); + auto& rotations = std::get>(tableau.back()); + auto n_rotations = SIZE_MAX; + do { // NOLINT(cppcoreguidelines-avoid-do-while) + n_rotations = rotations.size(); + merge_rotations(rotations); + absorb_clifford_rotations(clifford, rotations); + } while (rotations.size() < n_rotations); } // phase polynomial optimization