1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-21 03:53:04 +02:00
llvm-mirror/include/llvm/Transforms/Scalar
David Green 3248675f42 [UnrollAndJam] New Unroll and Jam pass
This is a simple implementation of the unroll-and-jam classical loop
optimisation.

The basic idea is that we take an outer loop of the form:

  for i..
    ForeBlocks(i)
    for j..
      SubLoopBlocks(i, j)
    AftBlocks(i)

Instead of doing normal inner or outer unrolling, we unroll as follows:

  for i... i+=2
    ForeBlocks(i)
    ForeBlocks(i+1)
    for j..
      SubLoopBlocks(i, j)
      SubLoopBlocks(i+1, j)
    AftBlocks(i)
    AftBlocks(i+1)
  Remainder Loop

So we have unrolled the outer loop, then jammed the two inner loops into
one. This can lead to a simpler inner loop if memory accesses can be shared
between the now jammed loops.

To do this we have to prove that this is all safe, both for the memory
accesses (using dependence analysis) and that ForeBlocks(i+1) can move before
AftBlocks(i) and SubLoopBlocks(i, j).

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

llvm-svn: 336062
2018-07-01 12:47:30 +00:00
..
ADCE.h
AlignmentFromAssumptions.h [AlignmentFromAssumptions] Set source and dest alignments of memory intrinsiscs separately 2018-02-22 18:55:59 +00:00
BDCE.h
CallSiteSplitting.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
ConstantHoisting.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
CorrelatedValuePropagation.h
DCE.h
DeadStoreElimination.h
DivRemPairs.h
EarlyCSE.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
Float2Int.h
GuardWidening.h
GVN.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
GVNExpression.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
InductiveRangeCheckElimination.h [New PM][IRCE] port of Inductive Range Check Elimination pass to the new pass manager 2018-03-15 11:01:19 +00:00
IndVarSimplify.h
InstSimplifyPass.h [instsimplify] Move the instsimplify pass to use more obvious file names 2018-06-29 23:36:03 +00:00
IVUsersPrinter.h
JumpThreading.h [JumpThreading] Preservation of DT and LVI across the pass 2018-01-12 21:06:48 +00:00
LICM.h
LoopAccessAnalysisPrinter.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
LoopDataPrefetch.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
LoopDeletion.h
LoopDistribute.h
LoopIdiomRecognize.h
LoopInstSimplify.h Restore the LoopInstSimplify pass, reverting r327329 that removed it. 2018-05-25 01:32:36 +00:00
LoopLoadElimination.h
LoopPassManager.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
LoopPredication.h
LoopRotation.h
LoopSimplifyCFG.h
LoopSink.h
LoopStrengthReduce.h [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-18 21:46:47 +00:00
LoopUnrollAndJamPass.h [UnrollAndJam] New Unroll and Jam pass 2018-07-01 12:47:30 +00:00
LoopUnrollPass.h [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-18 21:46:47 +00:00
LowerAtomic.h
LowerExpectIntrinsic.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
LowerGuardIntrinsic.h
MemCpyOptimizer.h [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-18 21:46:47 +00:00
MergedLoadStoreMotion.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
NaryReassociate.h [Transforms] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-10-17 21:27:42 +00:00
NewGVN.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
PartiallyInlineLibCalls.h
Reassociate.h [reassociate] Fix excessive revisits when processing long chains of reassociatable instructions. 2018-05-02 17:59:16 +00:00
RewriteStatepointsForGC.h [PM] port Rewrite Statepoints For GC to the new pass manager. 2017-12-15 09:32:11 +00:00
SCCP.h Revert r335206 "Recommit r333268: [IPSCCP] Use PredicateInfo to propagate facts from cmp instructions." 2018-06-21 19:18:36 +00:00
SimpleLoopUnswitch.h [PM/LoopUnswitch] Teach the new unswitch to handle nontrivial 2018-06-25 23:32:54 +00:00
SimplifyCFG.h Move Analysis/Utils/Local.h back to Transforms 2018-06-04 21:23:21 +00:00
Sink.h
SpeculateAroundPHIs.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
SpeculativeExecution.h
SROA.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
TailRecursionElimination.h