[MemorySSA] Update to the new shiny walker.
authorGeorge Burgess IV <george.burgess.iv@gmail.com>
Tue, 19 Jul 2016 01:29:15 +0000 (01:29 +0000)
committerGeorge Burgess IV <george.burgess.iv@gmail.com>
Tue, 19 Jul 2016 01:29:15 +0000 (01:29 +0000)
commit5f30897b7bb982e1dfc63c8e1555e637b0e042dd
tree80877452986c241730c81d74c4f9b8e81b8f4714
parent6189d3ecd4dc3bdd6a2febdab832d7b93573c2a2
[MemorySSA] Update to the new shiny walker.

This patch updates MemorySSA's use-optimizing walker to be more
accurate and, in some cases, faster.

Essentially, this changed our core walking algorithm from a
cache-as-you-go DFS to an iteratively expanded DFS, with all of the
caching happening at the end. Said expansion happens when we hit a Phi,
P; we'll try to do the smallest amount of work possible to see if
optimizing above that Phi is legal in the first place. If so, we'll
expand the search to see if we can optimize to the next phi, etc.

An iteratively expanded DFS lets us potentially quit earlier (because we
don't assume that we can optimize above all phis) than our old walker.
Additionally, because we don't cache as we go, we can now optimize above
loops.

As an added bonus, this patch adds a ton of verification (if
EXPENSIVE_CHECKS are enabled), so finding bugs is easier.

Differential Revision: https://reviews.llvm.org/D21777

llvm-svn: 275940
llvm/include/llvm/Transforms/Utils/MemorySSA.h
llvm/lib/Transforms/Utils/MemorySSA.cpp
llvm/test/Transforms/Util/MemorySSA/cyclicphi.ll
llvm/test/Transforms/Util/MemorySSA/phi-translation.ll