summaryrefslogtreecommitdiff
path: root/gcc/loop-invariant.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-10-14 14:03:35 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-10-14 14:03:35 +0000
commitfc2d730302da5cdf340a5100882337a807097f47 (patch)
tree65f3e0e6394e85f54af41bfd50cfafb1c0fc8c59 /gcc/loop-invariant.c
parentd2317d50ae2402e5335f2ed807a166359565566b (diff)
re PR middle-end/92046 (Command line options (that are per-functions) are affecting --params which are global.)
2019-10-14 Richard Biener <rguenther@suse.de> PR middle-end/92046 * dse.c (scan_insn): Use param max_active_local_stores. (dse_step1): Get PARAM_MAX_DSE_ACTIVE_LOCAL_STORES and adjust based on optimization level. * loop-invariant.c (move_loop_invariants): Adjust LOOP_INVARIANT_MAX_BBS_IN_LOOP based on optimization level. * opts.c (default_options_optimization): Do not adjust PARAM_MAX_DSE_ACTIVE_LOCAL_STORES and LOOP_INVARIANT_MAX_BBS_IN_LOOP here. From-SVN: r276963
Diffstat (limited to 'gcc/loop-invariant.c')
-rw-r--r--gcc/loop-invariant.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c
index d54cca41737..ef46c8aea22 100644
--- a/gcc/loop-invariant.c
+++ b/gcc/loop-invariant.c
@@ -2276,9 +2276,13 @@ move_loop_invariants (void)
FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)
{
curr_loop = loop;
- /* move_single_loop_invariants for very large loops
- is time consuming and might need a lot of memory. */
- if (loop->num_nodes <= (unsigned) LOOP_INVARIANT_MAX_BBS_IN_LOOP)
+ /* move_single_loop_invariants for very large loops is time consuming
+ and might need a lot of memory. For -O1 only do loop invariant
+ motion for very small loops. */
+ unsigned max_bbs = LOOP_INVARIANT_MAX_BBS_IN_LOOP;
+ if (optimize < 2)
+ max_bbs /= 10;
+ if (loop->num_nodes <= max_bbs)
move_single_loop_invariants (loop);
}