llvm-project/llvm/test/Transforms/GVN
modimo 1860331932 [MemCpyOpt] Correctly merge alias scopes during call slot optimization
When MemCpyOpt performs call slot optimization it will concatenate the `alias.scope` metadata between the function call and the memcpy. However, scoped AA relies on the domains in metadata to be maintained in a caller-callee relationship. Naive concatenation breaks this assumption leading to bad AA results.

The fix is to take the intersection of domains then union the scopes within those domains.

The original bug came from a case of rust bad codegen which uses this bad aliasing to perform additional memcpy optimizations. As show in the added test case `%src` got forwarded past its lifetime leading to a dereference of garbage data.

Testing
ninja check-llvm

Reviewed By: jeroen.dobbelaere

Differential Revision: https://reviews.llvm.org/D91576
2020-12-03 09:23:37 -08:00
..
PRE [test] Fix remaining GVN tests under NPM 2020-11-18 12:35:32 -08:00
2007-07-25-DominatedLoop.ll
2007-07-25-InfiniteLoop.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
2007-07-25-Loop.ll
2007-07-25-NestedLoop.ll
2007-07-25-SinglePredecessor.ll
2007-07-26-InterlockingLoops.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
2007-07-26-NonRedundant.ll
2007-07-26-PhiErasure.ll
2007-07-30-PredIDom.ll
2007-07-31-NoDomInherit.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
2007-07-31-RedundantPhi.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
2008-02-12-UndefLoad.ll
2008-02-13-NewPHI.ll
2008-07-02-Unreachable.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
2008-12-09-SelfRemove.ll
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 OpaquePtr: Bulk update tests to use typed sret 2020-11-20 17:58:26 -05:00
2009-07-13-MemDepSortFail.ll
2009-11-12-MemDepMallocBitCast.ll
2010-03-31-RedundantPHIs.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
2010-05-08-OneBit.ll
2010-11-13-Simplify.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
2011-04-27-phioperands.ll
2011-07-07-MatchIntrinsicExtract.ll
2011-09-07-TypeIdFor.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
2012-05-22-PreCrash.ll
2016-08-30-MaskedScatterGather.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
MemdepMiscompile.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
addrspacecast.ll
assume-equal.ll
assume.ll [GVN] Use that assume(!X) implies X==false (PR47496) 2020-09-17 21:34:44 +02:00
basic-undef-test.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
basic.ll
big-endian.ll
bitcast-of-call.ll
br-identical.ll
callbr-loadpre-critedge.ll
callbr-scalarpre-critedge.ll
calloc-load-removal.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
calls-nonlocal.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
calls-readonly.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
commute.ll [IR][GVN] add/allow commutative intrinsics with >2 args 2020-09-03 10:14:53 -04:00
cond_br.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
cond_br2.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
condprop.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
constexpr-vector-constainsundef-crash.ll [ValueTracking] Check for ConstantExpr before using recursive helpers. 2020-07-24 17:37:09 +01:00
crash-no-aa.ll [BasicAA] Rename -disable-basicaa to -disable-basic-aa to be consistent with the canonical name "basic-aa" 2020-06-26 20:55:44 -07:00
crash.ll
critical-edge-split-indbr-pred-in-loop.ll [BreakCritEdges] Add option to opt-out of perserving loop-simplify. 2020-06-12 11:47:13 +01:00
dbg-redundant-load.ll
debugloc.ll
edge.ll
equality-assume.ll
fence.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
flags.ll
fold-const-expr.ll
fpmath.ll
freeze.ll
funclet.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
int_sideeffect.ll
invariant.group.ll StoreInst should store Align, not MaybeAlign 2020-05-15 12:26:58 -07:00
invariant.start.ll
lifetime-simple.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
load-constant-mem.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
load-from-unreachable-predecessor.ll
loadpre-context.ll [GVN LoadPRE] Extend the scope of optimization by using context to prove safety of speculation 2020-10-06 09:25:16 +07:00
loadpre-missed-opportunity.ll [GVN] Remove unused check-prefixes 2020-11-08 13:36:42 +00:00
malloc-load-removal.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
masked-load-store-vn-crash.ll [GVN] Account for masked loads/stores depending on load/store instructions 2020-09-10 10:57:33 -05:00
masked-load-store.ll Handle masked loads and stores in MemoryLocation/Dependence 2020-09-08 19:08:44 -05:00
no-mem-dep-info.ll
no_speculative_loads_with_asan.ll
noalias.ll [MemCpyOpt] Correctly merge alias scopes during call slot optimization 2020-12-03 09:23:37 -08:00
non-integral-pointers.ll [gvn] Handle a corner case w/vectors of non-integral pointers 2020-10-01 19:20:21 -07:00
non-local-offset.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
nonescaping-malloc.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
null-aliases-nothing.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
opt-remarks.ll
phi-translate-partial-alias.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
pr10820.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
pr12979.ll
pr14166.ll [BasicAA] Rename -disable-basicaa to -disable-basic-aa to be consistent with the canonical name "basic-aa" 2020-06-26 20:55:44 -07:00
pr17732.ll
pr17852.ll OpaquePtr: Bulk update tests to use typed byval 2020-11-20 14:00:46 -05:00
pr24397.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
pr24426.ll
pr25440.ll
pr28562.ll
pr28879.ll
pr32314.ll
pr34908.ll
pr36063.ll
pr42605.ll
pr46054-md-nonlocaldefcache-cleanup.ll [MemDep] Also remove load instructions from NonLocalDesCache. 2020-06-17 09:36:53 +01:00
pre-compare.ll
pre-new-inst.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
pre-skip-convergent.ll [gvn] PRE needs to skip convergent intrinsics/calls. 2020-10-30 11:24:40 -04:00
preserve-analysis.ll [NewPM] Pin tests with -debug-pass to legacy PM 2020-09-22 17:54:25 -07:00
preserve-memoryssa.ll [GVN] Fix MemorySSA update when replacing assume(false) with stores. 2020-11-05 12:09:32 +00:00
propagate-ir-flags.ll
range.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
readattrs.ll
rle-must-alias.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
rle-no-phi-translate.ll
rle-nonlocal.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
stale-loop-info.ll
tbaa.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00
unreachable-predecessor.ll
unreachable_block_infinite_loop.ll
volatile-nonvolatile.ll
vscale.ll [NewPM][BasicAA] basicaa -> basic-aa in Transforms/{New,}GVN 2020-06-26 20:28:18 -07:00