llvm-6502/test/Transforms
Silviu Baranga 8bde857088 [LAA] Merge memchecks for accesses separated by a constant offset
Summary:
Often filter-like loops will do memory accesses that are
separated by constant offsets. In these cases it is
common that we will exceed the threshold for the
allowable number of checks.

However, it should be possible to merge such checks,
sice a check of any interval againt two other intervals separated
by a constant offset (a,b), (a+c, b+c) will be equivalent with
a check againt (a, b+c), as long as (a,b) and (a+c, b+c) overlap.
Assuming the loop will be executed for a sufficient number of
iterations, this will be true. If not true, checking against
(a, b+c) is still safe (although not equivalent).

As long as there are no dependencies between two accesses,
we can merge their checks into a single one. We use this
technique to construct groups of accesses, and then check
the intervals associated with the groups instead of
checking the accesses directly.

Reviewers: anemet

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241673 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-08 09:16:33 +00:00
..
ADCE
AddDiscriminators
AlignmentFromAssumptions
ArgumentPromotion
AtomicExpand/ARM
BBVectorize
BDCE
BranchFolding
CodeExtractor
CodeGenPrepare
ConstantHoisting
ConstantMerge
ConstProp
CorrelatedValuePropagation
DeadArgElim
DeadStoreElimination
EarlyCSE
Float2Int
FunctionAttrs
GCOVProfiling
GlobalDCE
GlobalOpt
GVN GVN: If a branch has two identical successors, we cannot declare either dead. 2015-06-25 18:32:02 +00:00
IndVarSimplify
Inline Rename llvm.frameescape and llvm.framerecover to localescape and localrecover 2015-07-07 22:25:32 +00:00
InstCombine Allow constfolding of llvm.sin.* and llvm.cos.* intrinsics 2015-07-08 03:55:47 +00:00
InstMerge
InstSimplify
Internalize
IPConstantProp
IRCE
JumpThreading
LCSSA
LICM
LoadCombine
LoopDeletion
LoopDistribute [LAA] Merge memchecks for accesses separated by a constant offset 2015-07-08 09:16:33 +00:00
LoopIdiom [LSR] canonicalize Prod*(1<<C) to Prod<<C 2015-06-24 19:28:40 +00:00
LoopInterchange
LoopReroll [LSR] canonicalize Prod*(1<<C) to Prod<<C 2015-06-24 19:28:40 +00:00
LoopRotate
LoopSimplify [LoopSimplify] Set proper debug location in loop backedge blocks. 2015-06-29 21:30:14 +00:00
LoopStrengthReduce [TwoAddressInstructionPass] Try 3 Addr Conversion After Commuting. 2015-07-01 23:12:13 +00:00
LoopUnroll [LoopUnroll] Use undef for phis with no value live 2015-07-01 05:38:07 +00:00
LoopUnswitch Fix PR13851: Preserve metadata for the unswitched branch 2015-06-23 05:31:09 +00:00
LoopVectorize [LoopVectorize] Use ReplaceInstWithInst() helper where appropriate. 2015-07-01 22:18:30 +00:00
LowerAtomic
LowerBitSets LowerBitSets: Ignore bitset entries that do not directly refer to a global. 2015-06-27 00:17:51 +00:00
LowerExpectIntrinsic
LowerInvoke
LowerSwitch
Mem2Reg
MemCpyOpt
MergeFunc
MetaRenamer
NaryReassociate [NaryReassociate] enhances nsw by leveraging @llvm.assume 2015-07-01 03:38:49 +00:00
ObjCARC
PartiallyInlineLibCalls
PhaseOrdering
PlaceSafepoints Rename llvm.frameescape and llvm.framerecover to localescape and localrecover 2015-07-07 22:25:32 +00:00
PruneEH [PruneEH] A naked, noinline function can return via InlineAsm 2015-06-27 07:52:53 +00:00
Reassociate [Reassociate] Don't propogate flags when creating negations 2015-06-24 21:27:36 +00:00
Reg2Mem
RewriteStatepointsForGC [RewriteStatepointsForGC] Generalized vector phi/select handling for base pointers 2015-06-26 22:47:37 +00:00
SafeStack SafeStack: Create the unsafe stack pointer on demand. 2015-06-22 20:26:54 +00:00
SampleProfile
Scalarizer
ScalarRepl
SCCP [SCCP] Turn loads of null into undef instead of zero initialized values 2015-07-01 05:37:57 +00:00
SeparateConstOffsetFromGEP
SimplifyCFG
Sink
SLPVectorizer change CHECK to CHECK-LABEL for more precision 2015-07-05 23:19:16 +00:00
SpeculativeExecution
SROA
StraightLineStrengthReduce [SLSR] S's basis must have the same type as S 2015-06-28 17:45:05 +00:00
StripSymbols
StructurizeCFG
TailCallElim
TailDup
Util