Optimize the layout pass.
The comparator used in the layout pass has many calls of map::find(). Because std::sort runs the comparator N*log2(N) times, the maps are looked up with the same key again and again. The map lookup is not a very fast operation. It made the pass slow. This patch eliminates the duplicate map lookups using decorate-sort-undecorate idiom. The pass used to take 1.1 seconds when linking LLD with LLD on Windows, but it now takes only 0.3 seconds. Overall performance gain in that case is from 6.1 seconds to 5.2 seconds. Differential Revision: http://llvm-reviews.chandlerc.com/D2358 llvm-svn: 196714
Loading
Please register or sign in to comment