The splitting pass uses its 'unlikelyExecuted' predicate to statically
decide which blocks are cold. This patch makes two changes to it:
- Do not treat noreturn calls as if they are cold unless they are
are actually marked cold. This is motivated by functions like exit()lly
and longjmp(),marked cold. which are not beneficial to outline.This is motivated by functions like exit() and longjmp(), Mark @llvm.trapwhich
cold to compensateare not beneficial to outline.
- Do not treat inline asm as an outlining barrier. In practice asm("") is
is frequently used to inhibit basic block merging; enabling outlining in this case
in this case results in substantial memory savings.
As a drive-by, remove the 'exceptionHandlingFunctions' predicate, because it's
because it's no longer needed. The pass can identify & outline blocks dominated by EH pads,
dominated by EH pads, so there's no need to special-case certain
Depends on marking @llvm.trap cold: https://reviews.llvm.org/D54329