aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto/lto-partition.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2018-04-30 16:40:10 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2018-04-30 14:40:10 +0000
commitb6e33d73d8aa1b7965d6b2bf08b5bbd673e63284 (patch)
treec0fe97d393dbf048a5c52b48b8a109e50d80dc35 /gcc/lto/lto-partition.c
parentfee69672c29005d68d5cddff587c535b6a8c4982 (diff)
downloadgcc-b6e33d73d8aa1b7965d6b2bf08b5bbd673e63284.zip
gcc-b6e33d73d8aa1b7965d6b2bf08b5bbd673e63284.tar.gz
gcc-b6e33d73d8aa1b7965d6b2bf08b5bbd673e63284.tar.bz2
lto-wrapper.c (ltrans_priorities): New static var.
* lto-wrapper.c (ltrans_priorities): New static var. (cmp_priority): New. (run_gcc): Read priorities and if doing parallel build order the Makefile by them. * lto.c (cmp_partitions_size): Remove. (lto_wpa_write_files): Also output priorities; do not sort partitions. (cmp_partition_order): Move to ... * lto-partition.c (cmp_partition_order): ... (lto_1_to_1_map): Sort partitions. From-SVN: r259767
Diffstat (limited to 'gcc/lto/lto-partition.c')
-rw-r--r--gcc/lto/lto-partition.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/lto/lto-partition.c b/gcc/lto/lto-partition.c
index 3efebe7..637e5e2 100644
--- a/gcc/lto/lto-partition.c
+++ b/gcc/lto/lto-partition.c
@@ -42,6 +42,24 @@ vec<ltrans_partition> ltrans_partitions;
static void add_symbol_to_partition (ltrans_partition part, symtab_node *node);
+/* Helper for qsort; compare partitions and return one with smaller order. */
+
+static int
+cmp_partitions_order (const void *a, const void *b)
+{
+ const struct ltrans_partition_def *pa
+ = *(struct ltrans_partition_def *const *)a;
+ const struct ltrans_partition_def *pb
+ = *(struct ltrans_partition_def *const *)b;
+ int ordera = -1, orderb = -1;
+
+ if (lto_symtab_encoder_size (pa->encoder))
+ ordera = lto_symtab_encoder_deref (pa->encoder, 0)->order;
+ if (lto_symtab_encoder_size (pb->encoder))
+ orderb = lto_symtab_encoder_deref (pb->encoder, 0)->order;
+ return orderb - ordera;
+}
+
/* Create new partition with name NAME. */
static ltrans_partition
@@ -334,6 +352,9 @@ lto_1_to_1_map (void)
if (!npartitions)
new_partition ("empty");
+ /* Order partitions by order of symbols because they are linked into binary
+ that way. */
+ ltrans_partitions.qsort (cmp_partitions_order);
}
/* Maximal partitioning. Put every new symbol into new partition if possible. */