AliasAnalysis: Be less conservative about volatile than atomic.
authorDaniel Berlin <dberlin@dberlin.org>
Fri, 7 Apr 2017 01:28:36 +0000 (01:28 +0000)
committerDaniel Berlin <dberlin@dberlin.org>
Fri, 7 Apr 2017 01:28:36 +0000 (01:28 +0000)
commitd952ceae2f693b8827ea5c3299be002d43bcbb76
tree8c388f0be763bdc11402d3885bff3964c71921b8
parent7f91d44fba05d99793fa7d8709fbe87558a861fe
AliasAnalysis: Be less conservative about volatile than atomic.

Summary:
getModRefInfo is meant to answer the question "what impact does this
instruction have on a given memory location" (not even another
instruction).

Long debate on this on IRC comes to the conclusion the answer should be "nothing special".

That is, a noalias volatile store does not affect a memory location
just by being volatile.  Note: DSE and GVN and memdep currently
believe this, because memdep just goes behind AA's back after it says
"modref" right now.

see line 635 of memdep. Prior to this patch we would get modref there, then check aliasing,
and if it said noalias, we would continue.

getModRefInfo *already* has this same AA check, it just wasn't being used because volatile was
lumped in with ordering.

(I am separately testing whether this code in memdep is now dead except for the invariant load case)

Reviewers: jyknight, chandlerc

Subscribers: llvm-commits

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

llvm-svn: 299741
llvm/include/llvm/Analysis/AliasAnalysis.h
llvm/lib/Analysis/AliasAnalysis.cpp
llvm/lib/Transforms/Utils/MemorySSA.cpp
llvm/test/Transforms/NewGVN/volatile-nonvolatile.ll