summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/ScalarEvolution.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Signed shr by a constant is not the same as sdiv by 2^kChris Lattner2006-04-041-9/+0
| | | | llvm-svn: 27395
* Fix Transforms/IndVarsSimplify/2006-03-31-NegativeStride.ll andChris Lattner2006-04-011-27/+27
| | | | | | | PR726 by performing consistent signed division, not consistent unsigned division when evaluating scev's. Do not touch udivs. llvm-svn: 27326
* Add explicit iostream #includesChris Lattner2006-01-221-0/+1
| | | | llvm-svn: 25513
* Move some constant folding code shared by Analysis and Transform passesJohn Criswell2005-10-271-1/+1
| | | | | | | | into the LLVMAnalysis library. This allows LLVMTranform and LLVMTransformUtils to be archives and linked with LLVMAnalysis.a, which provides any missing definitions. llvm-svn: 24036
* wrap a long lineChris Lattner2005-09-281-1/+2
| | | | llvm-svn: 23507
* Fix Transforms/LoopStrengthReduce/2005-08-15-AddRecIV.llChris Lattner2005-08-161-2/+3
| | | | llvm-svn: 22797
* Teach LLVM to know how many times a loop executes when constructed withChris Lattner2005-08-151-2/+110
| | | | | | a < expression, e.g.: for (i = m; i < n; ++i) llvm-svn: 22793
* Fix an obvious oopsChris Lattner2005-08-101-1/+1
| | | | llvm-svn: 22742
* implement two helper methodsChris Lattner2005-08-091-0/+28
| | | | llvm-svn: 22736
* Remove trailing whitespaceMisha Brukman2005-04-211-46/+46
| | | | llvm-svn: 21416
* Don't make this require loopsimplify. It works BETTER with loop simplifyChris Lattner2005-04-061-1/+0
| | | | | | but should not require it. llvm-svn: 21123
* Export two methods for getting -X and A-B.Chris Lattner2005-03-091-10/+11
| | | | llvm-svn: 20527
* DCE a dead functionChris Lattner2005-02-261-19/+0
| | | | llvm-svn: 20339
* 1 + 100 + 51 == 152, not 52.Chris Lattner2005-02-261-0/+2
| | | | | | | | If we fold three constants together (c1+c2+c3), make sure to keep LHSC updated, instead of reusing (in this case), the 1 instead of the partial sum. llvm-svn: 20337
* Scary typo that fixes ↵Chris Lattner2005-02-171-1/+1
| | | | | | | | Regression/Transforms/IndVarsSimplify/2005-02-17-TruncateExprCrash.ll and PR515. llvm-svn: 20224
* Correct the recursive PHI node handling routines in a way that CANNOT induceChris Lattner2005-02-131-27/+83
| | | | | | | | | | | | | | | infinite loops (using the new replaceSymbolicValuesWithConcrete method). This patch reverts this patch: http://mail.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20050131/023830.html ... which was an attempted fix for this problem. Unfortunately, that patch caused test/Regression/Transforms/IndVarsSimplify/exit_value_tests.llx to fail and slightly castrated the entire analysis. This patch fixes it right. This patch is dedicated to jeffc, for making me deal with this. :) llvm-svn: 20146
* Fix a problem where we could infinitely recurse on phi nodes.Chris Lattner2005-02-011-1/+1
| | | | llvm-svn: 19955
* For PR387:\Reid Spencer2004-12-071-1/+1
| | | | | | | Make only one print method to avoid overloaded virtual warnings when \ compiled with -Woverloaded-virtual llvm-svn: 18589
* This patch prevents an infinite recursion while compiling 103.su2cor.Chris Lattner2004-12-041-3/+3
| | | | | | | All SPEC CFP 95 programs now work, though the JIT isn't loading -lf2c right so they aren't testing correctly. llvm-svn: 18499
* Patch to support MSVC, contributed by Morten OfstadChris Lattner2004-10-251-1/+1
| | | | llvm-svn: 17214
* This nutty patch has been in my tree since before 1.3 went out, and it needsChris Lattner2004-10-121-20/+147
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | to go in. This patch allows us to compute the trip count of loops controlled by values loaded from constant arrays. The cannonnical example of this is strlen when passed a constant argument: for (int i = 0; "constantstring"[i]; ++i) ; return i; In this case, it will compute that the loop executes 14 times, which means that the exit value of i is 14. Because of this, the loop gets DCE'd and we are happy. This also applies to anything that does similar things, e.g. loops like this: const float Array[] = { 0.1, 2.1, 3.2, 23.21 }; for (int i = 0; Array[i] < 20; ++i) and is actually fairly general. The problem with this is that it almost never triggers. The reason is that we run indvars and the loop optimizer only at compile time, which is before things like strlen and strcpy have been inlined into the program from libc. Because of this, it almost never is used (it triggers twice in specint2k). I'm committing it because it DOES work, may be useful in the future, and doesn't slow us down at all. If/when we start running the loop optimizer at link-time (-O4?) this will be very nice indeed :) llvm-svn: 16926
* Fix SingleSource/Benchmarks/McGill/chompChris Lattner2004-10-111-0/+1
| | | | llvm-svn: 16912
* Fixes to make LLVM compile with vc7.1.Alkis Evlogimenos2004-09-031-0/+1
| | | | | | Patch contributed by Paolo Invernizzi! llvm-svn: 16152
* Changes For Bug 352Reid Spencer2004-09-011-2/+2
| | | | | | | | 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/. llvm-svn: 16137
* bug 122:Reid Spencer2004-07-181-6/+4
| | | | | | | | - Replace ConstantPointerRef usage with GlobalValue usage - Minimize redundant isa<GlobalValue> usage - Correct isa<Constant> for GlobalValue subclass llvm-svn: 14942
* Remove distasteful method which is really part of the indvars passChris Lattner2004-06-241-13/+0
| | | | llvm-svn: 14359
* REALLY fix PR378: crash in scalar evolution analysisChris Lattner2004-06-201-0/+1
| | | | llvm-svn: 14275
* Fix a bug in my change last night that caused a few test failures.Chris Lattner2004-06-201-1/+1
| | | | llvm-svn: 14270
* Do not sort SCEV objects by address: instead sort by complexity and groupChris Lattner2004-06-201-18/+60
| | | | | | | by address. This prevents the resultant SCEV objects from depending on where in memory other scev objects happen to live. llvm-svn: 14263
* Changes to fix up the inst_iterator to pass to boost iterator checks. ThisChris Lattner2004-04-271-6/+6
| | | | | | patch was graciously contributed by Vladimir Prus. llvm-svn: 13185
* Eliminate all of the SCEV Expansion code which is really part of theChris Lattner2004-04-231-213/+9
| | | | | | IndVars pass, not part of SCEV *analysis*. llvm-svn: 13134
* It's not just a printer, it's actually an analysis tooChris Lattner2004-04-191-1/+1
| | | | llvm-svn: 13064
* Change the ExitBlocks list from being explicitly contained in the LoopChris Lattner2004-04-181-3/+8
| | | | | | | structure to being dynamically computed on demand. This makes updating loop information MUCH easier. llvm-svn: 13045
* Add the ability to compute exit values for complex loop using unanalyzableChris Lattner2004-04-171-52/+189
| | | | | | | | | | | | | | | | | | | | | | | | | | | operations. This allows us to compile this testcase: int main() { int h = 1; do h = 3 * h + 1; while (h <= 256); printf("%d\n", h); return 0; } into this: int %main() { entry: call void %__main( ) %tmp.6 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([4 x sbyte]* %.str_1, long 0, long 0), int 364 ) ; <int> [#uses=0] ret int 0 } This testcase was taken directly from 256.bzip2, believe it or not. This code is not as general as I would like. Next up is to refactor it a bit to handle more cases. llvm-svn: 13019
* Add the ability to compute trip counts that are only controlled by constantsChris Lattner2004-04-171-5/+174
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | even if the loop is using expressions that we can't compute as a closed-form. This allows us to calculate that this function always returns 55: int test() { double X; int Count = 0; for (X = 100; X > 1; X = sqrt(X), ++Count) /*empty*/; return Count; } And allows us to compute trip counts for loops like: int h = 1; do h = 3 * h + 1; while (h <= 256); (which occurs in bzip2), and for this function, which occurs after inlining and other optimizations: int popcount() { int x = 666; int result = 0; while (x != 0) { result = result + (x & 0x1); x = x >> 1; } return result; } We still cannot compute the exit values of result or h in the two loops above, which means we cannot delete the loop, but we are getting closer. Being able to compute a constant trip count for these two loops will allow us to unroll them completely though. llvm-svn: 13017
* Include <cmath> for compatibility with gcc 3.0.x (the system compiler onBrian Gaeke2004-04-161-0/+1
| | | | | | Debian.) llvm-svn: 12986
* Factor a bunch of classes out into a public headerChris Lattner2004-04-151-553/+142
| | | | llvm-svn: 12958
* Unbreak the buildChris Lattner2004-04-151-0/+1
| | | | llvm-svn: 12956
* Implement a FIXME: if we're going to insert a cast, we might as well onlyChris Lattner2004-04-141-1/+15
| | | | | | insert it once! llvm-svn: 12955
* This is a trivial tweak to the addrec insertion code: insert the incrementChris Lattner2004-04-141-7/+12
| | | | | | | | | | | at the bottom of the loop instead of the top. This reduces the number of overlapping live ranges a lot, for example, eliminating a spill in an important loop in 183.equake with linear scan. I still need to make the exit comparison of the loop use the post-incremented version of this variable, but this is an easy first step. llvm-svn: 12952
* Fix a bug Brian found.Chris Lattner2004-04-071-2/+3
| | | | llvm-svn: 12754
* Sparc don't got not "sqrtl", bum bum bumChris Lattner2004-04-051-1/+1
| | | | llvm-svn: 12670
* Kill warnings during an optimized compile where assert() disappears.Misha Brukman2004-04-051-0/+2
| | | | llvm-svn: 12669
* Fix PR312 and IndVarsSimplify/2004-04-05-InvokeCastCrash.llxChris Lattner2004-04-051-0/+2
| | | | llvm-svn: 12668
* Add a break in the default caseChris Lattner2004-04-031-0/+1
| | | | llvm-svn: 12639
* Comment out debugging printoutsChris Lattner2004-04-021-1/+5
| | | | llvm-svn: 12623
* Add a new analysisChris Lattner2004-04-021-0/+2482
llvm-svn: 12619
OpenPOWER on IntegriCloud