1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-25 14:02:52 +02:00
llvm-mirror/test/Transforms
Chandler Carruth 3111128783 [SROA] Change how SROA does vector-based promotion of allocas to handle
cases where the alloca type, the load types, and the store types used
all disagree.

Previously, the only way that vector-based promotion occured was if the
alloca type was a vector type. This was one of the *very* few remaining
uses of the alloca's type to guide SROA/mem2reg left in LLVM. It turns
out it was a bad idea.

The alloca type can change very easily based on the mixture of types
loaded and stored to that alloca. We shouldn't be relying on it as
a signal for very much. Instead, the source of truth should be loads and
stores. We should canonicalize the loads and stores as much as possible
and then rely on them exclusively in SROA.

When looking and loads and stores, we may find many different candidate
vector types. This change will let SROA try all of them to find a vector
type which is a viable way to promote the entire alloca to a vector
register.

With this change, it becomes possible to do better canonicalization and
optimization of loads and stores without breaking SROA in random ways,
and that should allow fixing a core source of performance loss in hot
numerical loops such as those in Eigen.

llvm-svn: 220116
2014-10-18 00:44:02 +00:00
..
ADCE
AddDiscriminators Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
AlignmentFromAssumptions
ArgumentPromotion Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
AtomicExpand/ARM
BBVectorize
BranchFolding Delete -std-compile-opts. 2014-10-16 20:00:02 +00:00
CodeExtractor
CodeGenPrepare
ConstantHoisting
ConstantMerge
ConstProp
CorrelatedValuePropagation
DeadArgElim 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
DeadStoreElimination [DSE] Remove no-data-layout-only type-based overlap checking 2014-10-17 11:56:00 +00:00
DebugIR Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
EarlyCSE
FunctionAttrs
GCOVProfiling Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
GlobalDCE GlobalDCE: Don't drop any COMDAT members 2014-10-07 07:07:19 +00:00
GlobalOpt GlobalOpt: Don't drop unused memberes of a Comdat 2014-10-08 07:23:31 +00:00
GVN
IndVarSimplify Revert "r219834 - Teach ScalarEvolution to sharpen range information" 2014-10-15 23:46:04 +00:00
Inline Revert "TRE: make TRE a bit more aggressive" 2014-10-17 21:25:48 +00:00
InstCombine Delete -std-compile-opts. 2014-10-16 20:00:02 +00:00
InstMerge
InstSimplify Revert "r216914 - Revert: [APFloat] Fixed a bug in method 'fusedMultiplyAdd'" 2014-10-14 19:23:07 +00:00
Internalize
IPConstantProp
JumpThreading [LVI] Check for @llvm.assume dominating the edge branch 2014-10-14 16:04:49 +00:00
LCSSA
LICM Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
LoadCombine
LoopDeletion
LoopIdiom Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
LoopReroll
LoopRotate Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
LoopSimplify
LoopStrengthReduce Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
LoopUnroll This patch de-pessimizes the calculation of loop trip counts in 2014-10-10 17:39:11 +00:00
LoopUnswitch
LoopVectorize [LoopVectorize] Ignore @llvm.assume for cost estimates and legality 2014-10-14 22:59:49 +00:00
LowerAtomic
LowerExpectIntrinsic
LowerInvoke
LowerSwitch
Mem2Reg Delete -std-compile-opts. 2014-10-16 20:00:02 +00:00
MemCpyOpt Allow call-slop optzn for destinations with a suitable dereferenceable attribute 2014-10-16 19:43:08 +00:00
MergeFunc
MetaRenamer
ObjCARC Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
PartiallyInlineLibCalls
PhaseOrdering
PruneEH
Reassociate [Reassociate] Don't canonicalize X - undef to X + (-undef). 2014-10-09 20:06:29 +00:00
Reg2Mem
SampleProfile Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
Scalarizer Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
ScalarRepl Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
SCCP
SeparateConstOffsetFromGEP/NVPTX
SimplifyCFG Switch to select optimization for two-case switches 2014-10-14 01:58:26 +00:00
Sink
SLPVectorizer [SLPVectorize] Basic ephemeral-value awareness 2014-10-15 17:35:01 +00:00
SROA [SROA] Change how SROA does vector-based promotion of allocas to handle 2014-10-18 00:44:02 +00:00
StripSymbols Revert "Revert "DI: Fold constant arguments into a single MDString"" 2014-10-03 20:01:09 +00:00
StructurizeCFG
TailCallElim Revert "TRE: make TRE a bit more aggressive" 2014-10-17 21:25:48 +00:00
TailDup
Util