llvm-6502/lib/Transforms/Scalar
Bob Wilson 704d1347c5 Extend SROA to handle arrays accessed as homogeneous structs and vice versa.
This is a minor extension of SROA to handle a special case that is
important for some ARM NEON operations.  Some of the NEON intrinsics
return multiple values, which are handled as struct types containing
multiple elements of the same vector type.  The corresponding return
types declared in the arm_neon.h header have equivalent arrays.  We
need SROA to recognize that it can split up those arrays and structs
into separate vectors, even though they are not always accessed with
the same type.  SROA already handles loads and stores of an entire
alloca by using insertvalue/extractvalue to access the individual
pieces, and that code works the same regardless of whether the type
is a struct or an array.  So, all that needs to be done is to check
for compatible arrays and homogeneous structs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123381 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-13 17:45:11 +00:00
..
ADCE.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +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 CMake: Add missing source file. 2011-01-03 02:13:05 +00:00
CodeGenPrepare.cpp Make more passes preserve dominators (or state that they preserve dominators if 2011-01-08 17:01:52 +00:00
ConstantProp.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
CorrelatedValuePropagation.cpp Fix PR8790, another instance where unreachable code can cause instruction simplification to fail, 2010-12-15 00:55:35 +00:00
DCE.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
DeadStoreElimination.cpp Move Value::getUnderlyingObject to be a standalone 2010-12-15 20:02:24 +00:00
EarlyCSE.cpp Duncan deftly points out that readnone functions aren't 2011-01-03 23:38:13 +00:00
GEPSplitter.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
GVN.cpp Remove the PR8954 workaround. 2011-01-11 22:56:41 +00:00
IndVarSimplify.cpp reduce indentation. Print <nuw> and <nsw> when dumping SCEV AddRec's 2011-01-09 02:16:18 +00:00
JumpThreading.cpp Fix a bug in the loop in JumpThreading::ProcessThreadableEdges() where it could falsely produce a MultipleDestSentinel value if the first predecessor ended with an 'indirectbr'. If that happened, it caused an unnecessary FindMostPopularDest() call. 2010-12-16 12:16:00 +00:00
LICM.cpp make inSubLoop much more efficient. 2011-01-02 18:53:08 +00:00
LoopDeletion.cpp Use SmallVector instead of SmallPtrSet and avoid non-deterministic behavior. 2011-01-12 19:12:45 +00:00
LoopIdiomRecognize.cpp Teach loop-idiom to turn a loop containing a memset into a larger memset 2011-01-04 07:46:33 +00:00
LoopInstSimplify.cpp LoopInstSimplify preserves LoopSimplify. 2011-01-09 12:35:16 +00:00
LoopRotation.cpp remove a bogus assertion: the latch block of a loop is not 2011-01-11 07:47:59 +00:00
LoopStrengthReduce.cpp split dom frontier handling stuff out to its own DominanceFrontier header, 2011-01-02 22:09:33 +00:00
LoopUnrollPass.cpp random cleanups 2011-01-11 08:00:40 +00:00
LoopUnswitch.cpp Revamp the ValueMapper interfaces in a couple ways: 2011-01-08 08:15:20 +00:00
LowerAtomic.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +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 123144, reenabling the rest of memset formation. 2011-01-12 03:25:15 +00:00
Reassociate.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
Reg2Mem.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
Scalar.cpp Add a new loop-instsimplify pass, with the intention of replacing the instance 2011-01-03 00:25:16 +00:00
ScalarReplAggregates.cpp Extend SROA to handle arrays accessed as homogeneous structs and vice versa. 2011-01-13 17:45:11 +00:00
SCCP.cpp Avoid exponential growth of a table. It feels like 2010-11-30 20:23:21 +00:00
SimplifyCFGPass.cpp Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which 2010-10-19 17:21:58 +00:00
SimplifyHalfPowrLibCalls.cpp Zap the last two -Wself-assign warnings in llvm. 2011-01-06 01:33:22 +00:00
SimplifyLibCalls.cpp SimplifyLibCalls: Use IRBuilder to simplify code. 2010-12-27 00:16:46 +00:00
Sink.cpp Add helper functions for computing the Location of load, store, 2010-11-11 21:50:19 +00:00
TailDuplication.cpp Replace calls to ConstantFoldInstruction with calls to SimplifyInstruction 2010-11-23 20:26:33 +00:00
TailRecursionElimination.cpp Have a few places that want to simplify phi nodes use SimplifyInstruction 2010-11-16 17:41:24 +00:00