aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Utils
AgeCommit message (Collapse)Author
2009-12-21revert r89298, which was committed without a testcase. I thinkChris Lattner
the underlying PHI node insertion issue in SSAUpdate is fixed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91821 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-21fix PR5837 by having SSAUpdate reuse phi nodes for theChris Lattner
'GetValueInMiddleOfBlock' case, instead of inserting duplicates. A similar fix is almost certainly needed by the machine-level SSAUpdate implementation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91820 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-18Add Loop contains utility methods for testing whether a loopDan Gohman
contains another loop, or an instruction. The loop form is substantially more efficient on large loops than the typical code it replaces. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91654 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-18Update a comment.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91645 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-15Remove isPod() from DenseMapInfo, splitting it out to its ownChris Lattner
isPodLike type trait. This is a generally useful type trait for more than just DenseMap, and we really care about whether something acts like a pod, not whether it really is a pod. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91421 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-13Don't leave pointers uninitialized in the default constructor. GCC complainsChandler Carruth
about the potential use of these uninitialized members under certain conditions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91239 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-08Remove unnecessary #include "llvm/LLVMContext.h".Nick Lewycky
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90836 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-04add an assert to make it really clear what this is doing. Return singularval asChris Lattner
a compile time perf optimization to avoid a load. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90507 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-03improve portability to avoid conflicting with std::next in c++'0x.Chris Lattner
Patch by Howard Hinnant! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90365 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-02Move EliminateDuplicatePHINodes() from SimplifyCFG.cpp to Local.cppJim Grosbach
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90324 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-23Pull LLVMContext out of PromoteMemToReg.Nick Lewycky
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89645 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-20Make Loop::getLoopLatch() work on loops which don't have preheaders, asDan Gohman
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89484 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-19Eliminate duplicate phi nodes in loops. Loop rotation, for example, can ↵Jim Grosbach
introduce these, and it's beneficial to later passes to clean them up. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89298 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-19Make EliminateDuplicatePHINodes() available as a utility functionJim Grosbach
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89297 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-12Add the braces gcc suggested.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86933 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-11Don't trivially delete unused calls to llvm.invariant.start. This allowsDuncan Sands
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86840 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-10Implement support to debug inlined functions.Devang Patel
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86748 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-10move some generally useful functions out of jump threadingChris Lattner
into libanalysis and transformutils. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86735 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-10refactor TryToSimplifyUncondBranchFromEmptyBlock out of SimplifyCFG.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86666 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-09fix ConstantFoldCompareInstOperands to take the LHS/RHS asChris Lattner
individual operands instead of taking a temporary array git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86619 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-09Fix a comment in a typo that Duncan noticed.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86575 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-09Generalize LCSSA to handle loops with exits with predecessors outsideDan Gohman
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86569 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-06remove a bunch of extraneous LLVMContext argumentsChris Lattner
from various APIs, addressing PR5325. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86231 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-05Avoid calling getUniqueExitBlocks from within LoopSimplify, as it dependsDan Gohman
on loops having dedicated exits, which LoopSimplify can no longer always guarantee. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86181 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-05The introduction of indirectbr meant the introduction ofDan Gohman
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86176 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-05Teach LoopUnroll how to bail if LoopSimplify can't give it what it needs.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86164 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-05Delete an unused member variable.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86160 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-05Add an assertion to catch indirectbr in SplitBlockPredecessors. ThisDan Gohman
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86147 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-03remove a isFreeCall check: it is a callinst that can write to memory already.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85863 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-03Alphabetize.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85859 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-02fix a bug exposed by moving SRoA earlier which caused a crash building kc++Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85786 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-01improve comment.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85725 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-01change llvm::MergeBlockIntoPredecessor to not merge two blocks BB1->BB2 Chris Lattner
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85708 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-01constant fold indirectbr(blockaddress(%bb)) -> br label %bb.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85704 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-01Revert 85678/85680. The decision is to stay with the current form of Chris Lattner
indirectbr, thus we don't need "blockaddr(@func, null)". Eliminate it for simplicity. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85699 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-31llvm::SplitEdge should refuse to split an edge from an indirectbr.Chris Lattner
Fix CodeGenPrepare to not try to split edges from indirectbr. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85690 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-31update the comment above llvm::SplitCriticalEdge, and makeChris Lattner
it abort on IndirectBrInst as describe in the comment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85688 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-31adjust a couple xforms to work with null bb's in BlockAddress.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85680 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-31Revert r85667. LoopUnroll currently can't call utility functions whichDan Gohman
auto-update the DominatorTree because it doesn't keep the DominatorTree current while it works. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85670 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-31Remove redundant code.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85668 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-31Merge the enhancements from LoopUnroll's FoldBlockIntoPredecessor intoDan Gohman
MergeBlockIntoPredecessor. This makes SimplifyCFG slightly more aggressive, and makes it unnecessary for LoopUnroll to have its own copy of this code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85667 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-31Simplify this code.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85662 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-31Update CMakeLists for recent renames.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85660 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-31Rename UnrollLoop.cpp to LoopUnroll.cpp, and LoopUnroll.cpp toDan Gohman
LoopUnrollPass.cpp, for consistency with other passes which are similarly split. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85659 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-30Add a comment about a missed opportunity.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85635 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-30Teach SimplifyCFG how to eliminate duplicate PHI nodes within a block.Dan Gohman
This reduces codesize on a variety of codes by 1-2% on x86-64. It also helps clean up after SSAUpdater. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85626 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-29teach various passes about blockaddress. We no longerChris Lattner
crash on any clang tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85465 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-29teach ValueMapper about BlockAddress', making bugpoint a lot more useful.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85458 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-29unindent massive blocks, no functionality change.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85457 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-27Factor out redundancy from clone() implementations.Devang Patel
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85327 91177308-0d34-0410-b5e6-96231b3b80d8