re PR rtl-optimization/48455 (Huge code size regression for all ARM configurations)

2011-11-23  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/48455
	* doc/invoke.texi (-fira-region): Document default values.

	* flags-types.h (enum ira_region): Add new value
	IRA_REGION_AUTODETECT.

	* common.opt (fira-region): Set up initial value to
	IRA_REGION_AUTODETECT.

	* toplev.c (process_options): Set up flag_ira_region depending on
	-O options.

	* ira.c (ira.c): Remove optimize guard for ira_build.

From-SVN: r181675
This commit is contained in:
Vladimir Makarov 2011-11-23 18:51:17 +00:00 committed by Vladimir Makarov
parent 810fb8f1d6
commit ffe8727f47
6 changed files with 39 additions and 12 deletions

View File

@ -1,3 +1,19 @@
2011-11-23 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/48455
* doc/invoke.texi (-fira-region): Document default values.
* flags-types.h (enum ira_region): Add new value
IRA_REGION_AUTODETECT.
* common.opt (fira-region): Set up initial value to
IRA_REGION_AUTODETECT.
* toplev.c (process_options): Set up flag_ira_region depending on
-O options.
* ira.c (ira.c): Remove optimize guard for ira_build.
2011-11-23 Chung-Lin Tang <cltang@codesourcery.com>
PR rtl-optimization/50496

View File

@ -1337,7 +1337,7 @@ EnumValue
Enum(ira_algorithm) String(priority) Value(IRA_ALGORITHM_PRIORITY)
fira-region=
Common Joined RejectNegative Enum(ira_region) Var(flag_ira_region) Init(IRA_REGION_MIXED)
Common Joined RejectNegative Enum(ira_region) Var(flag_ira_region) Init(IRA_REGION_AUTODETECT)
-fira-region=[one|all|mixed] Set regions for IRA
Enum

View File

@ -6731,13 +6731,16 @@ rule generates a better code.
Use specified regions for the integrated register allocator. The
@var{region} argument should be one of @code{all}, @code{mixed}, or
@code{one}. The first value means using all loops as register
allocation regions, the second value which is the default means using
all loops except for loops with small register pressure as the
regions, and third one means using all function as a single region.
The first value can give best result for machines with small size and
irregular register set, the third one results in faster and generates
decent code and the smallest size code, and the default value usually
give the best results in most cases and for most architectures.
allocation regions, the second value which is enabled by default when
compiling with optimization for speed (@option{-O}, @option{-O2},
@dots{}) means using all loops except for loops with small register
pressure as the regions, and third one which is enabled by default for
@option{-Os} or @option{-O0} means using all function as a single
region. The first value can give best result for machines with small
size and irregular register set, the third one results in faster and
generates decent code and the smallest size code, and the second value
usually give the best results in most cases and for most
architectures.
@item -fira-loop-pressure
@opindex fira-loop-pressure

View File

@ -118,7 +118,11 @@ enum ira_region
{
IRA_REGION_ONE,
IRA_REGION_ALL,
IRA_REGION_MIXED
IRA_REGION_MIXED,
/* This value means that there were no options -fira-region on the
command line and that we should choose a value depending on the
used -O option. */
IRA_REGION_AUTODETECT
};
/* The options for excess precision. */

View File

@ -3621,9 +3621,8 @@ ira (FILE *f)
if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
fprintf (ira_dump_file, "Building IRA IR\n");
loops_p = ira_build (optimize
&& (flag_ira_region == IRA_REGION_ALL
|| flag_ira_region == IRA_REGION_MIXED));
loops_p = ira_build (flag_ira_region == IRA_REGION_ALL
|| flag_ira_region == IRA_REGION_MIXED);
ira_assert (ira_conflicts_p || !loops_p);

View File

@ -1333,6 +1333,11 @@ process_options (void)
"and -ftree-loop-linear)");
#endif
/* One region RA really helps to decrease the code size. */
if (flag_ira_region == IRA_REGION_AUTODETECT)
flag_ira_region
= optimize_size || !optimize ? IRA_REGION_ONE : IRA_REGION_MIXED;
/* Unrolling all loops implies that standard loop unrolling must also
be done. */
if (flag_unroll_all_loops)