From 3443ed7be91c267460d79845004008a27bcb7f39 Mon Sep 17 00:00:00 2001 From: zhaowenyu <804544223@qq.com> Date: Fri, 24 Jun 2022 01:50:55 +0800 Subject: [PATCH] [loop-invariant] Add option to limit count check in loop-invariant motion backport Optimize for loop invariant motion introduce performance recession on 500.perlbench_r(-3.06%), 525.x264_r(-0.76%).So option -flim-count-check to limits its impact. --- gcc/common.opt | 5 +++++ gcc/loop-invariant.c | 2 +- gcc/testsuite/gcc.dg/loop-invariant-2.c | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gcc/common.opt b/gcc/common.opt index b5ea3c7a127..738311fa21f 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -3511,4 +3511,9 @@ fipa-ra Common Report Var(flag_ipa_ra) Optimization Use caller save register across calls if possible. +flim-count-check +Common Report Var(flag_lim_count_check) Init(1) Optimization +Limit count check in loop-invariant. + + ; This comment is to ensure we retain the blank line above. diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c index 24b9bcb11dc..262683f0189 100644 --- a/gcc/loop-invariant.c +++ b/gcc/loop-invariant.c @@ -1192,7 +1192,7 @@ find_invariants_bb (class loop *loop, basic_block bb, bool always_reached, /* Don't move insn of cold BB out of loop to preheader to reduce calculations and register live range in hot loop with cold BB. */ - if (!always_executed && preheader->count > bb->count) + if (!always_executed && preheader->count > bb->count && flag_lim_count_check) { if (dump_file) fprintf (dump_file, "Don't move invariant from bb: %d out of loop %d\n", diff --git a/gcc/testsuite/gcc.dg/loop-invariant-2.c b/gcc/testsuite/gcc.dg/loop-invariant-2.c index df3d8458569..3bfaecc818a 100644 --- a/gcc/testsuite/gcc.dg/loop-invariant-2.c +++ b/gcc/testsuite/gcc.dg/loop-invariant-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-rtl-loop2_invariant" } */ +/* { dg-options "-O2 -fdump-rtl-loop2_invariant -flim-count-check" } */ volatile int x; void -- Gitee