forked from OSchip/llvm-project
4806b13835
Summary: Add jump table support to ICP. The optimization is basically the same as ICP for tail calls. The big difference is that the profiling data comes from the jump table and the targets are local symbols rather than global. I've removed an instruction from ICP for tail calls. The code used to have a conditional jump to a block with a direct jump to the target, i.e. B1: cmp foo,(%rax) jne B3 B2: jmp foo B3: ... this code is now: B1: cmp foo,(%rax) je foo B2: ... The other changes in this diff: - Move ICP + new jump table support to separate file in Passes. - Improve the CFG validation to handle jump tables. - Fix the double jump peephole so that the successor of the modified block is updated properly. Also make sure that any existing branches in the block are modified to properly reflect the new CFG. - Add an invocation of the double jump peephole to SCTC. This allows us to remove a call to peepholes/UCE occurring after fixBranches() in the pass manager. - Miscellaneous cleanups to BOLT output. (cherry picked from FBD4727757) |
||
---|---|---|
.. | ||
BinaryPasses.cpp | ||
BinaryPasses.h | ||
CMakeLists.txt | ||
FrameOptimizer.cpp | ||
FrameOptimizer.h | ||
HFSort.cpp | ||
HFSort.h | ||
HFSortPlus.cpp | ||
IndirectCallPromotion.cpp | ||
IndirectCallPromotion.h | ||
Inliner.cpp | ||
Inliner.h | ||
ReorderAlgorithm.cpp | ||
ReorderAlgorithm.h |