Fix MemoryDependenceAnalysis in cases where QueryInstr is a CmpXchg or a AtomicRMW
authorRobin Morisset <morisset@google.com>
Tue, 2 Sep 2014 20:17:52 +0000 (20:17 +0000)
committerRobin Morisset <morisset@google.com>
Tue, 2 Sep 2014 20:17:52 +0000 (20:17 +0000)
commitcc9916444881b06a35ae6402d37a4e38a56dfd52
tree7ab3efa2d0812f6568d7795780445918054805b7
parent4211bbc568c8642c6261c1d29bc73a64868514ca
Fix MemoryDependenceAnalysis in cases where QueryInstr is a CmpXchg or a AtomicRMW

Summary:
MemoryDependenceAnalysis is currently cautious when the QueryInstr is an atomic
load or store, but I forgot to check for atomic cmpxchg/atomicrmw. This patch
is a way of fixing that, and making it less brittle (i.e. no risk that I forget
another possible kind of atomic, even if the IR ends up changing in the future),
by adding a fallback checking mayReadOrWriteFromMemory.

Thanks to Philip Reames for finding this bug and suggesting this solution in
http://reviews.llvm.org/D4845

Sadly, I don't see how to add a test for this, since the passes depending on
MemoryDependenceAnalysis won't trigger for an atomic rmw anyway. Does anyone
see a way for testing it?

Test Plan: none possible at first sight

Reviewers: jfb, reames

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D5019

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216940 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Analysis/MemoryDependenceAnalysis.cpp