1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00
llvm-mirror/include/llvm/Analysis
Hao Liu d39edfda46 [LoopVectorize] Teach Loop Vectorizor about interleaved memory accesses.
Interleaved memory accesses are grouped and vectorized into vector load/store and shufflevector.
E.g. for (i = 0; i < N; i+=2) {
       a = A[i];         // load of even element
       b = A[i+1];       // load of odd element
       ...               // operations on a, b, c, d
       A[i] = c;         // store of even element
       A[i+1] = d;       // store of odd element
     }

  The loads of even and odd elements are identified as an interleave load group, which will be transfered into vectorized IRs like:
     %wide.vec = load <8 x i32>, <8 x i32>* %ptr
     %vec.even = shufflevector <8 x i32> %wide.vec, <8 x i32> undef, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
     %vec.odd = shufflevector <8 x i32> %wide.vec, <8 x i32> undef, <4 x i32> <i32 1, i32 3, i32 5, i32 7>

  The stores of even and odd elements are identified as an interleave store group, which will be transfered into vectorized IRs like:
     %interleaved.vec = shufflevector <4 x i32> %vec.even, %vec.odd, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7> 
     store <8 x i32> %interleaved.vec, <8 x i32>* %ptr

This optimization is currently disabled by defaut. To try it by adding '-enable-interleaved-mem-accesses=true'. 

llvm-svn: 239291
2015-06-08 06:39:56 +00:00
..
AliasAnalysis.h [PM/AA] Start refactoring AliasAnalysis to remove the analysis group and 2015-06-04 02:03:15 +00:00
AliasSetTracker.h Constify arguments in AliasSetTracker methods. NFC 2015-05-13 01:12:12 +00:00
AssumptionCache.h Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:11:45 +00:00
BlockFrequencyInfo.h Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:11:45 +00:00
BlockFrequencyInfoImpl.h Tidy comment. NFC. 2015-06-04 20:49:52 +00:00
BranchProbabilityInfo.h Add BranchProbabilityInfo::releaseMemory to clear the Weights field. 2015-05-28 19:43:06 +00:00
CallGraph.h Replace push_back(Constructor(foo)) with emplace_back(foo) for non-trivial types 2015-05-29 19:43:39 +00:00
CallGraphSCCPass.h
CallPrinter.h
CaptureTracking.h
CFG.h
CFGPrinter.h
CGSCCPassManager.h Remove std::move on return of temporary. 2015-05-01 15:25:29 +00:00
CodeMetrics.h
ConstantFolding.h DataLayout is mandatory, update the API to reflect it with references. 2015-03-10 02:37:25 +00:00
DependenceAnalysis.h [DependenceAnalysis] Extend unifySubscriptType for handling coupled subscript groups. 2015-05-29 16:58:08 +00:00
DominanceFrontier.h
DominanceFrontierImpl.h Add more missing #includes, found by modules build. 2015-05-11 22:41:07 +00:00
DomPrinter.h
DOTGraphTraitsPass.h
InlineCost.h Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:11:45 +00:00
InstructionSimplify.h DataLayout is mandatory, update the API to reflect it with references. 2015-03-10 02:37:25 +00:00
Interval.h
IntervalIterator.h Remove use of reserved identifier 2015-03-15 01:37:01 +00:00
IntervalPartition.h
IteratedDominanceFrontier.h Move IDF Calculation to a separate file, expose an interface to it. 2015-04-21 19:13:02 +00:00
IVUsers.h DataLayout is mandatory, update the API to reflect it with references. 2015-03-10 02:37:25 +00:00
JumpInstrTableInfo.h Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:11:45 +00:00
LazyCallGraph.h
LazyValueInfo.h Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:11:45 +00:00
LibCallAliasAnalysis.h Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:11:45 +00:00
LibCallSemantics.h Stop calling DwarfEHPrepare from WinEHPrepare 2015-03-12 00:36:20 +00:00
Lint.h
Loads.h DataLayout is mandatory, update the API to reflect it with references. 2015-03-10 02:37:25 +00:00
LoopAccessAnalysis.h [LoopVectorize] Teach Loop Vectorizor about interleaved memory accesses. 2015-06-08 06:39:56 +00:00
LoopInfo.h Push constness through LoopInfo::isLoopHeader and clean it up a bit. 2015-06-02 15:28:27 +00:00
LoopInfoImpl.h Push constness through LoopInfo::isLoopHeader and clean it up a bit. 2015-06-02 15:28:27 +00:00
LoopIterator.h
LoopPass.h
MemoryBuiltins.h DataLayout is mandatory, update the API to reflect it with references. 2015-03-10 02:37:25 +00:00
MemoryDependenceAnalysis.h Revamp PredIteratorCache interface to be cleaner. 2015-04-21 21:11:50 +00:00
MemoryLocation.h [PM/AA] Start refactoring AliasAnalysis to remove the analysis group and 2015-06-04 02:03:15 +00:00
Passes.h Divergence analysis for GPU programs 2015-04-10 05:03:50 +00:00
PHITransAddr.h [PHITransAddr] Don't translate unreachable values 2015-06-01 00:15:08 +00:00
PostDominators.h Use 'override/final' instead of 'virtual' for overridden methods 2015-04-11 02:11:45 +00:00
PtrUseVisitor.h
RegionInfo.h Remove empty non-virtual destructors or mark them =default when non-public 2015-04-11 15:32:26 +00:00
RegionInfoImpl.h Make it obvious that we're iterating over a range of pointers. 2015-04-16 12:43:07 +00:00
RegionIterator.h Remove explicit RNSuccIterator copy assignment in favor of implicit default 2015-03-04 07:51:50 +00:00
RegionPass.h
RegionPrinter.h
ScalarEvolution.h [ScalarEvolution] refactor: extract interface getGEPExpr 2015-05-18 17:03:25 +00:00
ScalarEvolutionExpander.h [SCEVExpander] Fix comments for functions. NFC. 2015-04-14 03:20:40 +00:00
ScalarEvolutionExpressions.h
ScalarEvolutionNormalization.h
SparsePropagation.h Removing LLVM_DELETED_FUNCTION, as MSVC 2012 was the last reason for requiring the macro. NFC; LLVM edition. 2015-02-15 22:54:22 +00:00
TargetFolder.h [opaque pointer types] Push explicit type parameter for geps through the constant folders 2015-04-03 01:15:16 +00:00
TargetLibraryInfo.def Move TargetLibraryInfo data from two files into one common .def file. 2015-03-03 23:41:58 +00:00
TargetLibraryInfo.h TLI: Add addVectorizableFunctionsFromVecLib. 2015-03-17 19:50:55 +00:00
TargetTransformInfo.h [LoopVectorize] Teach Loop Vectorizor about interleaved memory accesses. 2015-06-08 06:39:56 +00:00
TargetTransformInfoImpl.h [LoopVectorize] Teach Loop Vectorizor about interleaved memory accesses. 2015-06-08 06:39:56 +00:00
Trace.h
ValueTracking.h Exploit dereferenceable_or_null attribute in LICM pass 2015-05-18 18:07:00 +00:00