]> granicus.if.org Git - llvm/commit
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)
commitf634bfbb16e4cef2617bea8f58627f1fe73c39db
tree95d7a727fafac2cb7b6e1d0a4ee64d34a81cae6f
parent1096080a5dfbe088c635b0be6ee53230b2f60491
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@299741 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Analysis/AliasAnalysis.h
lib/Analysis/AliasAnalysis.cpp
lib/Transforms/Utils/MemorySSA.cpp
test/Transforms/NewGVN/volatile-nonvolatile.ll