Commit ffe8727f by Vladimir Makarov Committed by Vladimir Makarov

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
parent 810fb8f1
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> 2011-11-23 Chung-Lin Tang <cltang@codesourcery.com>
PR rtl-optimization/50496 PR rtl-optimization/50496
...@@ -1337,7 +1337,7 @@ EnumValue ...@@ -1337,7 +1337,7 @@ EnumValue
Enum(ira_algorithm) String(priority) Value(IRA_ALGORITHM_PRIORITY) Enum(ira_algorithm) String(priority) Value(IRA_ALGORITHM_PRIORITY)
fira-region= 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 -fira-region=[one|all|mixed] Set regions for IRA
Enum Enum
......
...@@ -6731,13 +6731,16 @@ rule generates a better code. ...@@ -6731,13 +6731,16 @@ rule generates a better code.
Use specified regions for the integrated register allocator. The Use specified regions for the integrated register allocator. The
@var{region} argument should be one of @code{all}, @code{mixed}, or @var{region} argument should be one of @code{all}, @code{mixed}, or
@code{one}. The first value means using all loops as register @code{one}. The first value means using all loops as register
allocation regions, the second value which is the default means using allocation regions, the second value which is enabled by default when
all loops except for loops with small register pressure as the compiling with optimization for speed (@option{-O}, @option{-O2},
regions, and third one means using all function as a single region. @dots{}) means using all loops except for loops with small register
The first value can give best result for machines with small size and pressure as the regions, and third one which is enabled by default for
irregular register set, the third one results in faster and generates @option{-Os} or @option{-O0} means using all function as a single
decent code and the smallest size code, and the default value usually region. The first value can give best result for machines with small
give the best results in most cases and for most architectures. 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 @item -fira-loop-pressure
@opindex fira-loop-pressure @opindex fira-loop-pressure
......
...@@ -118,7 +118,11 @@ enum ira_region ...@@ -118,7 +118,11 @@ enum ira_region
{ {
IRA_REGION_ONE, IRA_REGION_ONE,
IRA_REGION_ALL, 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. */ /* The options for excess precision. */
......
...@@ -3621,9 +3621,8 @@ ira (FILE *f) ...@@ -3621,9 +3621,8 @@ ira (FILE *f)
if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL) if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
fprintf (ira_dump_file, "Building IRA IR\n"); fprintf (ira_dump_file, "Building IRA IR\n");
loops_p = ira_build (optimize loops_p = ira_build (flag_ira_region == IRA_REGION_ALL
&& (flag_ira_region == IRA_REGION_ALL || flag_ira_region == IRA_REGION_MIXED);
|| flag_ira_region == IRA_REGION_MIXED));
ira_assert (ira_conflicts_p || !loops_p); ira_assert (ira_conflicts_p || !loops_p);
......
...@@ -1333,6 +1333,11 @@ process_options (void) ...@@ -1333,6 +1333,11 @@ process_options (void)
"and -ftree-loop-linear)"); "and -ftree-loop-linear)");
#endif #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 /* Unrolling all loops implies that standard loop unrolling must also
be done. */ be done. */
if (flag_unroll_all_loops) if (flag_unroll_all_loops)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment