llvm/lib/Transforms/Scalar
Chandler Carruth f5837aacd4 Rework the rewriting of loads and stores for vector and integer allocas
to properly handle the combinations of these with split integer loads
and stores. This essentially replaces Evan's r168227 by refactoring the
code in a different way, and trynig to mirror that refactoring in both
the load and store sides of the rewriting.

Generally speaking there was some really problematic duplicated code
here that led to poorly founded assumptions and then subtle bugs. Now
much of the code actually flows through and follows a more consistent
style and logical path. There is still a tiny bit of duplication on the
store side of things, but it is much less bad.

This also changes the logic to never re-use a load or store instruction
as that was simply too error prone in practice.

I've added a few tests (one a reduction of the one in Evan's original
patch, which happened to be the same as the report in PR14349). I'm
going to look at adding a few more tests for things I found and fixed in
passing (such as the volatile tests in the vectorizable predicate).

This patch has survived bootstrap, and modulo one bugfix survived
Duncan's test suite, but let me know if anything else explodes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168346 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-20 01:12:50 +00:00
..
ADCE.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00
BasicBlockPlacement.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
CMakeLists.txt Introduce a new SROA implementation. 2012-09-14 09:22:59 +00:00
CodeGenPrepare.cpp Revert the series of commits starting with r166578 which introduced the 2012-11-01 08:07:29 +00:00
ConstantProp.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
CorrelatedValuePropagation.cpp 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
DCE.cpp 80-col fixup. 2012-10-16 19:39:40 +00:00
DeadStoreElimination.cpp Unquadratize SetVector removal loops in DSE. 2012-10-14 10:21:31 +00:00
EarlyCSE.cpp Update EarlyCSE's SimpleValues to use Hashing.h for their hashes. Expanded the hashing and equality to allow for equality modulo commutativity for binary ops, and comparisons with swapping of predicates. 2012-10-09 16:57:38 +00:00
GlobalMerge.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
GVN.cpp Fix an obvious typo that causes an assertion failure when running 2012-11-02 07:49:32 +00:00
IndVarSimplify.cpp Revert the series of commits starting with r166578 which introduced the 2012-11-01 08:07:29 +00:00
JumpThreading.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
LICM.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
LLVMBuild.txt LLVMBuild: Remove trailing newline, which irked me. 2011-12-12 19:48:00 +00:00
LoopDeletion.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00
LoopIdiomRecognize.cpp Revert the switch of loop-idiom to use the new dependence analysis. 2012-11-02 08:33:25 +00:00
LoopInstSimplify.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
LoopRotation.cpp LoopRotation: Make the brute force DomTree update more brute force. 2012-09-02 11:57:22 +00:00
LoopStrengthReduce.cpp revert r166264 because the LTO build is still failing 2012-10-19 21:28:43 +00:00
LoopUnrollPass.cpp Create enums for the different attributes. 2012-10-09 07:45:08 +00:00
LoopUnswitch.cpp Simplify code. No functionality change. 2012-10-16 19:52:32 +00:00
LowerAtomic.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00
Makefile make -fno-rtti the default unless a directory builds with REQUIRES_RTTI. 2010-01-24 20:43:08 +00:00
MemCpyOptimizer.cpp Revert the majority of the next patch in the address space series: 2012-11-01 09:14:31 +00:00
ObjCARC.cpp Use the Attributes::get method which takes an AttrVal value directly to simplify the code a bit. No functionality change. 2012-10-16 05:23:31 +00:00
Reassociate.cpp Remove the last bit of constant folding from LinearizeExprTree (most of it was 2012-11-18 20:15:36 +00:00
Reg2Mem.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00
Scalar.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
ScalarReplAggregates.cpp Revert the series of commits starting with r166578 which introduced the 2012-11-01 08:07:29 +00:00
SCCP.cpp Move TargetData to DataLayout. 2012-10-08 16:38:25 +00:00
SimplifyCFGPass.cpp Use TargetTransformInfo to control switch-to-lookup table transformation 2012-10-30 11:23:25 +00:00
SimplifyLibCalls.cpp instcombine: Migrate math library call simplifications 2012-11-13 04:16:17 +00:00
Sink.cpp Clean whitespaces. 2012-07-24 10:51:42 +00:00
SROA.cpp Rework the rewriting of loads and stores for vector and integer allocas 2012-11-20 01:12:50 +00:00
TailRecursionElimination.cpp Revert r166407 because it caused analyzer tests to crash and broke self-host bots. 2012-10-22 18:16:14 +00:00