llvm/lib/Transforms/Scalar
Chris Lattner 145c532e68 Enhance SRoA to be more aggressive about scalarization of aggregate allocas
that have PHI or select uses of their element pointers.  This can often happen
when instcombine sinks two loads into a successor, inserting a phi or select.

With this patch, we can scalarize the alloca, but the pinned elements are not
yet promoted.  This is still a win for large aggregates where only one element
is used.  This fixes rdar://8904039 and part of rdar://7339113 (poor codegen
on stringswitch).



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124070 91177308-0d34-0410-b5e6-96231b3b80d8
2011-01-23 08:27:54 +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 fix rdar://8878965, a regression I introduced with the recent 2011-01-18 20:53:04 +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 Remove code for updating dominance frontiers and some outdated references to 2011-01-18 04:11:31 +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 Generalize LoadAndStorePromoter a bit and switch LICM 2011-01-15 00:12:35 +00:00
LoopDeletion.cpp Remove code for updating dominance frontiers and some outdated references to 2011-01-18 04:11:31 +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 Remove code for updating dominance frontiers and some outdated references to 2011-01-18 04:11:31 +00:00
LoopUnrollPass.cpp Remove dead code, that I apparently wrote a while back. We seem to be doing well enough 2011-01-17 22:39:54 +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
MemCpyOptimizer.cpp Actually check memcpy lengths, instead of just commenting about 2011-01-21 22:07:57 +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 Remove outdated references to dominance frontiers. 2011-01-18 03:53:26 +00:00
ScalarReplAggregates.cpp Enhance SRoA to be more aggressive about scalarization of aggregate allocas 2011-01-23 08:27:54 +00:00
SCCP.cpp SCCP doesn't actually preserve the CFG. It will delete and insert terminator 2011-01-21 08:38:09 +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