+++ /dev/null
-/* PR120003 */
-/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-cddce3-details" } */
-
-extern _Bool g(int);
-
-_Bool f()
-{
- _Bool retval = 0;
- for(int i=0; i<1000000; ++i)
- retval = retval || g(i);
- return retval;
-}
-
-/* Jump threading after loop optimization should get the counting loop
- separated from the loop until retval is true and CD-DCE elide it.
- It's difficult to check for the fact that a true retval terminates
- the loop so check CD-DCE eliminates one loop instead. */
-/* { dg-final { scan-tree-dump "fix_loop_structure: removing loop" "cddce3" } } */
unsigned overall_paths,
back_threader_profitability &profit)
{
+ if (m_visited_bbs.add (bb))
+ return;
+
m_path.safe_push (bb);
// Try to resolve the path without looking back. Avoid resolving paths
// Continue looking for ways to extend the path but limit the
// search space along a branch
else if ((overall_paths = overall_paths * EDGE_COUNT (bb->preds))
- <= (unsigned)param_max_jump_thread_paths
- && !m_visited_bbs.add (bb))
+ <= (unsigned)param_max_jump_thread_paths)
{
// For further greedy searching we want to remove interesting
// names defined in BB but add ones on the PHI edges for the
backtracking we have to restore it. */
for (int j : new_imports)
bitmap_clear_bit (m_imports, j);
- m_visited_bbs.remove (bb);
}
else if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, " FAIL: Search space limit %d reached.\n",
// Reset things to their original state.
m_path.pop ();
+ m_visited_bbs.remove (bb);
}
// Search backwards from BB looking for paths where the final