From: Kyrylo Tkachov <[email protected]>
genemit picks an output file per pattern, so the gen_* definitions are
spread evenly. The block it writes afterwards is not: it picks a file
once and then emits add_clobbers, added_clobbers_hard_reg_p and the
code_for_/gen_ pair for every overloaded name into that one file.
On aarch64 that left insn-emit-10.cc at 2020142 bytes against 1196464 to
1197283 for the other nine, a 70% overhang on one of ten files. Since
the files are compiled in parallel, the longest one sets how long the
group takes, so the imbalance costs wall-clock time that splitting exists
to save.
Pick a file per overloaded name. The nine sizes become 1268108 to
1311015 bytes, a spread of 3%. add_clobbers and added_clobbers_hard_reg_p
stay together, since they share the table that describes which patterns
have clobbers.
Bootstrapped on aarch64-none-linux-gnu.
Ok for trunk?
gcc/ChangeLog:
* genemit.cc (main): Choose an output file for each overloaded name.
Signed-off-by: Kyrylo Tkachov <[email protected]>
---
gcc/genemit.cc | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/gcc/genemit.cc b/gcc/genemit.cc
index d1dfb296629..9c881aa2bae 100644
--- a/gcc/genemit.cc
+++ b/gcc/genemit.cc
@@ -970,9 +970,13 @@ main (int argc, const char **argv)
output_add_clobbers (file);
output_added_clobbers_hard_reg_p (file);
+ /* Spread these over the output files too. Emitting them all into
+ whichever file happened to be current leaves that one much bigger than
+ the rest, which is the opposite of what splitting is for. */
for (overloaded_name *oname = rtx_reader_ptr->get_overloads ();
oname; oname = oname->next)
{
+ file = choose_output (output_files, file_idx);
handle_overloaded_code_for (oname, file);
handle_overloaded_gen (oname, file);
}
--
2.50.1 (Apple Git-155)
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.