diff options
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cgraph.h | 14 | ||||
-rw-r--r-- | gcc/lto-cgraph.c | 4 | ||||
-rw-r--r-- | gcc/lto-streamer.h | 35 | ||||
-rw-r--r-- | gcc/lto/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lto/lto.c | 88 |
6 files changed, 72 insertions, 83 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index adf9734..5a7de8f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2010-04-30 Jan Hubicka <jh@suse.cz> + + * cgraph.h (cgraph_node_set_nonempty_p, varpool_node_set_nonempty_p): New. + * lto-cgraph.c (input_cgraph): Remove call to lto_mark_file_for_ltrans. + * lto-streamer.h (lto_file_decl_data): Remove needs_ltrans_p. + (lto_file_needs_ltrans_p, lto_mark_file_for_ltrans, + cgraph_node_set_needs_ltrans_p): Remove. + 2010-04-30 Steven Bosscher <steven@gcc.gnu.org> * sdbout.c: Include vec.h, do not include varray.h. diff --git a/gcc/cgraph.h b/gcc/cgraph.h index ed6ce6e..80594b1 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -827,6 +827,20 @@ struct GTY(()) constant_descriptor_tree { hashval_t hash; }; +/* Return true if set is nonempty. */ +static inline bool +cgraph_node_set_nonempty_p (cgraph_node_set set) +{ + return VEC_length (cgraph_node_ptr, set->nodes); +} + +/* Return true if set is nonempty. */ +static inline bool +varpool_node_set_nonempty_p (varpool_node_set set) +{ + return VEC_length (varpool_node_ptr, set->nodes); +} + /* Return true when function NODE is only called directly. i.e. it is not externally visible, address was not taken and it is not used in any other non-standard way. */ diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c index 8a8855a..3f7a22b 100644 --- a/gcc/lto-cgraph.c +++ b/gcc/lto-cgraph.c @@ -962,10 +962,6 @@ input_cgraph (void) input_varpool_1 (file_data, ib); lto_destroy_simple_input_block (file_data, LTO_section_varpool, ib, data, len); - - /* Assume that every file read needs to be processed by LTRANS. */ - if (flag_wpa) - lto_mark_file_for_ltrans (file_data); } /* Clear out the aux field that was used to store enough state to diff --git a/gcc/lto-streamer.h b/gcc/lto-streamer.h index 173f921..cc1922a 100644 --- a/gcc/lto-streamer.h +++ b/gcc/lto-streamer.h @@ -552,9 +552,6 @@ struct GTY(()) lto_file_decl_data /* The .o file that these offsets relate to. */ const char *GTY((skip)) file_name; - /* Nonzero if this file should be recompiled with LTRANS. */ - unsigned needs_ltrans_p : 1; - /* Hash table maps lto-related section names to location in file. */ htab_t GTY((skip)) section_hash_table; @@ -922,38 +919,6 @@ lto_tag_to_tree_code (enum LTO_tags tag) return (enum tree_code) ((unsigned) tag - 1); } - -/* Return true if FILE needs to be compiled with LTRANS. */ -static inline bool -lto_file_needs_ltrans_p (struct lto_file_decl_data *file) -{ - return file->needs_ltrans_p != 0; -} - - -/* Mark FILE to be compiled with LTRANS. */ -static inline void -lto_mark_file_for_ltrans (struct lto_file_decl_data *file) -{ - file->needs_ltrans_p = 1; -} - - -/* Return true if any files in node set SET need to be compiled - with LTRANS. */ -static inline bool -cgraph_node_set_needs_ltrans_p (cgraph_node_set set) -{ - cgraph_node_set_iterator csi; - - for (csi = csi_start (set); !csi_end_p (csi); csi_next (&csi)) - if (lto_file_needs_ltrans_p (csi_node (csi)->local.lto_file_data)) - return true; - - return false; -} - - /* Initialize an lto_out_decl_buffer ENCODER. */ static inline void lto_init_tree_ref_encoder (struct lto_tree_ref_encoder *encoder, diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 78452a7..c17da3b 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,5 +1,11 @@ 2010-04-30 Jan Hubicka <jh@suse.cz> + * lto.c (get_filename_for_set): Look for cgraph node and if none found, use + default name. + (lto_wpa_write_files): Write any non-empty partition. + +2010-04-30 Jan Hubicka <jh@suse.cz> + * lto.c: Do not attempt to make constant pool references global. 2010-04-28 Jan Hubicka <jh@suse.cz> diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index 18fef05..d306580 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -817,57 +817,50 @@ get_filename_for_set (cgraph_node_set set) char *fname = NULL; static const size_t max_fname_len = 100; - if (cgraph_node_set_needs_ltrans_p (set)) + /* Create a new temporary file to store SET. To facilitate + debugging, use file names from SET as part of the new + temporary file name. */ + cgraph_node_set_iterator si; + struct pointer_set_t *pset = pointer_set_create (); + for (si = csi_start (set); !csi_end_p (si); csi_next (&si)) { - /* Create a new temporary file to store SET. To facilitate - debugging, use file names from SET as part of the new - temporary file name. */ - cgraph_node_set_iterator si; - struct pointer_set_t *pset = pointer_set_create (); - for (si = csi_start (set); !csi_end_p (si); csi_next (&si)) - { - struct cgraph_node *n = csi_node (si); - const char *node_fname; - char *f; + struct cgraph_node *n = csi_node (si); + const char *node_fname; + char *f; - /* Don't use the same file name more than once. */ - if (pointer_set_insert (pset, n->local.lto_file_data)) - continue; + /* Don't use the same file name more than once. */ + if (pointer_set_insert (pset, n->local.lto_file_data)) + continue; - /* The first file name found in SET determines the output - directory. For the remaining files, we use their - base names. */ - node_fname = n->local.lto_file_data->file_name; - if (fname == NULL) - { - fname = strip_extension (node_fname); - continue; - } + /* The first file name found in SET determines the output + directory. For the remaining files, we use their + base names. */ + node_fname = n->local.lto_file_data->file_name; + if (fname == NULL) + { + fname = strip_extension (node_fname); + continue; + } - f = strip_extension (lbasename (node_fname)); + f = strip_extension (lbasename (node_fname)); - /* If the new name causes an excessively long file name, - make the last component "___" to indicate overflow. */ - if (strlen (fname) + strlen (f) > max_fname_len - 3) - { - fname = reconcat (fname, fname, "___", NULL); - break; - } - else - { - fname = reconcat (fname, fname, "_", f, NULL); - free (f); - } + /* If the new name causes an excessively long file name, + make the last component "___" to indicate overflow. */ + if (strlen (fname) + strlen (f) > max_fname_len - 3) + { + fname = reconcat (fname, fname, "___", NULL); + break; + } + else + { + fname = reconcat (fname, fname, "_", f, NULL); + free (f); } + } - pointer_set_destroy (pset); + pointer_set_destroy (pset); - /* Add the extension .wpa.o to indicate that this file has been - produced by WPA. */ - fname = reconcat (fname, fname, ".wpa.o", NULL); - gcc_assert (fname); - } - else + if (!fname) { /* Since SET does not need to be processed by LTRANS, use the original file name and mark it with a '*' prefix so that @@ -876,6 +869,13 @@ get_filename_for_set (cgraph_node_set set) struct cgraph_node *first = csi_node (si); fname = prefix_name_with_star (first->local.lto_file_data->file_name); } + else + { + /* Add the extension .wpa.o to indicate that this file has been + produced by WPA. */ + fname = reconcat (fname, fname, ".wpa.o", NULL); + gcc_assert (fname); + } return fname; } @@ -933,7 +933,7 @@ lto_wpa_write_files (void) temp_filename = get_filename_for_set (set); output_files[i] = temp_filename; - if (cgraph_node_set_needs_ltrans_p (set)) + if (cgraph_node_set_nonempty_p (set) || varpool_node_set_nonempty_p (vset)) { /* Write all the nodes in SET to TEMP_FILENAME. */ file = lto_obj_file_open (temp_filename, true); |