Hi,
the empty partitions gets created when node gets assigned to earlier
partition.  This happens for thunks, aliases and partitioned comdats.
Hope this will fix all occurences of the problem.

Bootstrapped/regtested x86_64-linux

Honza

        PR lto/23754
        * lto.c (lto_1_to_1_map): Don't create empty partitions.
        (lto_balanced_map): Likewise.

Index: lto.c
===================================================================
*** lto.c       (revision 175166)
--- lto.c       (working copy)
*************** lto_1_to_1_map (void)
*** 1516,1522 ****
  
    for (node = cgraph_nodes; node; node = node->next)
      {
!       if (!partition_cgraph_node_p (node))
        continue;
  
        file_data = node->local.lto_file_data;
--- 1516,1523 ----
  
    for (node = cgraph_nodes; node; node = node->next)
      {
!       if (!partition_cgraph_node_p (node)
!         || node->aux)
        continue;
  
        file_data = node->local.lto_file_data;
*************** lto_1_to_1_map (void)
*** 1545,1557 ****
          npartitions++;
        }
  
!       if (!node->aux)
!         add_cgraph_node_to_partition (partition, node);
      }
  
    for (vnode = varpool_nodes; vnode; vnode = vnode->next)
      {
!       if (!partition_varpool_node_p (vnode))
        continue;
        file_data = vnode->lto_file_data;
        slot = pointer_map_contains (pmap, file_data);
--- 1546,1558 ----
          npartitions++;
        }
  
!       add_cgraph_node_to_partition (partition, node);
      }
  
    for (vnode = varpool_nodes; vnode; vnode = vnode->next)
      {
!       if (!partition_varpool_node_p (vnode)
!         || vnode->aux)
        continue;
        file_data = vnode->lto_file_data;
        slot = pointer_map_contains (pmap, file_data);
*************** lto_1_to_1_map (void)
*** 1565,1572 ****
          npartitions++;
        }
  
!       if (!vnode->aux)
!         add_varpool_node_to_partition (partition, vnode);
      }
    for (node = cgraph_nodes; node; node = node->next)
      node->aux = NULL;
--- 1566,1572 ----
          npartitions++;
        }
  
!       add_varpool_node_to_partition (partition, vnode);
      }
    for (node = cgraph_nodes; node; node = node->next)
      node->aux = NULL;
*************** lto_balanced_map (void)
*** 1675,1682 ****
  
    for (i = 0; i < n_nodes; i++)
      {
!       if (!order[i]->aux)
!         add_cgraph_node_to_partition (partition, order[i]);
        total_size -= inline_summary (order[i])->size;
  
        /* Once we added a new node to the partition, we also want to add
--- 1675,1683 ----
  
    for (i = 0; i < n_nodes; i++)
      {
!       if (order[i]->aux)
!       continue;
!       add_cgraph_node_to_partition (partition, order[i]);
        total_size -= inline_summary (order[i])->size;
  
        /* Once we added a new node to the partition, we also want to add
*************** lto_balanced_map (void)
*** 1856,1861 ****
--- 1857,1864 ----
            }
          i = best_i;
          /* When we are finished, avoid creating empty partition.  */
+         while (i < n_nodes - 1 && order[i + 1]->aux)
+           i++;
          if (i == n_nodes - 1)
            break;
          partition = new_partition ("");

Reply via email to