[SCCP] Don't mark edges feasible when resolving undefs
authorNikita Popov <npopov@redhat.com>
Fri, 3 Jun 2022 09:42:07 +0000 (11:42 +0200)
committerNikita Popov <npopov@redhat.com>
Wed, 22 Jun 2022 08:28:27 +0000 (10:28 +0200)
commit1f88d804083a8a1b68df1e6677920e38ab2a6b40
treeca94df00d2940ff3b1b41312fc641c15c17cd268
parent74f066016096c60e0cee07f0af8de193ecb2f6c3
[SCCP] Don't mark edges feasible when resolving undefs

As branch on undef is immediate undefined behavior, there is no need
to mark one of the edges as feasible. We can leave all the edges
non-feasible. In IPSCCP, we can replace the branch with an unreachable
terminator.

Differential Revision: https://reviews.llvm.org/D126962
12 files changed:
llvm/lib/Transforms/Scalar/SCCP.cpp
llvm/lib/Transforms/Utils/SCCPSolver.cpp
llvm/test/Transforms/FunctionSpecialization/bug52821-use-after-free.ll
llvm/test/Transforms/FunctionSpecialization/bug55000-read-uninitialized-value.ll
llvm/test/Transforms/SCCP/2004-12-10-UndefBranchBug.ll
llvm/test/Transforms/SCCP/2008-01-27-UndefCorrelate.ll
llvm/test/Transforms/SCCP/PR26044.ll
llvm/test/Transforms/SCCP/indirectbr.ll
llvm/test/Transforms/SCCP/ipsccp-branch-unresolved-undef.ll
llvm/test/Transforms/SCCP/return-zapped.ll
llvm/test/Transforms/SCCP/switch-constantfold-crash.ll
llvm/test/Transforms/SCCP/switch-undef-constantfoldterminator.ll