I just saw this post. I'm certainly looking for areas to improve. I will investigate the example you provided.
Thanks Paul - Its awesome to have someone looking at tblgen build performance!
Something that I've looked at every so often is the poor choice of containers - e.g. passing a const std::vector& around when ArrayRef<> would be a lot cheaper (no expensive iterator bounds checks....).
Another is using map/set everywhere - they are great when data is being parsed/collected, but once its sorted transfering to an array/vector could be a lot cheaper if really we spend more time sequentially iterating across the data many times.
It will take me awhile to learn my way around the matcher table emitter, but it sounds like a big piece of fun!
I thought you would be interesting in the timing of the phases in the DAGISel emitter. This is for the ARM target.