llvm/test/Transforms
Chandler Carruth a2b88163af Teach SROA how to split whole-alloca integer loads and stores into
smaller integer loads and stores.

The high-level motivation is that the frontend sometimes generates
a single whole-alloca integer load or store during ABI lowering of
splittable allocas. We need to be able to break this apart in order to
see the underlying elements and properly promote them to SSA values. The
hope is that this fixes some performance regressions on x86-32 with the
new SROA pass.

Unfortunately, this causes quite a bit of churn in the test cases, and
bloats some IR that comes out. When we see an alloca that consists soley
of bits and bytes being extracted and re-inserted, we now do some
splitting first, before building widened integer "bucket of bits"
representations. These are always well folded by instcombine however, so
this shouldn't actually result in missed opportunities.

If this splitting of all-integer allocas does cause problems (perhaps
due to smaller SSA values going into the RA), we could potentially go to
some extreme measures to only do this integer splitting trick when there
are non-integer component accesses of an alloca, but discovering this is
quite expensive: it adds yet another complete walk of the recursive use
tree of the alloca.

Either way, I will be watching build bots and LNT bots to see what
fallout there is here. If anyone gets x86-32 numbers before & after this
change, I would be very interested.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166662 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-25 04:37:07 +00:00
..
ADCE
ArgumentPromotion
BBVectorize BBVectorize should ignore unreachable blocks. 2012-10-22 18:00:55 +00:00
BlockPlacement
BranchFolding
CodeExtractor
CodeGenPrepare Move load_to_switch.ll to test/CodeGen/SPARC/ 2012-09-19 09:25:03 +00:00
ConstantMerge
ConstProp
CorrelatedValuePropagation CorrelatedPropagation: BasicBlock::removePredecessor can simplify PHI nodes. If the it's the condition of a SwitchInst, reload it. 2012-09-28 10:42:50 +00:00
DeadArgElim Fix PR14016. 2012-10-09 08:13:15 +00:00
DeadStoreElimination Make this test check the transforms it's actually doing. Also add a test that it 2012-09-25 18:17:38 +00:00
EarlyCSE New EarlyCSE tests for CSE-ing across commutativity. 2012-10-09 16:58:13 +00:00
FunctionAttrs
GlobalDCE
GlobalOpt GlobalOpt: non-constexpr bitcasts or GEPs can occur even if the global value is only stored once. 2012-09-28 10:01:27 +00:00
GVN Update GVN to support vectors of pointers. 2012-10-24 21:22:30 +00:00
IndVarSimplify Indvars: Don't recursively delete instruction during BB iteration. 2012-10-19 17:53:54 +00:00
Inline rename test 2012-09-19 09:22:17 +00:00
InstCombine Add in support for getIntPtrType to get the pointer type based on the address space. 2012-10-24 15:52:52 +00:00
InstSimplify
Internalize
IPConstantProp
JumpThreading JumpThreading: when default destination is the destination of some cases in a 2012-09-05 23:45:58 +00:00
LCSSA
LICM LICM may hoist an instruction with undefined behavior above a trap. 2012-09-04 10:25:04 +00:00
LoopDeletion
LoopIdiom Revert r166390 "LoopIdiom: Replace custom dependence analysis with LoopDependenceAnalysis." 2012-10-21 19:31:16 +00:00
LoopRotate LoopRotation: Make the brute force DomTree update more brute force. 2012-09-02 11:57:22 +00:00
LoopSimplify
LoopStrengthReduce LSR critical edge splitting fix for PR13756. 2012-09-18 17:51:33 +00:00
LoopUnroll getSmallConstantTripMultiple should never return zero. 2012-10-24 19:46:44 +00:00
LoopUnswitch Fix tests that didn't test anything. 2012-09-26 09:51:39 +00:00
LoopVectorize Add support for additional reduction variables: AND, OR, XOR. 2012-10-25 00:08:41 +00:00
LowerAtomic
LowerExpectIntrinsic
LowerInvoke
LowerSwitch
Mem2Reg
MemCpyOpt In my recent change to avoid use of underaligned memory I didn't notice that 2012-10-04 13:53:21 +00:00
MergeFunc
MetaRenamer Review feedback from Duncan Sands. Alphabetize includes and simplify 2012-09-14 19:19:57 +00:00
ObjCARC Detect overflow in the path count computation. rdar://12277446. 2012-09-12 20:45:17 +00:00
PhaseOrdering Add test case for r164850. 2012-09-29 00:12:08 +00:00
PruneEH
Reassociate
ScalarRepl
SCCP
SimplifyCFG SimplifyCFG: Enhance the "remove CFG edge that leads to null pointer dereference" optimization to also handle instructions with multiple uses. 2012-10-04 16:11:49 +00:00
SimplifyLibCalls SimplifyLibcalls: The return value of ffsll is always i32, even when the input is zero. 2012-10-19 20:43:44 +00:00
Sink
SROA Teach SROA how to split whole-alloca integer loads and stores into 2012-10-25 04:37:07 +00:00
StripSymbols
TailCallElim Revert r166407 because it caused analyzer tests to crash and broke self-host bots. 2012-10-22 18:16:14 +00:00
TailDup