On Thu, Nov 13, 2025 at 11:30 AM Dimitar Dimitrov <[email protected]> wrote: > > Starting with r16-4438-ga93f80feeef744, the edges started to be sorted > in ascending order. Thus the most likely branches were deprioritized > instead of optimized to fallthroughs. > > Fix by restoring the sorting order prior to r16-4438-ga93f80feeef744. > > There are no regressions for C and C++ on x86_64-pc-linux-gnu. > > I struggle to write a test case. Suggestions how to check the BB order > are welcome.
The easiest way I know of is to write a check-function-bodies for the major targets (x86_64, riscv and aarch64). This is why I noticed a few testcases failing on aarch64 after r16-4438. Thanks, Andrew > > Ok for trunk? > > PR rtl-optimization/122675 > > gcc/ChangeLog: > > * bb-reorder.cc (edge_order): Fix BB edge ordering to be > descending. > > Signed-off-by: Dimitar Dimitrov <[email protected]> > --- > gcc/bb-reorder.cc | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/gcc/bb-reorder.cc b/gcc/bb-reorder.cc > index e4efdee0b16..43fa019984a 100644 > --- a/gcc/bb-reorder.cc > +++ b/gcc/bb-reorder.cc > @@ -2392,7 +2392,12 @@ edge_order (const void *ve1, const void *ve2) > gcov_type gc1 = c1.initialized_p () ? c1.to_gcov_type () : 0; > gcov_type gc2 = c2.initialized_p () ? c2.to_gcov_type () : 0; > gcov_type m = MAX (gc1, gc2); > - return (m == gc1) - (m == gc2); > + /* While gcc_stablesort sorts in ascending order, the edges should > + be sorted in descending order of their execution frequency. > + So return a reversed comparison. Expressed with a spaceship operator: > + return gc2 <=> gc1; > + */ > + return (m == gc2) - (m == gc1); > } > > /* Reorder basic blocks using the "simple" algorithm. This tries to > -- > 2.51.1 >
