From: rguenth Date: Tue, 15 Apr 2014 12:56:16 +0000 (+0000) Subject: 2014-04-15 Richard Biener X-Git-Tag: upstream/5.3.0~8997 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4a1370747a4e9df496b2dafb3d7ffde4e9c23d79;p=platform%2Fupstream%2Flinaro-gcc.git 2014-04-15 Richard Biener * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@209416 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 + * 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 + * 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 + + * 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 * 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_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. */