llvm/test/Transforms/GVN
Dehao Chen 961ef79d43 Do not widen load for different variable in GVN.
Summary:
Widening load in GVN is too early because it will block other optimizations like PRE, LICM.

https://llvm.org/bugs/show_bug.cgi?id=29110

The SPECCPU2006 benchmark impact of this patch:

Reference: o2_nopatch
(1): o2_patched

           Benchmark             Base:Reference   (1)  
-------------------------------------------------------
spec/2006/fp/C++/444.namd                  25.2  -0.08%
spec/2006/fp/C++/447.dealII               45.92  +1.05%
spec/2006/fp/C++/450.soplex                41.7  -0.26%
spec/2006/fp/C++/453.povray               35.65  +1.68%
spec/2006/fp/C/433.milc                   23.79  +0.42%
spec/2006/fp/C/470.lbm                    41.88  -1.12%
spec/2006/fp/C/482.sphinx3                47.94  +1.67%
spec/2006/int/C++/471.omnetpp             22.46  -0.36%
spec/2006/int/C++/473.astar               21.19  +0.24%
spec/2006/int/C++/483.xalancbmk           36.09  -0.11%
spec/2006/int/C/400.perlbench             33.28  +1.35%
spec/2006/int/C/401.bzip2                 22.76  -0.04%
spec/2006/int/C/403.gcc                   32.36  +0.12%
spec/2006/int/C/429.mcf                   41.04  -0.41%
spec/2006/int/C/445.gobmk                 26.94  +0.04%
spec/2006/int/C/456.hmmer                  24.5  -0.20%
spec/2006/int/C/458.sjeng                    28  -0.46%
spec/2006/int/C/462.libquantum            55.25  +0.27%
spec/2006/int/C/464.h264ref               45.87  +0.72%

geometric mean                                   +0.23%

For most benchmarks, it's a wash, but we do see stable improvements on some benchmarks, e.g. 447,453,482,400.

Reviewers: davidxl, hfinkel, dberlin, sanjoy, reames

Subscribers: gberry, junbuml

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281074 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-09 18:42:35 +00:00
..
PRE Do not widen load for different variable in GVN. 2016-09-09 18:42:35 +00:00
2007-07-25-DominatedLoop.ll
2007-07-25-InfiniteLoop.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
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 [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
2007-07-30-PredIDom.ll
2007-07-31-NoDomInherit.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
2007-07-31-RedundantPhi.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
2008-02-12-UndefLoad.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
2008-02-13-NewPHI.ll
2008-07-02-Unreachable.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
2008-12-09-SelfRemove.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +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 [opaque pointer type] Add textual IR support for explicit type parameter for global aliases 2015-09-11 03:22:04 +00:00
2009-07-13-MemDepSortFail.ll
2009-11-12-MemDepMallocBitCast.ll
2010-03-31-RedundantPHIs.ll
2010-05-08-OneBit.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2010-11-13-Simplify.ll
2011-04-27-phioperands.ll
2011-07-07-MatchIntrinsicExtract.ll
2011-09-07-TypeIdFor.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
2012-05-22-PreCrash.ll
2016-08-30-MaskedScatterGather.ll IntrArgMemOnly is only defined (and current AA machinery only sanely supports) pointer arguments, and these intrinsics have vector of pointer arguments. Remove ArgMemOnly until we either have the machinery, define a new attribute, or something similar 2016-08-30 19:58:48 +00:00
assume-equal.ll Fix for two constant propagation problems in GVN with the assume intrinsic 2016-01-21 21:32:35 +00:00
basic-undef-test.ll
basic.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
big-endian.ll Do not widen load for different variable in GVN. 2016-09-09 18:42:35 +00:00
bitcast-of-call.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
br-identical.ll GVN: If a branch has two identical successors, we cannot declare either dead. 2015-06-25 18:32:02 +00:00
calloc-load-removal.ll
calls-nonlocal.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
calls-readonly.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
commute.ll
cond_br2.ll Move the personality function from LandingPadInst to Function 2015-06-17 20:52:32 +00:00
cond_br.ll
condprop.ll
crash-no-aa.ll [PM/AA] Rebuild LLVM's alias analysis infrastructure in a way compatible 2015-09-09 17:55:00 +00:00
crash.ll
edge.ll
fence.ll Allow value forwarding past release fences in GVN 2016-03-25 22:40:35 +00:00
flags.ll [GVN] Respect fast-math-flags on fcmps 2016-04-22 06:37:51 +00:00
fold-const-expr.ll [GVN] Fold constant expression in GVN. 2016-07-14 22:02:25 +00:00
fpmath.ll
funclet.ll [IR] Reformulate LLVM's EH funclet IR 2015-12-12 05:38:55 +00:00
invariant.group.ll inariant.group handling in GVN 2015-10-02 22:12:22 +00:00
invariant.start.ll [AliasAnalysis] Treat invariant.start as read-memory 2016-08-09 17:18:05 +00:00
lifetime-simple.ll
load-constant-mem.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
load-from-unreachable-predecessor.ll
malloc-load-removal.ll
MemdepMiscompile.ll
no_speculative_loads_with_asan.ll Do not widen load for different variable in GVN. 2016-09-09 18:42:35 +00:00
noalias.ll
non-local-offset.ll
nonescaping-malloc.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
null-aliases-nothing.ll
phi-translate-partial-alias.ll
pr10820.ll
pr12979.ll [GVN] Intersect the IR flags when CSE'ing two instructions 2015-06-24 21:52:25 +00:00
pr14166.ll [InstSimplify] Cast folding can be made more generic 2016-07-26 17:58:05 +00:00
pr17732.ll Revert "Change memcpy/memset/memmove to have dest and source alignments." 2015-11-19 05:56:52 +00:00
pr17852.ll
pr24397.ll [PHITransAddr] Don't assume that instruction operands are translatable 2015-08-09 15:43:02 +00:00
pr24426.ll Preserve CFG in MergedLoadStoreMotion. This fixes PR24426. 2015-10-18 19:34:10 +00:00
pr25440.ll Do not widen load for different variable in GVN. 2016-09-09 18:42:35 +00:00
pr28562.ll [IR] andIRFlags and copyIRFlags needs to handle GEP 2016-07-15 05:02:31 +00:00
pr28626.ll GVH-hoist: only clone GEPs (PR28606) 2016-07-21 23:22:10 +00:00
pre-compare.ll
pre-new-inst.ll GVN: tolerate an instruction being replaced without existing in the leaderboard 2015-07-14 21:03:18 +00:00
range.ll [GVN] Make a test case more robust 2015-10-28 03:20:05 +00:00
readattrs.ll
rle-must-alias.ll [GVN] Use FileCheck instead of grep for tests. 2016-07-17 23:21:26 +00:00
rle-no-phi-translate.ll
rle-nonlocal.ll
tbaa.ll
unreachable_block_infinite_loop.ll
volatile-nonvolatile.ll More detailed dependence test between volatile and non-volatile accesses 2016-02-22 23:07:43 +00:00