llvm-6502/test/Transforms
Jingyue Wu 2918efd551 Add straight-line strength reduction to LLVM
Summary:
Straight-line strength reduction (SLSR) is implemented in GCC but not yet in
LLVM. It has proven to effectively simplify statements derived from an unrolled
loop, and can potentially benefit many other cases too. For example,

LLVM unrolls

  #pragma unroll
  foo (int i = 0; i < 3; ++i) {
    sum += foo((b + i) * s);
  }

into

  sum += foo(b * s);
  sum += foo((b + 1) * s);
  sum += foo((b + 2) * s);

However, no optimizations yet reduce the internal redundancy of the three
expressions:

  b * s
  (b + 1) * s
  (b + 2) * s

With SLSR, LLVM can optimize these three expressions into:

  t1 = b * s
  t2 = t1 + s
  t3 = t2 + s

This commit is only an initial step towards implementing a series of such
optimizations. I will implement more (see TODO in the file commentary) in the
near future. This optimization is enabled for the NVPTX backend for now.
However, I am more than happy to push it to the standard optimization pipeline
after more thorough performance tests.

Test Plan: test/StraightLineStrengthReduce/slsr.ll

Reviewers: eliben, HaoLiu, meheff, hfinkel, jholewinski, atrick

Reviewed By: jholewinski, atrick

Subscribers: karthikthecool, jholewinski, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228016 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-03 19:37:06 +00:00
..
ADCE
AddDiscriminators IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
AlignmentFromAssumptions
ArgumentPromotion IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
AtomicExpand/ARM
BBVectorize
BranchFolding
CodeExtractor
CodeGenPrepare [GC] CodeGenPrep transform: simplify offsetable relocate 2015-01-14 23:27:07 +00:00
ConstantHoisting
ConstantMerge
ConstProp
CorrelatedValuePropagation
DeadArgElim IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
DeadStoreElimination
EarlyCSE [PM] Port EarlyCSE to the new pass manager. 2015-02-01 10:51:23 +00:00
FunctionAttrs
GCOVProfiling IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
GlobalDCE
GlobalOpt IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
GVN [GVN] don't propagate equality comparisons of FP zero (PR22376) 2015-01-29 20:51:49 +00:00
IndVarSimplify Fix PR22222 2015-01-15 01:46:09 +00:00
Inline Inliner: Use replaceDbgDeclareForAlloca() instead of splicing the 2015-01-30 19:37:48 +00:00
InstCombine Move EH personality type classification to Analysis/LibCallSemantics.h 2015-01-28 01:17:38 +00:00
InstMerge
InstSimplify Fold fcmp in cases where value is provably non-negative. By Arch Robison. 2015-01-28 08:03:58 +00:00
Internalize
IPConstantProp
IRCE Teach IRCE to look at branch weights when recognizing range checks 2015-01-27 21:38:12 +00:00
JumpThreading
LCSSA
LICM IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
LoadCombine
LoopDeletion
LoopIdiom IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
LoopReroll
LoopRotate LoopRotate: Don't walk the uses of a Constant 2015-01-27 06:21:43 +00:00
LoopSimplify Teach SplitBlockPredecessors how to handle landingpad blocks. 2015-01-28 23:06:47 +00:00
LoopStrengthReduce [X86] Reduce some 32-bit imuls into lea + shl 2015-01-28 14:08:22 +00:00
LoopUnroll Use a smaller pragma unroll threshold to reduce test execution time. 2015-01-21 13:52:02 +00:00
LoopUnswitch
LoopVectorize Move the target specific test case arbitrary-induction-step.ll to test/Transforms/LoopVectorize/AArch64 folder. 2015-01-30 07:33:31 +00:00
LowerAtomic
LowerExpectIntrinsic [PM] Port LowerExpectIntrinsic to the new pass manager. 2015-01-24 11:13:02 +00:00
LowerInvoke
LowerSwitch LowerSwitch: replace unreachable default with popular case destination 2015-01-23 20:43:51 +00:00
Mem2Reg IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
MemCpyOpt
MergeFunc
MetaRenamer
ObjCARC IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
PartiallyInlineLibCalls
PhaseOrdering
PruneEH
Reassociate Fix Reassociate handling of constant in presence of undef float 2015-01-16 03:00:58 +00:00
Reg2Mem
SampleProfile IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
Scalarizer IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
ScalarRepl IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
SCCP
SeparateConstOffsetFromGEP/NVPTX
SimplifyCFG [PM] Port SimplifyCFG to the new pass manager. 2015-02-01 11:34:21 +00:00
Sink
SLPVectorizer Fix: SLPVectorizer crashes with assertion when vectorizing a cmp instruction. 2015-02-02 12:45:34 +00:00
SROA
StraightLineStrengthReduce Add straight-line strength reduction to LLVM 2015-02-03 19:37:06 +00:00
StripSymbols IR: Move MDLocation into place 2015-01-14 22:27:36 +00:00
StructurizeCFG
TailCallElim
TailDup
Util