Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[PartialInlining] Fix incorrect costing when IR has unreachable BBs
Partial Inlining identifies basic blocks that can be outlined into a function. It is possible that an unreachable basic block is marked for outlining. During costing of the outlined region, such unreachable basic blocks are included as well. However, the CodeExtractor eliminates such unreachable basic blocks and emits outlined function without them. Thus, during costing of the outlined function, it is possible that the cost of the outlined function comes out to be lesser than the cost of outlined region, which triggers an assert. Assertion `OutlinedFunctionCost >= Cloner.OutlinedRegionCost && "Outlined function cost should be no less than the outlined region"' failed. This patch adds code to eliminate unreachable blocks from the function body before passing it on to be inlined. It also adds a test that checks for behaviour of costing in case of unreachable basic blocks. Discussion: https://discourse.llvm.org/t/incorrect-costing-in-partialinliner-if-ir-has-unreachable-basic-blocks/70163 Reviewed By: fhahn Differential Revision: https://reviews.llvm.org/D149130
- Loading branch information