[funcattrs] check reachability to improve noreturn
authorNick Desaulniers <ndesaulniers@google.com>
Mon, 14 Feb 2022 21:47:00 +0000 (13:47 -0800)
committerNick Desaulniers <ndesaulniers@google.com>
Mon, 14 Feb 2022 22:01:59 +0000 (14:01 -0800)
commit9dcb0061657e9b7f321fa6c295960c8f829ed6f1
treebf0624b33287208150b01f87934058b4d1fb087c
parent30046a31b8a520b2253433edbb21154c3c874b66
[funcattrs] check reachability to improve noreturn

There was a fixme in the code pertaining to attributing functions as
noreturn.  By using reachability, if none of the blocks that are
reachable from the entry return, then the function is noreturn.

Previously, the code only checked if any blocks returned. If they're
unreachable, then they don't matter.

This improves codegen for the Linux kernel.

Fixes: https://github.com/ClangBuiltLinux/linux/issues/1563

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D119571
llvm/lib/Transforms/IPO/FunctionAttrs.cpp
llvm/test/Transforms/FunctionAttrs/noreturn.ll