|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| | 
| 
| 
| | llvm-svn: 89645 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | it may be used in contexts where preheader insertion may have failed due
to an indirectbr.
Make LoopSimplify's LoopSimplify::SeparateNestedLoop properly fail in
the case that it would require splitting an indirectbr edge.
These fix PR5502.
llvm-svn: 89484 | 
| | 
| 
| 
| 
| 
| | introduce these, and it's beneficial to later passes to clean them up.
llvm-svn: 89298 | 
| | 
| 
| 
| | llvm-svn: 89297 | 
| | 
| 
| 
| | llvm-svn: 86933 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | llvm.invariant.start to be used without necessarily being paired with a call
to llvm.invariant.end.  If you run the entire optimization pipeline then such
calls are in fact deleted (adce does it), but that's actually a good thing since
we probably do want them to be zapped late in the game.  There should really be
an integration test that checks that the llvm.invariant.start call lasts long
enough that all passes that do interesting things with it get to do their stuff
before it is deleted.  But since no passes do anything interesting with it yet
this will have to wait for later.
llvm-svn: 86840 | 
| | 
| 
| 
| | llvm-svn: 86748 | 
| | 
| 
| 
| 
| 
| | into libanalysis and transformutils.
llvm-svn: 86735 | 
| | 
| 
| 
| | llvm-svn: 86666 | 
| | 
| 
| 
| 
| 
| | individual operands instead of taking a temporary array
llvm-svn: 86619 | 
| | 
| 
| 
| | llvm-svn: 86575 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | the loop. This is needed because with indirectbr it may not be possible
for LoopSimplify to guarantee that all loop exit predecessors are
inside the loop. This fixes PR5437.
LCCSA no longer actually requires LoopSimplify form, but for now it
must still have the dependency because the PassManager doesn't know
how to schedule LoopSimplify otherwise.
llvm-svn: 86569 | 
| | 
| 
| 
| 
| 
| | from various APIs, addressing PR5325.
llvm-svn: 86231 | 
| | 
| 
| 
| 
| 
| 
| | on loops having dedicated exits, which LoopSimplify can no longer always
guarantee.
llvm-svn: 86181 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | unsplittable critical edges, which means the introduction of
loops which cannot be transformed to LoopSimplify form. Fix
LoopSimplify to avoid transforming such loops into invalid
code.
llvm-svn: 86176 | 
| | 
| 
| 
| | llvm-svn: 86164 | 
| | 
| 
| 
| | llvm-svn: 86160 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | makes several optimization passes abort in cases where they're currently
silently miscompiling code.
Remove the indirectbr assertion from SplitEdge. Indirectbr is only
a problem for critical edges, and SplitEdge defers to SplitCriticalEdge
to handle those, and SplitCriticalEdge has its own assertion for
indirectbr.
llvm-svn: 86147 | 
| | 
| 
| 
| | llvm-svn: 85863 | 
| | 
| 
| 
| | llvm-svn: 85859 | 
| | 
| 
| 
| | llvm-svn: 85786 | 
| | 
| 
| 
| | llvm-svn: 85725 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| | when BB2 has its address taken.  Since it ends up doing BB2->rauw(BB1),
this can cause the address of the entry block to be taken.  Since it is
generally undesirable to nuke blocks whose address is taken, even when
we can, just unconditionally stop this xform.
llvm-svn: 85708 | 
| | 
| 
| 
| | llvm-svn: 85704 | 
| | 
| 
| 
| 
| 
| 
| | indirectbr, thus we don't need "blockaddr(@func, null)".  Eliminate it
for simplicity.
llvm-svn: 85699 | 
| | 
| 
| 
| 
| 
| | Fix CodeGenPrepare to not try to split edges from indirectbr.
llvm-svn: 85690 | 
| | 
| 
| 
| 
| 
| | it abort on IndirectBrInst as describe in the comment.
llvm-svn: 85688 | 
| | 
| 
| 
| | llvm-svn: 85680 | 
| | 
| 
| 
| 
| 
| 
| | auto-update the DominatorTree because it doesn't keep the DominatorTree
current while it works.
llvm-svn: 85670 | 
| | 
| 
| 
| | llvm-svn: 85668 | 
| | 
| 
| 
| 
| 
| 
| | MergeBlockIntoPredecessor. This makes SimplifyCFG slightly more aggressive,
and makes it unnecessary for LoopUnroll to have its own copy of this code.
llvm-svn: 85667 | 
| | 
| 
| 
| | llvm-svn: 85662 | 
| | 
| 
| 
| | llvm-svn: 85660 | 
| | 
| 
| 
| 
| 
| 
| | LoopUnrollPass.cpp, for consistency with other passes which are
similarly split.
llvm-svn: 85659 | 
| | 
| 
| 
| | llvm-svn: 85635 | 
| | 
| 
| 
| 
| 
| 
| | This reduces codesize on a variety of codes by 1-2% on x86-64. It also
helps clean up after SSAUpdater.
llvm-svn: 85626 | 
| | 
| 
| 
| 
| 
| | crash on any clang tests.
llvm-svn: 85465 | 
| | 
| 
| 
| | llvm-svn: 85458 | 
| | 
| 
| 
| | llvm-svn: 85457 | 
| | 
| 
| 
| | llvm-svn: 85327 | 
| | 
| 
| 
| | llvm-svn: 85286 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| | with multiple return values it inserts a PHI to merge them all together.
However, if the return values are all the same, it ends up with a pointless
PHI and this pointless PHI happens to really block SRoA from happening in 
at least a silly C++ example written by Doug, but probably others.  This 
fixes rdar://7339069.
llvm-svn: 85206 | 
| | 
| 
| 
| 
| 
| | to free()
llvm-svn: 85181 | 
| | 
| 
| 
| 
| 
| 
| | Remove LowerAllocations pass.
Update some more passes to treate free calls just like they were treating FreeInst.
llvm-svn: 85176 | 
| | 
| 
| 
| 
| 
| | VISIBILITY_HIDDEN removal.
llvm-svn: 85043 | 
| | 
| 
| 
| 
| 
| 
| | Chris claims we should never have visibility_hidden inside any .cpp file but
that's still not true even after this commit.
llvm-svn: 85042 | 
| | 
| 
| 
| | llvm-svn: 85020 | 
| | 
| 
| 
| 
| 
| 
| | Update all analysis passes and transforms to treat free calls just like FreeInst.
Remove RaiseAllocations and all its tests since FreeInst no longer needs to be raised.
llvm-svn: 84987 | 
| | 
| 
| 
| | llvm-svn: 84667 | 
| | 
| 
| 
| 
| 
| 
| | When an incoming value for a PHI is updated, we must also updated all other
incoming values for the same BB to match, otherwise we create invalid PHIs.
llvm-svn: 84638 |