aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms
AgeCommit message (Collapse)Author
2006-09-09Turn div X, (Cond ? Y : 0) -> div X, YChris Lattner
This implements select.ll::test18. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30230 91177308-0d34-0410-b5e6-96231b3b80d8
2006-09-07Throttle back tail duplication to avoid creating really ugly sequences of code.Chris Lattner
For Transforms/TailDup/if-tail-dup.ll, f.e., it produces: _foo: movl 8(%esp), %eax movl 4(%esp), %ecx testl $1, %ecx je LBB1_2 #cond_next LBB1_1: #cond_true movl $1, (%eax) LBB1_2: #cond_next testl $2, %ecx je LBB1_4 #cond_next10 LBB1_3: #cond_true6 movl $1, 4(%eax) LBB1_4: #cond_next10 testl $4, %ecx je LBB1_6 #cond_next18 LBB1_5: #cond_true14 movl $1, 8(%eax) LBB1_6: #cond_next18 testl $8, %ecx je LBB1_8 #return LBB1_7: #cond_true22 movl $1, 12(%eax) ret LBB1_8: #return ret instead of: _foo: movl 4(%esp), %eax testl $2, %eax sete %cl movl 8(%esp), %edx testl $1, %eax je LBB1_2 #cond_next LBB1_1: #cond_true movl $1, (%edx) testb %cl, %cl jne LBB1_4 #cond_next10 jmp LBB1_3 #cond_true6 LBB1_2: #cond_next testb %cl, %cl jne LBB1_4 #cond_next10 LBB1_3: #cond_true6 movl $1, 4(%edx) testl $4, %eax je LBB1_6 #cond_next18 jmp LBB1_5 #cond_true14 LBB1_4: #cond_next10 testl $4, %eax je LBB1_6 #cond_next18 LBB1_5: #cond_true14 movl $1, 8(%edx) testl $8, %eax je LBB1_8 #return jmp LBB1_7 #cond_true22 LBB1_6: #cond_next18 testl $8, %eax je LBB1_8 #return LBB1_7: #cond_true22 movl $1, 12(%edx) ret LBB1_8: #return ret git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30158 91177308-0d34-0410-b5e6-96231b3b80d8
2006-09-05Fix Duraid's changes to work when TLI is null. This fixes the failingChris Lattner
lowerinvoke regtests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30115 91177308-0d34-0410-b5e6-96231b3b80d8
2006-09-04add setJumpBufSize() and setJumpBufAlignment() to target-lowering.Duraid Madina
Call these from your backend to enjoy setjmp/longjmp goodness, see lib/Target/IA64/IA64ISelLowering.cpp for an example git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30095 91177308-0d34-0410-b5e6-96231b3b80d8
2006-09-02Make ArgumentPromotion handle recursive functions that pass pointers in ↵Owen Anderson
their recursive calls. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30057 91177308-0d34-0410-b5e6-96231b3b80d8
2006-09-02Improve handling of SelectInst.Nick Lewycky
Reorder operations to remove duplicated work. Fix to leave floating-point types out of the optimization. Add tests to predsimplify.ll for SwitchInst and SelectInst handling. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30055 91177308-0d34-0410-b5e6-96231b3b80d8
2006-09-01Don't confuse canonicalize and lookup. Fixes predsimplify.reg4.ll. AlsoNick Lewycky
corrects missing optimization opportunity removing cases from a switch. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30009 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-31Properties where both Values weren't in the union (as being equal toNick Lewycky
another Value) weren't being found by findProperties. This fixes predsimplify.ll test6, a missed optimization opportunity. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29991 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-30Move to using the EquivalenceClass ADT. Removes SynSets.Nick Lewycky
If a branch's condition has become a ConstantBool, simplify it immediately. Removing the edge saves work and exposes up more optimization opportunities in the pass. Add support for SelectInst. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29970 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-29Do not rely on std::sort and std::erase to get list of uniqueDevang Patel
exit blocks. The output is dependent on addresses of basic block. Add and use Loop::getUniqueExitBlocks. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29966 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-29Clean up a bit.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29950 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-28Add PredicateSimplifier pass. Collapses equal variables into one formNick Lewycky
and simplifies expressions. This implements the optimization described in PR807. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29947 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-28Make LoopUnroll fold excessive BasicBlocks. This results in a significant ↵Owen Anderson
speedup of gccas on 252.eon git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29936 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-28simplify AnalysisGroup registration, eliminating one typeid call.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29932 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-27eliminate RegisterOpt. It does the same thing as RegisterPass.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29925 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-27s|llvm/Support/Visibility.h|llvm/Support/Compiler.h|Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29911 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-25Fix a crash related to updating Phi nodes in the original header block. ↵Owen Anderson
This was causing a crash in 175.vpr git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29887 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-25Add an assertion to check that we're really preserving LCSSA.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29886 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-25Reapply the indvars patch, since nothing blew up last night.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29874 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-25Revert my previous patch. Since there are some major changes that went in ↵Owen Anderson
today, I'm going to wait to put this in HEAD until tomorrow, so as not to clutter the nightly tester. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29868 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-25Specify that indvars actually preserve LCSSA. This has been done for a ↵Owen Anderson
while, but I forgot to put in the analysis usage. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29867 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-24Implement unrolling of multiblock loops. This significantly improves theOwen Anderson
utility of the LoopUnroll pass. Also, add a testcase for multiblock-loop unrolling. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29859 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-18Fix a grammaro in a comment.Reid Spencer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29765 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-14Handle single-entry PHI nodes correctly. This fixes PR877 andChris Lattner
Transforms/CondProp/2006-08-14-SingleEntryPhiCrash.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29673 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-12Don't attempt to split subloops out of a loop with a huge number of backedges.Chris Lattner
Not only will this take huge amounts of compile time, the resultant loop nests won't be useful for optimization. This reduces loopsimplify time on Transforms/LoopSimplify/2006-08-11-LoopSimplifyLongTime.ll from ~32s to ~0.4s with a debug build of llvm on a 2.7Ghz G5. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29647 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-12Reimplement the loopsimplify code which deletes edges from unreachableChris Lattner
blocks that target loop blocks. Before, the code was run once per loop, and depended on the number of predecessors each block in the loop had. Unfortunately, scanning preds can be really slow when huge numbers of phis exist or when phis with huge numbers of inputs exist. Now, the code is run once per function and scans successors instead of preds, which is far faster. In addition, the new code is simpler and is goto free, woo. This change speeds up a nasty testcase Duraid provided me from taking hours to taking ~72s with a debug build. The functionality this implements is already tested in the testsuite as Transforms/CodeExtractor/2004-03-13-LoopExtractorCrash.ll. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29644 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-07Make this example pass use some things from lib/Support (EscapeString,Reid Spencer
SlowOperatingInfo, Statistics). Besides providing an example of how to use these facilities, it also serves to debug problems with runtime linking when dlopening a loadable module. These three support facilities exercise different combinations of Text/Weak Weak/Text and Text/Text linking between the executable and the module. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29552 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-07For PR780:Reid Spencer
1. Change the usage of LOADABLE_MODULE so that it implies all the things necessary to make a loadable module. This reduces the user's burdern to get a loadable module correctly built. 2. Document the usage of LOADABLE_MODULE in the MakefileGuide 3. Adjust the makefile for lib/Transforms/Hello to use the new specification for building loadable modules 4. Adjust the sample project to not attempt to build a shared library for its little library. This was just wasteful and not instructive at all. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29551 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-03Fix PR867 (and maybe 868) and testcsae:Chris Lattner
Transforms/SimplifyCFG/2006-08-03-Crash.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29515 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-03Changes:Chris Lattner
1. Update an obsolete comment. 2. Make the sorting by base an explicit (though still N^2) step, so that the code is more clear on what it is doing. 3. Partition uses so that uses inside the loop are handled before uses outside the loop. Note that none of these changes currently changes the code inserted by LSR, but they are a stepping stone to getting there. This code is the result of some crazy pair programming with Nate. :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29493 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-02Add special check to avoid isLoop call. Simple, but doesn't seem to speedChris Lattner
up lcssa much in practice. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29465 91177308-0d34-0410-b5e6-96231b3b80d8
2006-08-02Replace the SSA update code in LCSSA with a bottom-up approach instead of a topChris Lattner
down approach, inspired by discussions with Tanya. This approach is significantly faster, because it does not need dominator frontiers and it does not insert extraneous unused PHI nodes. For example, on 252.eon, in a release-asserts build, this speeds up LCSSA (which is the slowest pass in gccas) from 9.14s to 0.74s on my G5. This code is also slightly smaller and significantly simpler than the old code. Amusingly, in a normal Release build (which includes the "assert(L->isLCSSAForm());" assertion), asserting that the result of LCSSA is in LCSSA form is actually slower than the LCSSA transformation pass itself on 252.eon. I will see if Loop::isLCSSAForm can be sped up next. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29463 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-20Minor comment tweaksChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29226 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-20Make it fit into 80 cols.Devang Patel
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29223 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-20Add new constructor to accept vector of exported names while creatingDevang Patel
InternalizePass. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29222 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-19Add an assertion.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29199 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-19Make LoopUnroll not die on LCSSA Phis. This makes lencod work again.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29198 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-19Fix a error that hadn't yet cause any problems, but I'm sure it would haveOwen Anderson
somewhere down the road. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29197 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-18silence warnings in a release buildChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29189 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-18Only reuse a previous IV if it would not require a type conversion.Evan Cheng
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29186 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-14eliminate some ugly code, using ConstantExpr::getWithOperands instead.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29149 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-14Hopefully the final attempt at making IndVars preserve LCSSA.Owen Anderson
This should fix PR 831. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29141 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-13Revert this patch temporarily until PR831 is fixed.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29134 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-12Handle instructions in the map, but that map to a null pointer.Chris Lattner
This unbreaks smg2000. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29127 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-12IndVars now (correctly) preserves LCSSA form.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29126 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-12In addition to deleting calls, the inliner can constant fold them as well.Chris Lattner
Handle this case, which doesn't require a new callgraph edge. This fixes a crash compiling MallocBench/gs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29121 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-12Change the callgraph representation to store the callsite along with theChris Lattner
target CG node. This allows the inliner to properly update the callgraph when using the pruning inliner. The pruning inliner may not copy over all call sites from a callee to a caller, so the edges corresponding to those call sites should not be copied over either. This fixes PR827 and Transforms/Inline/2006-07-12-InlinePruneCGUpdate.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29120 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-11Silence a warning produced in assertions-disabled modeChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29108 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-11Revert my indvars changes because they were breaking things. Unfortunately thisOwen Anderson
didn't start showing up until after the recent instcombine fixes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29102 91177308-0d34-0410-b5e6-96231b3b80d8
2006-07-10Add a comment, and fix a typo that broke the build.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29094 91177308-0d34-0410-b5e6-96231b3b80d8