re PR rtl-optimization/48455 (Huge code size regression for all ARM configurations)
authorVladimir Makarov <vmakarov@redhat.com>
Wed, 23 Nov 2011 18:51:17 +0000 (18:51 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Wed, 23 Nov 2011 18:51:17 +0000 (18:51 +0000)
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

gcc/ChangeLog
gcc/common.opt
gcc/doc/invoke.texi
gcc/flag-types.h
gcc/ira.c
gcc/toplev.c

index 4e574a030860ed5f310b3233d10bb0d09037e107..96a74f05e36611c1e313b1bbd6d74029fa6d72c4 100644 (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
index 4eb5b30b1c4c32eb23dbe939964af9867716e9b5..55d3f2d44d12f6328c00ae6b2e9470bb1bbd546a 100644 (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
index e58ed1b4ac53cf7d8c1fdebaeb0834252bb80899..4e6edb9414e9dfdd4ae8fc2edd322e1c59a09337 100644 (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
index 430ac93805c05cbd4b2c98fc3cda9bf48b8efc75..f757423e56a57df51507beabcbfcd07ddf059d48 100644 (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.  */
index 2ecb5a302b6f169008cef9cb54eaaaef0cbf2820..e3d3fe3038598a18d4bbe082cf9c23b3c212c86d 100644 (file)
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -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);
 
index de255b4c3f72af7c803b5d84154b81a4abdcc7cb..9be910970b428be6ad7d467b0f01c2d4f4701f9f 100644 (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)