SimplifyCFG: don't remove unreachable default switch destinations
authorHans Wennborg <hans@hanshq.net>
Mon, 1 Dec 2014 17:08:35 +0000 (17:08 +0000)
committerHans Wennborg <hans@hanshq.net>
Mon, 1 Dec 2014 17:08:35 +0000 (17:08 +0000)
commit5a1e5c05d82073f03ea2dee3ab1f0ad614823896
tree169bc58057fa4b178c212789318ccb64a8ec5b4e
parent1571336fb2ef5e6da5536ef7e1b76c4233e18081
SimplifyCFG: don't remove unreachable default switch destinations

An unreachable default destination can be exploited by other optimizations, and
SDag lowering is now prepared to handle them efficiently.

For example, branches to the unreachable destination will be optimized away,
such as in the case of range checks for switch lookup tables.

On 64-bit Linux, this reduces the size of a clang bootstrap by 80 kB (and
Chromium by 30 kB).

llvm-svn: 223050
llvm/lib/Transforms/Utils/SimplifyCFG.cpp
llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll
llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll