OSDN Git Service

2011-11-23 Vladimir Makarov <vmakarov@redhat.com>
authorvmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Nov 2011 18:51:17 +0000 (18:51 +0000)
committervmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 23 Nov 2011 18:51:17 +0000 (18:51 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181675 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 4e574a0..96a74f0 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 4eb5b30..55d3f2d 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 e58ed1b..4e6edb9 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 430ac93..f757423 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 2ecb5a3..e3d3fe3 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 de255b4..9be9109 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)