aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Scalar/IndVarSimplify.cpp
AgeCommit message (Collapse)Author
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-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-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-06-27De-pessimize the handling of LCSSA Phi nodes in IndVarSimplify. Hopefully thisOwen Anderson
will make Shootout-C/nestedloop faster. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28924 91177308-0d34-0410-b5e6-96231b3b80d8
2006-06-17Fix IndVarsSimplify/2006-06-16-Indvar-LCSSA-Crash.ll, a case where aChris Lattner
"LCSSA" phi node causes indvars to break dominance properties. This fixes causes indvars to avoid inserting aggressive code in this case, instead indvars should be fixed to be more aggressive in the face of lcssa phi's. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28850 91177308-0d34-0410-b5e6-96231b3b80d8
2005-11-18Fix a crash building 176.gcc due to my recent patch, which only fixedChris Lattner
half the problem. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24414 91177308-0d34-0410-b5e6-96231b3b80d8
2005-11-17This was checking the wrong GEP expression. Fixing this fixes a gccas crashChris Lattner
compiling mysql reported by Ted Kremenek. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24402 91177308-0d34-0410-b5e6-96231b3b80d8
2005-08-10Allow indvar simplify to canonicalize ANY affine IV, not just affine IVs withChris Lattner
constant stride. This implements Transforms/IndVarsSimplify/variable-stride-ivs.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22744 91177308-0d34-0410-b5e6-96231b3b80d8
2005-07-30Break SCEVExpander out of IndVarSimplify into its own .h/.cpp file so thatNate Begeman
other passes may use it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22557 91177308-0d34-0410-b5e6-96231b3b80d8
2005-06-15Fix PR582. The rewriter can move casts around, which invalidated theChris Lattner
BB iterator. This fixes Transforms/IndVarsSimplify/2005-06-15-InstMoveCrash.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22221 91177308-0d34-0410-b5e6-96231b3b80d8
2005-04-21Remove trailing whitespaceMisha Brukman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21427 91177308-0d34-0410-b5e6-96231b3b80d8
2005-02-14Fix the second bug attached to PR504.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20181 91177308-0d34-0410-b5e6-96231b3b80d8
2005-02-12Fix for testcase Transforms/IndVarsSimplify/2005-02-11-InvokeCrash.llChris Lattner
and PR504. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20129 91177308-0d34-0410-b5e6-96231b3b80d8
2004-10-27Convert 'struct' to 'class' in various places to adhere to the coding standardsChris Lattner
and work better with VC++. Patch contributed by Morten Ofstad! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17281 91177308-0d34-0410-b5e6-96231b3b80d8
2004-10-12Fix a REALLY obscure bug in my previous checkin, which was splicing the ENDChris Lattner
marker from one ilist into the middle of another basic block! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16925 91177308-0d34-0410-b5e6-96231b3b80d8
2004-10-11Handle a common case more carefully. In particular, instead of transformingChris Lattner
pointer recurrences into expressions from this: %P_addr.0.i.0 = phi sbyte* [ getelementptr ([8 x sbyte]* %.str_1, int 0, int 0), %entry ], [ %inc.0.i, %no_exit.i ] %inc.0.i = getelementptr sbyte* %P_addr.0.i.0, int 1 ; <sbyte*> [#uses=2] into this: %inc.0.i = getelementptr sbyte* getelementptr ([8 x sbyte]* %.str_1, int 0, int 0), int %inc.0.i.rec Actually create something nice, like this: %inc.0.i = getelementptr [8 x sbyte]* %.str_1, int 0, int %inc.0.i.rec git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16924 91177308-0d34-0410-b5e6-96231b3b80d8
2004-09-20Prototype these functions more accuratelyChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16432 91177308-0d34-0410-b5e6-96231b3b80d8
2004-09-15Convert code to compile with vc7.1.Reid Spencer
Patch contributed by Paolo Invernizzi. Thanks Paolo! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16368 91177308-0d34-0410-b5e6-96231b3b80d8
2004-09-01Changes For Bug 352Reid Spencer
Move include/Config and include/Support into include/llvm/Config, include/llvm/ADT and include/llvm/Support. From here on out, all LLVM public header files must be under include/llvm/. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16137 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-26Throttle back indvar substitution from creating multiplies in loops. This ↵Chris Lattner
is bad bad bad. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15227 91177308-0d34-0410-b5e6-96231b3b80d8
2004-06-24Two fixes. First, stop using the ugly shouldSubstituteIndVar method.Chris Lattner
Second, disable substitution of quadratic addrec expressions to avoid putting multiplies in loops! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14358 91177308-0d34-0410-b5e6-96231b3b80d8
2004-06-20Make use of BinaryOperator::create* methods to shrinkify code.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14262 91177308-0d34-0410-b5e6-96231b3b80d8
2004-06-19Fix a nasty bug, noticed by ReidChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14249 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-23Move the scev expansion code into this pass, where it belongs. There isChris Lattner
still room for cleanup, but at least the code modification is out of the analysis now. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13135 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-22Disable a previous patch that was causing indvars to loop infinitely :(Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13108 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-22Fix an extremely serious thinko I made in revision 1.60 of this file.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13106 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-21Implement a todo, rewriting all possible scev expressions inside of theChris Lattner
loop. This eliminates the extra add from the previous case, but it's not clear that this will be a performance win overall. Tommorows test results will tell. :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13103 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-21Implement a fixme. The helps loops that have induction variables of differentChris Lattner
types in them. Instead of creating an induction variable for all types, it creates a single induction variable and casts to the other sizes. This generates this code: no_exit: ; preds = %entry, %no_exit %indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ] ; <uint> [#uses=4] *** %j.0.0 = cast uint %indvar to short ; <short> [#uses=1] %indvar = cast uint %indvar to int ; <int> [#uses=1] %tmp.7 = getelementptr short* %P, uint %indvar ; <short*> [#uses=1] store short %j.0.0, short* %tmp.7 %inc.0 = add int %indvar, 1 ; <int> [#uses=2] %tmp.2 = setlt int %inc.0, %N ; <bool> [#uses=1] %indvar.next = add uint %indvar, 1 ; <uint> [#uses=1] br bool %tmp.2, label %no_exit, label %loopexit instead of: no_exit: ; preds = %entry, %no_exit %indvar = phi ushort [ %indvar.next, %no_exit ], [ 0, %entry ] ; <ushort> [#uses=2] *** %indvar = phi uint [ %indvar.next, %no_exit ], [ 0, %entry ] ; <uint> [#uses=3] %indvar = cast uint %indvar to int ; <int> [#uses=1] %indvar = cast ushort %indvar to short ; <short> [#uses=1] %tmp.7 = getelementptr short* %P, uint %indvar ; <short*> [#uses=1] store short %indvar, short* %tmp.7 %inc.0 = add int %indvar, 1 ; <int> [#uses=2] %tmp.2 = setlt int %inc.0, %N ; <bool> [#uses=1] %indvar.next = add uint %indvar, 1 *** %indvar.next = add ushort %indvar, 1 br bool %tmp.2, label %no_exit, label %loopexit This is an improvement in register pressure, but probably doesn't happen that often. The more important fix will be to get rid of the redundant add. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13101 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-18Change the ExitBlocks list from being explicitly contained in the LoopChris Lattner
structure to being dynamically computed on demand. This makes updating loop information MUCH easier. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13045 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-17If the loop executes a constant number of times, try a bit harder to replaceChris Lattner
exit values. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13018 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-17Even if there are not any induction variables in the loop, if we can computeChris Lattner
the trip count for the loop, insert one so that we can canonicalize the exit condition. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13015 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-16Fix some of the strange CBE-only failures that happened last night.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12980 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-15Fix a bug in the previous checkin: if the exit block is not the same asChris Lattner
the back-edge block, we must check the preincremented value. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12968 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-15Change the canonical induction variable that we insert.Chris Lattner
Instead of producing code like this: Loop: X = phi 0, X2 ... X2 = X + 1 if (X != N-1) goto Loop We now generate code that looks like this: Loop: X = phi 0, X2 ... X2 = X + 1 if (X2 != N) goto Loop This has two big advantages: 1. The trip count of the loop is now explicit in the code, allowing the direct implementation of Loop::getTripCount() 2. This reduces register pressure in the loop, and allows X and X2 to be put into the same register. As a consequence of the second point, the code we generate for loops went from: .LBB2: # no_exit.1 ... mov %EDI, %ESI inc %EDI cmp %ESI, 2 mov %ESI, %EDI jne .LBB2 # PC rel: no_exit.1 To: .LBB2: # no_exit.1 ... inc %ESI cmp %ESI, 3 jne .LBB2 # PC rel: no_exit.1 ... which has two fewer moves, and uses one less register. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12961 91177308-0d34-0410-b5e6-96231b3b80d8
2004-04-02Rewrite the indvars pass to use the ScalarEvolution analysis.Chris Lattner
This also implements some new features for the indvars pass, including linear function test replacement, exit value substitution, and it works with a much more general class of induction variables and loops. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12620 91177308-0d34-0410-b5e6-96231b3b80d8
2004-01-08Improve encapsulation in the Loop and LoopInfo classes by eliminating theChris Lattner
getSubLoops/getTopLevelLoops methods, replacing them with iterator-based accessors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10714 91177308-0d34-0410-b5e6-96231b3b80d8
2003-12-23More minor non-functional changes. This now computes the exit condition, thoughChris Lattner
it doesn't do anything with it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10590 91177308-0d34-0410-b5e6-96231b3b80d8
2003-12-22Don't mind me, I'm just refactoring away. This patch makes room for LFTR, butChris Lattner
contains no functionality changes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10583 91177308-0d34-0410-b5e6-96231b3b80d8
2003-12-22Implement IndVarsSimplify/pointer-indvars.ll, transforming pointerChris Lattner
arithmetic into "array subscripts" git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10580 91177308-0d34-0410-b5e6-96231b3b80d8
2003-12-22Fix PR194Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10573 91177308-0d34-0410-b5e6-96231b3b80d8
2003-12-18Reverted back to previous revision - this was previously mergedJohn Criswell
according to the CVS log messages. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10517 91177308-0d34-0410-b5e6-96231b3b80d8
2003-12-18Merged in RELEASE_11.John Criswell
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10516 91177308-0d34-0410-b5e6-96231b3b80d8
2003-12-15Fix for PR185 & IndVarsSimplify/2003-12-15-Crash.llxChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10473 91177308-0d34-0410-b5e6-96231b3b80d8
2003-12-10Fix bug: IndVarsSimplify/2003-12-10-RemoveInstrCrash.llxChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10385 91177308-0d34-0410-b5e6-96231b3b80d8
2003-12-10Finegrainify namespacificationChris Lattner
Reorder #includes Implement: IndVarsSimplify/2003-12-10-IndVarDeadCode.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10376 91177308-0d34-0410-b5e6-96231b3b80d8
2003-11-11Put all LLVM code into the llvm namespace, as per bug 109.Brian Gaeke
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9903 91177308-0d34-0410-b5e6-96231b3b80d8
2003-10-20Added LLVM project notice to the top of every C++ source file.John Criswell
Header files will be on the way. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9298 91177308-0d34-0410-b5e6-96231b3b80d8
2003-10-12Rename loop preheaders pass to loop simplifyChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9061 91177308-0d34-0410-b5e6-96231b3b80d8
2003-10-10Fix spelling.Misha Brukman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9027 91177308-0d34-0410-b5e6-96231b3b80d8