diff --git a/gcc/common.opt b/gcc/common.opt index b5ea3c7a12793e4f6e866a7f90b0f140cb84a797..738311fa21fd1677cabf9ba1c1f2160a93a4f44e 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 24b9bcb11dce5b873a84ce1cd00c88d7c3ffe8b0..262683f0189f9091f30e4988e9d5e438909c4a20 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 df3d845856975eb19b6493aa0c0627fcebad45f8..3bfaecc818a8208879d74a00e94794338fd57de4 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