This add the inter-procedural IR outliner described in RFC: http://lists.llvm.org/pipermail/llvm-dev/2017-July/115666.html
The outliner works off of semantic equivalency between instructions. The pass currently runs on sequential instruction chains but the (benefit and verification)analysis, outline function creation, and congruency classification logic can be expanded to support outlining from control flow regions.
The pass supports:
- Opt remarks
- Using profile to avoid outlining from hot blocks.
- Parameterization/output creation.
Experimental performance: goo.gl/5k6wsP