An unreachable block may have a route to a reachable block, don't fast-path return...
authorNick Lewycky <nicholas@mxc.ca>
Thu, 4 Apr 2019 23:09:40 +0000 (23:09 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Thu, 4 Apr 2019 23:09:40 +0000 (23:09 +0000)
commita6ed16c98f503f5acc912a8f00b74f591f6de951
treed9aa7e55067af2532e4932ef20462b9d55c4744b
parent875565e55931704ae51c0011e7fb55b80c6d0c7f
An unreachable block may have a route to a reachable block, don't fast-path return that it can't.

A block reachable from the entry block can't have any route to a block that's not reachable from the entry block (if it did, that route would make it reachable from the entry block). That is the intended performance optimization for isPotentiallyReachable. For the case where we ask whether an unreachable from entry block has a route to a reachable from entry block, we can't conclude one way or the other. Fix a bug where we claimed there could be no such route.

The fix in rL357425 ironically reintroduced the very bug it was fixing but only when a DominatorTree is provided. This fixes the remaining bug.

llvm-svn: 357734
llvm/lib/Analysis/CFG.cpp
llvm/unittests/Analysis/CFGTest.cpp