We've split insn-emit.cc (PR54179) as well as gimple-match.cc. The remaining big beast is insn-recog.cc which comes up in PR111619, PR111600, and elsewhere.
.
On x86_64: > wc -l insn-*.cc | sort -n ... 97320 insn-automata.cc 122359 insn-attrtab.cc 170018 insn-emit-9.cc 186244 insn-latencytab.cc 193349 insn-dfatab.cc 300935 insn-recog.cc 509381 insn-output.cc insn-output.cc is the const static initializer for insn_data[] and operand_data[].
On riscv insn-output is the largest file right now as well. I have a local patch that splits it - it's a bit cumbersome because the static initializer needs to be made non-static i.e. the initialization must be in an init function and that needs to be called at some point. But as a proof of concept it worked. Once I have more time (hah) I'm going to post a patch but it will still take a while.
(In reply to Robin Dapp from comment #3) > On riscv insn-output is the largest file right now as well. Note that size matters, but the largest file does not always take the longest to compile. On a risc-v setup insn-recog.cc and the largest insn-emit-nn.cc file take hours more to build than any of the other larger files.
Fixed on trunk as of r15-6223-g6dcfe874313493.