common.opt (lto_partition_model): New enum.
authorRichard Biener <rguenther@suse.de>
Tue, 15 Apr 2014 12:56:16 +0000 (12:56 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 15 Apr 2014 12:56:16 +0000 (12:56 +0000)
2014-04-15  Richard Biener  <rguenther@suse.de>

* common.opt (lto_partition_model): New enum.
(flto-partition=): Merge separate options with a single with argument,
add -flto-partition=one support.
* flag-types.h (enum lto_partition_model): Declare.
* opts.c (finish_options): Remove duplicate -flto-partition=
option check.
* lto-wrapper.c (run_gcc): Adjust.

lto/
* lto.c: Include params.h.
(do_whole_program_analysis): Switch on flag_lto_partition value,
add support for LTO_PARTITION_ONE.
* lto-partition.h (lto_balanced_map): Adjust.
* lto-partition.c (lto_balanced_map): Get number of desired
partitions as argument to support -flto-partition=one.

From-SVN: r209416

gcc/ChangeLog
gcc/common.opt
gcc/flag-types.h
gcc/lto-wrapper.c
gcc/lto/ChangeLog
gcc/lto/lto-partition.c
gcc/lto/lto-partition.h
gcc/lto/lto.c
gcc/opts.c

index bfba5a5fdf405757ae4c877fb7158bb3c909aa0b..b23c5d7b6889d685c7c782bb02fc89a7edd2c97b 100644 (file)
@@ -1,3 +1,13 @@
+2014-04-15  Richard Biener  <rguenther@suse.de>
+
+       * common.opt (lto_partition_model): New enum.
+       (flto-partition=): Merge separate options with a single with argument,
+       add -flto-partition=one support.
+       * flag-types.h (enum lto_partition_model): Declare.
+       * opts.c (finish_options): Remove duplicate -flto-partition=
+       option check.
+       * lto-wrapper.c (run_gcc): Adjust.
+
 2014-04-15  Richard Biener  <rguenther@suse.de>
 
        * alias.c (ncr_compar): New function.
index 2259f29d19e4531a12fb2fac5977d9bcb52b907d..da275e5cb45053ab9b62475926111fd0ec1ceeb6 100644 (file)
@@ -1495,21 +1495,27 @@ flto=
 Common RejectNegative Joined Var(flag_lto)
 Link-time optimization with number of parallel jobs or jobserver.
 
-flto-partition=1to1
-Common Var(flag_lto_partition_1to1)
-Partition symbols and vars at linktime based on object files they originate from
+Enum
+Name(lto_partition_model) Type(enum lto_partition_model) UnknownError(unknown LTO partitioning model %qs)
 
-flto-partition=balanced
-Common Var(flag_lto_partition_balanced)
-Partition functions and vars at linktime into approximately same sized buckets
+EnumValue
+Enum(lto_partition_model) String(none) Value(LTO_PARTITION_NONE)
 
-flto-partition=max
-Common Var(flag_lto_partition_max)
-Put every symbol into separate partition
+EnumValue
+Enum(lto_partition_model) String(one) Value(LTO_PARTITION_ONE)
+
+EnumValue
+Enum(lto_partition_model) String(balanced) Value(LTO_PARTITION_BALANCED)
+
+EnumValue
+Enum(lto_partition_model) String(1to1) Value(LTO_PARTITION_1TO1)
+
+EnumValue
+Enum(lto_partition_model) String(max) Value(LTO_PARTITION_MAX)
 
-flto-partition=none
-Common Var(flag_lto_partition_none)
-Disable partioning and streaming
+flto-partition=
+Common Joined RejectNegative Enum(lto_partition_model) Var(flag_lto_partition) Init(LTO_PARTITION_BALANCED)
+Specify the algorithm to partition symbols and vars at linktime
 
 ; The initial value of -1 comes from Z_DEFAULT_COMPRESSION in zlib.h.
 flto-compression-level=
index ec16faa18a38ede37debcac092a2f65710d0b453..97382719ff777cac0161540b8efac2f4609be285 100644 (file)
@@ -229,4 +229,14 @@ enum vtv_priority {
   VTV_STANDARD_PRIORITY = 1,
   VTV_PREINIT_PRIORITY  = 2
 };
+
+/* flag_lto_partition initialization values.  */
+enum lto_partition_model {
+  LTO_PARTITION_NONE = 0,
+  LTO_PARTITION_ONE = 1,
+  LTO_PARTITION_BALANCED = 2,
+  LTO_PARTITION_1TO1 = 3,
+  LTO_PARTITION_MAX = 4
+};
+
 #endif /* ! GCC_FLAG_TYPES_H */
index 1607ab3bff4fe77d15141bea4463f43d5a4e072d..fd604b0bdb1bac694cbcd4aad3125640ad13e3ee 100644 (file)
@@ -657,9 +657,7 @@ run_gcc (unsigned argc, char *argv[])
          /* Drop arguments that we want to take from the link line.  */
          case OPT_flto_:
          case OPT_flto:
-         case OPT_flto_partition_none:
-         case OPT_flto_partition_1to1:
-         case OPT_flto_partition_balanced:
+         case OPT_flto_partition_:
              continue;
 
          default:
@@ -727,8 +725,9 @@ run_gcc (unsigned argc, char *argv[])
          verbose = 1;
          break;
 
-       case OPT_flto_partition_none:
-         no_partition = true;
+       case OPT_flto_partition_:
+         if (strcmp (option->arg, "none") == 0)
+           no_partition = true;
          break;
 
        case OPT_flto_:
index 4200a471ba8912ccb090aea579042744f2eb6ffd..d0e14c1b2f3a55ffdbaba79e7ad82a59bf445d53 100644 (file)
@@ -1,3 +1,12 @@
+2014-04-15  Richard Biener  <rguenther@suse.de>
+
+       * lto.c: Include params.h.
+       (do_whole_program_analysis): Switch on flag_lto_partition value,
+       add support for LTO_PARTITION_ONE.
+       * lto-partition.h (lto_balanced_map): Adjust.
+       * lto-partition.c (lto_balanced_map): Get number of desired
+       partitions as argument to support -flto-partition=one.
+
 2014-04-14  Jan Hubicka  <hubicka@ucw.cz>
 
        * lto/lto-symtab.c (lto_cgraph_replace_node): Don't re-merge
index 1ee5fbb851e4fcb81f29b3be424254b4c0b72b53..bb594344c2957216698fb876ed7a1f9f5c43ce93 100644 (file)
@@ -415,7 +415,7 @@ varpool_node_cmp (const void *pa, const void *pb)
    and in-partition calls was reached.  */
 
 void
-lto_balanced_map (void)
+lto_balanced_map (int n_lto_partitions)
 {
   int n_nodes = 0;
   int n_varpool_nodes = 0, varpool_pos = 0, best_varpool_pos = 0;
@@ -472,7 +472,7 @@ lto_balanced_map (void)
     }
 
   /* Compute partition size and create the first partition.  */
-  partition_size = total_size / PARAM_VALUE (PARAM_LTO_PARTITIONS);
+  partition_size = total_size / n_lto_partitions;
   if (partition_size < PARAM_VALUE (MIN_PARTITION_SIZE))
     partition_size = PARAM_VALUE (MIN_PARTITION_SIZE);
   npartitions = 1;
@@ -699,9 +699,8 @@ lto_balanced_map (void)
 
          /* Since the size of partitions is just approximate, update the size after
             we finished current one.  */
-         if (npartitions < PARAM_VALUE (PARAM_LTO_PARTITIONS))
-           partition_size = total_size
-             / (PARAM_VALUE (PARAM_LTO_PARTITIONS) - npartitions);
+         if (npartitions < n_lto_partitions)
+           partition_size = total_size / (n_lto_partitions - npartitions);
          else
            partition_size = INT_MAX;
 
index 770111d9b271e831f1ae074619bb8b962d99528b..8db61b30176f59a52d566a1255c7680cf27577b6 100644 (file)
@@ -34,7 +34,7 @@ extern vec<ltrans_partition> ltrans_partitions;
 
 void lto_1_to_1_map (void);
 void lto_max_map (void);
-void lto_balanced_map (void);
+void lto_balanced_map (int);
 void lto_promote_cross_file_statics (void);
 void free_ltrans_partitions (void);
 void lto_promote_statics_nonwpa (void);
index ee6a28a7d8649c7fea1688c065e84c3d9acda93f..ec711ceb91935a397295f02e523e334bd9b0f48b 100644 (file)
@@ -50,6 +50,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "context.h"
 #include "pass_manager.h"
 #include "ipa-inline.h"
+#include "params.h"
 
 
 /* Number of parallel tasks to run, -1 if we want to use GNU Make jobserver.  */
@@ -3267,12 +3268,16 @@ do_whole_program_analysis (void)
   timevar_pop (TV_WHOPR_WPA);
 
   timevar_push (TV_WHOPR_PARTITIONING);
-  if (flag_lto_partition_1to1)
+  if (flag_lto_partition == LTO_PARTITION_1TO1)
     lto_1_to_1_map ();
-  else if (flag_lto_partition_max)
+  else if (flag_lto_partition == LTO_PARTITION_MAX)
     lto_max_map ();
+  else if (flag_lto_partition == LTO_PARTITION_ONE)
+    lto_balanced_map (1);
+  else if (flag_lto_partition == LTO_PARTITION_BALANCED)
+    lto_balanced_map (PARAM_VALUE (PARAM_LTO_PARTITIONS));
   else
-    lto_balanced_map ();
+    gcc_unreachable ();
 
   /* Inline summaries are needed for balanced partitioning.  Free them now so
      the memory can be used for streamer caches.  */
index fdc903f9271a7b8c13e26fb24c9bc00332f5b315..e85e73acf79444d7f54cac34a19553c6501aca9a 100644 (file)
@@ -824,14 +824,6 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
          opts->x_flag_fat_lto_objects = 1;
        }
     }
-  if ((opts->x_flag_lto_partition_balanced != 0) + (opts->x_flag_lto_partition_1to1 != 0)
-       + (opts->x_flag_lto_partition_none != 0) >= 1)
-    {
-      if ((opts->x_flag_lto_partition_balanced != 0)
-          + (opts->x_flag_lto_partition_1to1 != 0)
-          + (opts->x_flag_lto_partition_none != 0) > 1)
-       error_at (loc, "only one -flto-partition value can be specified");
-    }
 
   /* We initialize opts->x_flag_split_stack to -1 so that targets can set a
      default value if they choose based on other options.  */