[PATCH] Limit path splitting to loops we optimize for speed
* doc/invoke.texi (-O2 options): Remove -fsplit-paths. (-O3 options): Add -fsplit-paths. * gimple-ssa-split-paths.c: Include predict.h (split_paths): Only split paths in a loop that should be optimized for speed. * opts.c (default_options_table): Move -fsplit-paths from -O2 to -O3. * gcc.dg/tree-ssa/split-path-1.c: Explicitly ask for path splitting optimizations. From-SVN: r231790
This commit is contained in:
parent
aa3987819a
commit
72ca20f9cb
6 changed files with 25 additions and 5 deletions
|
@ -1,3 +1,13 @@
|
|||
2015-12-17 Jeff Law <law@redhat.com>
|
||||
|
||||
* doc/invoke.texi (-O2 options): Remove -fsplit-paths.
|
||||
(-O3 options): Add -fsplit-paths.
|
||||
* gimple-ssa-split-paths.c: Include predict.h
|
||||
(split_paths): Only split paths in a loop that should be
|
||||
optimized for speed.
|
||||
* opts.c (default_options_table): Move -fsplit-paths from -O2 to
|
||||
-O3.
|
||||
|
||||
2015-12-17 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* ipa-icf.c (sem_item_optimizer::merge): Don't pick 'main' as the
|
||||
|
|
|
@ -7836,7 +7836,6 @@ also turns on the following optimization flags:
|
|||
-frerun-cse-after-loop @gol
|
||||
-fsched-interblock -fsched-spec @gol
|
||||
-fschedule-insns -fschedule-insns2 @gol
|
||||
-fsplit-paths @gol
|
||||
-fstrict-aliasing -fstrict-overflow @gol
|
||||
-ftree-builtin-call-dce @gol
|
||||
-ftree-switch-conversion -ftree-tail-merge @gol
|
||||
|
@ -7853,7 +7852,7 @@ Optimize yet more. @option{-O3} turns on all optimizations specified
|
|||
by @option{-O2} and also turns on the @option{-finline-functions},
|
||||
@option{-funswitch-loops}, @option{-fpredictive-commoning},
|
||||
@option{-fgcse-after-reload}, @option{-ftree-loop-vectorize},
|
||||
@option{-ftree-loop-distribute-patterns},
|
||||
@option{-ftree-loop-distribute-patterns}, @option{-fsplit-paths}
|
||||
@option{-ftree-slp-vectorize}, @option{-fvect-cost-model},
|
||||
@option{-ftree-partial-pre} and @option{-fipa-cp-clone} options.
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "cfgloop.h"
|
||||
#include "gimple-iterator.h"
|
||||
#include "tracer.h"
|
||||
#include "predict.h"
|
||||
|
||||
/* Given LATCH, the latch block in a loop, see if the shape of the
|
||||
path reaching LATCH is suitable for being split by duplication.
|
||||
|
@ -180,9 +181,14 @@ split_paths ()
|
|||
|
||||
FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)
|
||||
{
|
||||
/* Only split paths if we are optimizing this loop for speed. */
|
||||
if (!optimize_loop_for_speed_p (loop))
|
||||
continue;
|
||||
|
||||
/* See if there is a block that we can duplicate to split the
|
||||
path to the loop latch. */
|
||||
basic_block bb = find_block_to_duplicate_for_splitting_paths (loop->latch);
|
||||
basic_block bb
|
||||
= find_block_to_duplicate_for_splitting_paths (loop->latch);
|
||||
|
||||
/* BB is the merge point for an IF-THEN-ELSE we want to transform.
|
||||
|
||||
|
|
|
@ -523,11 +523,11 @@ static const struct default_options default_options_table[] =
|
|||
{ OPT_LEVELS_2_PLUS, OPT_fisolate_erroneous_paths_dereference, NULL, 1 },
|
||||
{ OPT_LEVELS_2_PLUS, OPT_fipa_ra, NULL, 1 },
|
||||
{ OPT_LEVELS_2_PLUS, OPT_flra_remat, NULL, 1 },
|
||||
{ OPT_LEVELS_2_PLUS, OPT_fsplit_paths, NULL, 1 },
|
||||
|
||||
/* -O3 optimizations. */
|
||||
{ OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribute_patterns, NULL, 1 },
|
||||
{ OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 },
|
||||
{ OPT_LEVELS_3_PLUS, OPT_fsplit_paths, NULL, 1 },
|
||||
/* Inlining of functions reducing size is a good idea with -Os
|
||||
regardless of them being declared inline. */
|
||||
{ OPT_LEVELS_3_PLUS_AND_SIZE, OPT_finline_functions, NULL, 1 },
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-12-17 Jeff Law <law@redhat.com>
|
||||
|
||||
* gcc.dg/tree-ssa/split-path-1.c: Explicitly ask for path
|
||||
splitting optimizations.
|
||||
|
||||
2015-12-17 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* gcc.dg/ipa/ipa-icf-merge-1.c: New.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O2 -fdump-tree-split-paths-details " } */
|
||||
/* { dg-options "-O2 -fsplit-paths -fdump-tree-split-paths-details " } */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
|
Loading…
Add table
Reference in a new issue