llvm-project/llvm/test/Transforms/NewGVN
Daniel Berlin d952ceae2f 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
2017-04-07 01:28:36 +00:00
..
2007-07-25-DominatedLoop.ll
2007-07-25-InfiniteLoop.ll
2007-07-25-Loop.ll
2007-07-25-NestedLoop.ll
2007-07-25-SinglePredecessor.ll
2007-07-26-InterlockingLoops.ll
2007-07-26-NonRedundant.ll
2007-07-26-PhiErasure.ll NewGVN: Update a number of xfailed tests to either be correct or note 2017-02-12 23:28:06 +00:00
2007-07-30-PredIDom.ll
2007-07-31-NoDomInherit.ll
2007-07-31-RedundantPhi.ll
2008-02-12-UndefLoad.ll
2008-02-13-NewPHI.ll
2008-07-02-Unreachable.ll
2008-12-09-SelfRemove.ll Revert "NewGVN: Make unreachable blocks be marked with unreachable" 2017-01-30 17:06:55 +00:00
2008-12-12-RLE-Crash.ll
2008-12-14-rle-reanalyze.ll
2008-12-15-CacheVisited.ll
2009-01-21-SortInvalidation.ll
2009-01-22-SortInvalidation.ll
2009-03-10-PREOnVoid.ll
2009-07-13-MemDepSortFail.ll
2009-11-12-MemDepMallocBitCast.ll
2010-03-31-RedundantPHIs.ll
2010-05-08-OneBit.ll
2010-11-13-Simplify.ll
2011-04-27-phioperands.ll
2011-07-07-MatchIntrinsicExtract.ll NewGVN: We were not really failing this testcase, because the instructions it was looking for are unused. GVN value numbers unused instructions, NewGVN does not. Fix the instructions to be used, so we eliminate the redundancies it's checking for, and un-XFAIL it 2017-03-06 20:01:31 +00:00
2011-09-07-TypeIdFor.ll
2012-05-22-PreCrash.ll
2016-08-30-MaskedScatterGather.ll
MemdepMiscompile.ll
assume-equal.ll [Devirtualization] MemDep returns non-local !invariant.group dependencies 2017-01-12 11:33:58 +00:00
basic-cyclic-opt.ll NewGVN: Clean up how we handle the INITIAL class so that everything in 2017-02-11 12:48:50 +00:00
basic-undef-test.ll
basic.ll [NewGVN] Change test to reflect difference between GVN and NewGVN. 2016-12-26 18:10:09 +00:00
big-endian.ll
bitcast-of-call.ll NewGVN: Update a number of xfailed tests to either be correct or note 2017-02-12 23:28:06 +00:00
br-identical.ll
calloc-load-removal.ll NewGVN: Handle coercion of constant stores, loads, memory insts. 2017-04-02 13:23:44 +00:00
calls-nonlocal.ll NewGVN: Update a number of xfailed tests to either be correct or note 2017-02-12 23:28:06 +00:00
calls-readonly.ll
commute.ll
cond_br.ll
cond_br2.ll
condprop-xfail.ll Add missing condprop-xfail.ll that contains the remaining xfail'd tests 2017-03-14 01:46:51 +00:00
condprop.ll PredicateInfo: Support switch statements 2017-02-22 22:20:58 +00:00
crash-no-aa.ll
crash.ll
cyclic-phi-handling.ll NewGVN: Fix PR 31501. 2017-01-07 00:01:42 +00:00
dbg-redundant-load.ll
deadstore.ll NewGVN: Add basic dead and redundant store elimination 2017-01-27 02:37:11 +00:00
debugloc.ll Do not propagate DebugLoc across basic blocks 2017-01-31 20:57:13 +00:00
edge.ll PredicateInfo: Support switch statements 2017-02-22 22:20:58 +00:00
equivalent-phi.ll NewGVN: Add a test case for equivalent phis. 2017-01-02 19:55:13 +00:00
fence.ll [AliasAnalysis] Fences do not modify constant memory location 2017-01-20 00:21:33 +00:00
flags.ll NewGVN: Apply the fast math flags fix in r267113 to NewGVN as well. 2017-02-12 22:25:20 +00:00
fold-const-expr.ll NewGVN: Handle coercion of constant stores, loads, memory insts. 2017-04-02 13:23:44 +00:00
fpmath.ll
funclet.ll
invariant.group.ll [Devirtualization] MemDep returns non-local !invariant.group dependencies 2017-01-12 11:33:58 +00:00
invariant.start.ll
lifetime-simple.ll
load-constant-mem.ll NewGVN: Rewrite DCE during elimination so we do it as well as old GVN did. 2017-03-10 00:32:33 +00:00
load-from-unreachable-predecessor.ll
loadforward.ll NewGVN: Fix PR 31686 and PR 31698 by rewriting store leader handling. 2017-01-20 21:04:30 +00:00
malloc-load-removal.ll NewGVN: Handle coercion of constant stores, loads, memory insts. 2017-04-02 13:23:44 +00:00
memory-handling.ll NewGVN: Make sure we properly lookup operand leaders while creating 2017-01-07 16:55:14 +00:00
no_speculative_loads_with_asan.ll
noalias.ll
non-local-offset.ll
nonescaping-malloc.ll
null-aliases-nothing.ll
opt-remarks.ll
phi-edge-handling.ll NewGVN: Fix PHI evaluation bug exposed by new verifier. We were checking whether the incoming block was reachable instead of whether the specific edge was reachable 2017-03-18 15:41:36 +00:00
phi-translate-partial-alias.ll
pr10820.ll NewGVN: Update a number of xfailed tests to either be correct or note 2017-02-12 23:28:06 +00:00
pr12979.ll
pr14166.ll NewGVN: Update a number of xfailed tests to either be correct or note 2017-02-12 23:28:06 +00:00
pr17732.ll NewGVN: Handle coercion of constant stores, loads, memory insts. 2017-04-02 13:23:44 +00:00
pr17852.ll
pr24397.ll
pr24426.ll
pr25440.ll
pr28562.ll
pr31472.ll Don't use our own incorrect version of isTriviallyDeadInstruction in NewGVN. Fixes PR/31472 2016-12-26 18:44:36 +00:00
pr31483.ll NewGVN: Add forgotten testcase for PR 31483 2017-01-02 19:49:20 +00:00
pr31491.ll NewGVN: Fix PR 31491 by ensuring that we touch the right instructions. Change to one based numbering so we can assert we don't cause the same bug again. 2016-12-29 22:15:12 +00:00
pr31501.ll NewGVN: Fix PR 31501. 2017-01-07 00:01:42 +00:00
pr31573.ll NewGVN: Fix PR 31573, a failure to verify memory congruency due to 2017-01-09 05:34:29 +00:00
pr31594.ll NewGVN: Instead of changeToUnreachable, insert an instruction SimplifyCFG will turn into unreachable when it runs 2017-01-30 18:12:56 +00:00
pr31613.ll NewGVN: This patch makes memory congruence work for all types of 2017-04-06 18:52:50 +00:00
pr31682.ll NewGVN: Rewrite DCE during elimination so we do it as well as old GVN did. 2017-03-10 00:32:33 +00:00
pr31758.ll NewGVN: Rewrite DCE during elimination so we do it as well as old GVN did. 2017-03-10 00:32:33 +00:00
pr32403.ll NewGVN: Fix PR32403 - Handling of undef in phis was not quite correct 2017-03-24 05:30:34 +00:00
pre-compare.ll
pre-new-inst.ll
predicates.ll NewGVN: Start making use of predicateinfo pass. 2017-02-18 23:06:50 +00:00
propagate-ir-flags.ll NewGVN: Fix PR 31686 and PR 31698 by rewriting store leader handling. 2017-01-20 21:04:30 +00:00
range.ll
readattrs.ll [BasicAA] Take attributes into account when requesting modref info for a call site 2017-03-01 13:19:51 +00:00
refine-stores.ll NewGVN: This patch makes memory congruence work for all types of 2017-04-06 18:52:50 +00:00
rle-must-alias.ll
rle-no-phi-translate.ll
rle-nonlocal.ll NewGVN: We pass rle-nonlocal, we just perform the replacement in a way that keeps the old name instead of the new one 2017-03-13 22:43:30 +00:00
rle.ll NewGVN: Handle coercion of constant stores, loads, memory insts. 2017-04-02 13:23:44 +00:00
stale-loop-info.ll
storeoverstore.ll NewGVN: Start making use of predicateinfo pass. 2017-02-18 23:06:50 +00:00
tbaa.ll NewGVN: Rewrite DCE during elimination so we do it as well as old GVN did. 2017-03-10 00:32:33 +00:00
unreachable_block_infinite_loop.ll
volatile-nonvolatile.ll AliasAnalysis: Be less conservative about volatile than atomic. 2017-04-07 01:28:36 +00:00