It's not heavily IO-bound — it's mostly memory-bound (it's a type-checking tool for very large codebases).
Further (painful) optimisations will likely involve the use of arenas to prevent so many atomic de-allocations.