gnu/gcc/b484690a29147fa190ccb74e0253b2ac89a4ee6d Ranger stmt prefill should process dependencies first.
Rangers stmt prefill is designed to prevent deep recursion through the
normal range_of_stmt/range_of_expr/Range_on_entry cycle when
dependencies have not yet been processed. It neglects to do this for
PHI arguments and if the order is wrong, it can undo everything it is
suppose to solve.
Do a proper DFS stack simulation to process all operands properly.
PR tree-optimization/125758
gcc/
* gimple-range.cc (gimple_ranger::gimple_ranger): Create prefill stack.
(gimple_ranger::gimple_ranger): Dispose of prefill stack.
(gimple_ranger::prefill_name): Maybe push name on prefill stack.
(gimple_ranger::prefill_stmt_dependencies): Implement a DFS
stack for dependency satisfaction.
* gimple-range.h (struct prefill_frame): New.
(m_prefill_stack): New.
(prefill_name): Sadjust parameters.
(m_active_prefill): New.
2 files changed