llvm/lib/Transforms/IPO
Chandler Carruth ab1f4ef9a2 Add some optional passes around the vectorizer to both better prepare
the IR going into it and to clean up the IR produced by the vectorizers.

Note that these are *off by default* right now while folks collect data
on whether the performance tradeoff is reasonable.

In a build of the 'opt' binary, I see about 2% compile time regression
due to this change on average. This is in my mind essentially the worst
expected case: very little of the opt binary is going to *benefit* from
these extra passes.

I've seen several benchmarks improve in performance my small amounts due
to running these passes, and there are certain (rare) cases where these
passes make a huge difference by either enabling the vectorizer at all
or by hoisting runtime checks out of the outer loop. My primary
motivation is to prevent people from seeing runtime check overhead in
benchmarks where the existing passes and optimizers would be able to
eliminate that.

I've chosen the sequence of passes based on the kinds of things that
seem likely to be relevant for the code at each stage: rotaing loops for
the vectorizer, finding correlated values, loop invariants, and
unswitching opportunities from any runtime checks, and cleaning up
commonalities exposed by the SLP vectorizer.

I'll be pinging existing threads where some of these issues have come up
and will start new threads to get folks to benchmark and collect data on
whether this is the right tradeoff or we should do something else.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219644 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-14 00:31:29 +00:00
..
ArgumentPromotion.cpp DebugInfo+DeadArgElimination: Ensure llvm::Function*s from debug info are updated even when DAE removes both varargs and non-varargs arguments on the same function. 2014-10-07 15:10:23 +00:00
BarrierNoopPass.cpp
CMakeLists.txt Move -verify-use-list-order into llvm-uselistorder 2014-07-25 17:13:03 +00:00
ConstantMerge.cpp Repace SmallPtrSet with SmallPtrSetImpl in function arguments to avoid needing to mention the size. 2014-08-21 05:55:13 +00:00
DeadArgumentElimination.cpp DebugInfo+DeadArgElimination: Ensure llvm::Function*s from debug info are updated even when DAE removes both varargs and non-varargs arguments on the same function. 2014-10-07 15:10:23 +00:00
ExtractGV.cpp GlobalValue: Assert symbols with local linkage have default visibility 2014-05-07 23:00:22 +00:00
FunctionAttrs.cpp [optnone] Make the optnone attribute effective at suppressing function 2014-08-13 10:49:33 +00:00
GlobalDCE.cpp GlobalDCE: Don't drop any COMDAT members 2014-10-07 07:07:19 +00:00
GlobalOpt.cpp GlobalOpt: Don't drop unused memberes of a Comdat 2014-10-08 07:23:31 +00:00
InlineAlways.cpp Add an Assumption-Tracking Pass 2014-09-07 12:44:26 +00:00
Inliner.cpp Inliner: Non-local functions in COMDATs shouldn't be dropped 2014-10-08 19:32:32 +00:00
InlineSimple.cpp Add an Assumption-Tracking Pass 2014-09-07 12:44:26 +00:00
Internalize.cpp Use range based for loops to avoid needing to re-mention SmallPtrSet size. 2014-08-24 23:23:06 +00:00
IPConstantPropagation.cpp
IPO.cpp Move -verify-use-list-order into llvm-uselistorder 2014-07-25 17:13:03 +00:00
LLVMBuild.txt
LoopExtractor.cpp Revert "[C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) iterator ranges." 2014-07-21 17:06:51 +00:00
Makefile
MergeFunctions.cpp MergeFunctions: FunctionPtr has been renamed to FunctionNode. 2014-09-10 10:08:25 +00:00
PartialInlining.cpp Revert "[C++11] Add predecessors(BasicBlock *) / successors(BasicBlock *) iterator ranges." 2014-07-21 17:06:51 +00:00
PassManagerBuilder.cpp Add some optional passes around the vectorizer to both better prepare 2014-10-14 00:31:29 +00:00
PruneEH.cpp
StripDeadPrototypes.cpp
StripSymbols.cpp Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00