llvm-project/llvm/test/Transforms/GVN
Florian Hahn fc7654a67b [Local] Keep K's range if K does not move when combining metadata.
As K has to dominate I, IIUC I's range metadata must be a subset of
K's. After Eli's recent clarification to the LangRef, loading a value
outside of the range is undefined behavior.
Therefore if I's range contains elements outside of K's range and we would load
one such value, K would cause undefined behavior.

In cases like hoisting/sinking, we still want the most generic range
over all code paths to/from the hoist/sink point. As suggested in the
patches related to D47339, I will refactor the handling of those
scenarios and try to decouple it from this function as follow up, once
we switched to a similar handling of metadata in most of
combineMetadata.

I updated some tests checking mostly the merging of metadata to keep the
metadata of to dominating load. The most interesting one is probably test8 in
test/Transforms/JumpThreading/thread-loads.ll. It contained a comment
about the alias metadata preventing us to eliminate the branch, but it
seem like the actual problem currently is that we merge the ranges of
both loads and cannot eliminate the icmp afterwards. With this patch, we
manage to eliminate the icmp, as the range of the first load excludes 8.

Reviewers: efriedma, nlopes, davide

Reviewed By: efriedma

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

llvm-svn: 345456
2018-10-27 16:53:45 +00:00
..
PRE [MemDep] Use PhiValuesAnalysis to improve alias analysis results 2018-07-31 14:19:29 +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
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
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
2011-09-07-TypeIdFor.ll
2012-05-22-PreCrash.ll
2016-08-30-MaskedScatterGather.ll Support arbitrary address space pointers in masked gather/scatter intrinsics. 2017-05-03 12:28:54 +00:00
MemdepMiscompile.ll
assume-equal.ll [Devirtualization] MemDep returns non-local !invariant.group dependencies 2017-01-12 11:33:58 +00:00
basic-undef-test.ll
basic.ll
big-endian.ll Do not widen load for different variable in GVN. 2016-09-09 18:42:35 +00:00
bitcast-of-call.ll
br-identical.ll
calloc-load-removal.ll
calls-nonlocal.ll
calls-readonly.ll
commute.ll
cond_br.ll
cond_br2.ll Add address space mangling to lifetime intrinsics 2017-04-10 20:18:21 +00:00
condprop.ll [GVN] Invalidate cached info for values replaced by equality propagation 2018-09-10 12:23:05 +00:00
crash-no-aa.ll
crash.ll
dbg-redundant-load.ll [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
debugloc.ll Do not propagate DebugLoc across basic blocks 2017-01-31 20:57:13 +00:00
edge.ll
fence.ll [Debugify] Move debug value intrinsics closer to their operand defs 2018-06-06 19:05:42 +00:00
flags.ll
fold-const-expr.ll Fix some DOS-style line endings that I suspect snuck in from one of the 2016-12-23 02:02:26 +00:00
fpmath.ll
funclet.ll
int_sideeffect.ll Add an @llvm.sideeffect intrinsic 2017-11-08 21:59:51 +00:00
invariant.group.ll Implement strip.invariant.group 2018-07-02 04:49:30 +00:00
invariant.start.ll
lifetime-simple.ll Add address space mangling to lifetime intrinsics 2017-04-10 20:18:21 +00:00
load-constant-mem.ll
load-from-unreachable-predecessor.ll
malloc-load-removal.ll
no-mem-dep-info.ll [GVN] Assign new value number to calls reading memory, if there is no MemDep info. 2018-08-21 19:11:27 +00:00
no_speculative_loads_with_asan.ll Hardware-assisted AddressSanitizer (llvm part). 2017-12-09 00:21:41 +00:00
noalias.ll
non-integral-pointers.ll [GVN] Don't coerce non-integral pointers to integers or vice versa 2017-04-19 18:21:09 +00:00
non-local-offset.ll
nonescaping-malloc.ll Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
null-aliases-nothing.ll
opt-remarks.ll Make YAML quote forward slashes. 2018-10-12 16:31:20 +00:00
phi-translate-partial-alias.ll
pr10820.ll
pr12979.ll
pr14166.ll
pr17732.ll Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
pr17852.ll
pr24397.ll
pr24426.ll
pr25440.ll Do not widen load for different variable in GVN. 2016-09-09 18:42:35 +00:00
pr28562.ll
pr28879.ll [GVN] Avoid casting a vector of size less than 8 bits to i8 2018-06-21 21:43:20 +00:00
pr32314.ll [BasicAA] Add test case that goes with r305481. 2017-06-15 17:27:56 +00:00
pr34908.ll [GVN] Don't replace constants with constants. 2017-10-11 04:21:51 +00:00
pr36063.ll Mark MergedLoadStoreMotion as not preserving MemDep results 2018-02-23 10:41:57 +00:00
pre-compare.ll
pre-new-inst.ll
propagate-ir-flags.ll Fixed the lost FastMathFlags in GVN(Global Value Numbering). 2016-11-22 20:52:53 +00:00
range.ll [Local] Keep K's range if K does not move when combining metadata. 2018-10-27 16:53:45 +00:00
readattrs.ll
rle-must-alias.ll
rle-no-phi-translate.ll
rle-nonlocal.ll
stale-loop-info.ll [GVN] When merging blocks update LoopInfo if it's available 2016-12-01 03:56:43 +00:00
tbaa.ll [Analysis] Generate more precise TBAA tags when one access encloses the other 2017-12-18 20:05:20 +00:00
unreachable-predecessor.ll [GVN] Invalidate cached info for phis when setting dead predecessors to undef 2018-08-23 12:48:17 +00:00
unreachable_block_infinite_loop.ll
volatile-nonvolatile.ll