aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/common.opt30
-rw-r--r--gcc/flag-types.h10
-rw-r--r--gcc/lto-wrapper.c9
-rw-r--r--gcc/lto/ChangeLog9
-rw-r--r--gcc/lto/lto-partition.c9
-rw-r--r--gcc/lto/lto-partition.h2
-rw-r--r--gcc/lto/lto.c11
-rw-r--r--gcc/opts.c8
9 files changed, 64 insertions, 34 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bfba5a5..b23c5d7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,15 @@
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.
(nonoverlapping_component_refs_p): Re-implement in O (n log n).
diff --git a/gcc/common.opt b/gcc/common.opt
index 2259f29..da275e5 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -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=
diff --git a/gcc/flag-types.h b/gcc/flag-types.h
index ec16faa..9738271 100644
--- a/gcc/flag-types.h
+++ b/gcc/flag-types.h
@@ -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 */
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index 1607ab3..fd604b0 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -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_:
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 4200a47..d0e14c1 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -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
diff --git a/gcc/lto/lto-partition.c b/gcc/lto/lto-partition.c
index 1ee5fbb..bb59434 100644
--- a/gcc/lto/lto-partition.c
+++ b/gcc/lto/lto-partition.c
@@ -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;
diff --git a/gcc/lto/lto-partition.h b/gcc/lto/lto-partition.h
index 770111d..8db61b3 100644
--- a/gcc/lto/lto-partition.h
+++ b/gcc/lto/lto-partition.h
@@ -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);
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index ee6a28a..ec711ce 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -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. */
diff --git a/gcc/opts.c b/gcc/opts.c
index fdc903f..e85e73a 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -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. */