Hi, Function average_num_loop_insns forgets to free loop body in early return. Besides, overflow comparison checks 1000000 (e6) but the return value is 100000 (e5), I guess it's unexpected, a typo?
Bootstrapped and regress tested on powerpc64le-linux-gnu. I guess this should go to GCC11? Is it ok? BR, Kewen gcc/ChangeLog 2020-01-13 Kewen Lin <li...@gcc.gnu.org> * cfgloopanal.c (average_num_loop_insns): Free bbs when early return, fix typo on return value. -------- diff --git a/gcc/cfgloopanal.c b/gcc/cfgloopanal.c index 199c20b..65d239a 100644 --- a/gcc/cfgloopanal.c +++ b/gcc/cfgloopanal.c @@ -219,7 +219,10 @@ average_num_loop_insns (const class loop *loop) ninsns += (sreal)binsns * bb->count.to_sreal_scale (loop->header->count); /* Avoid overflows. */ if (ninsns > 1000000) - return 100000; + { + free (bbs); + return 1000000; + } } free (bbs);