- Apr 22, 2004
-
-
Chris Lattner authored
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. llvm-svn: 13101
-
- Apr 21, 2004
-
-
Chris Lattner authored
Eventually it would be nice if CallGraph maintained an ilist of CallGraphNode's instead of a vector of pointers to them, but today is not that day. llvm-svn: 13100
-
Misha Brukman authored
llvm-svn: 13096
-
Brian Gaeke authored
of IntCC, FloatCC, and Special types. Make SparcV9RegInfo::getRegClassIDOfRegType() return the right answer if you ask for the class corresponding to SpecialRegType. llvm-svn: 13095
-
Alkis Evlogimenos authored
llvm-svn: 13091
-
Chris Lattner authored
llvm-svn: 13089
-
Chris Lattner authored
is done, which avoids invalidating iterators in the SCC traversal routines llvm-svn: 13088
-
- Apr 20, 2004
-
-
Chris Lattner authored
llvm-svn: 13087
-
Chris Lattner authored
llvm-svn: 13084
-
Chris Lattner authored
llvm-svn: 13081
-
Chris Lattner authored
llvm-svn: 13080
-
Brian Gaeke authored
llvm-svn: 13078
-
Chris Lattner authored
llvm-svn: 13076
-
- Apr 19, 2004
-
-
Brian Gaeke authored
llvm-svn: 13073
-
Brian Gaeke authored
llvm-svn: 13071
-
Brian Gaeke authored
the name of %fsr (as the comment in SparcV9RegClassInfo.h used to suggest) you would walk off the end of the FloatCCRegName array. llvm-svn: 13070
-
Brian Gaeke authored
Remove the extra %fsr register from SparcV9FloatCCRegClass. llvm-svn: 13069
-
Chris Lattner authored
but it's a start, and seems to do it's basic job. llvm-svn: 13068
-
Chris Lattner authored
llvm-svn: 13064
-
Chris Lattner authored
llvm-svn: 13058
-
Chris Lattner authored
llvm-svn: 13057
-
Chris Lattner authored
llvm-svn: 13051
-
Chris Lattner authored
llvm-svn: 13050
-
Chris Lattner authored
llvm-svn: 13048
-
Chris Lattner authored
llvm-svn: 13047
-
Chris Lattner authored
llvm-svn: 13046
-
Chris Lattner authored
structure to being dynamically computed on demand. This makes updating loop information MUCH easier. llvm-svn: 13045
-
- Apr 18, 2004
-
-
Chris Lattner authored
llvm-svn: 13040
-
Chris Lattner authored
that the exit block of the loop becomes the new entry block of the function. This was causing a verifier assertion on 252.eon. llvm-svn: 13039
-
Chris Lattner authored
using instructions inside of the loop. This should fix the MishaTest failure from last night. llvm-svn: 13038
-
Chris Lattner authored
llvm-svn: 13036
-
Chris Lattner authored
block. The primary motivation for doing this is that we can now unroll nested loops. This makes a pretty big difference in some cases. For example, in 183.equake, we are now beating the native compiler with the CBE, and we are a lot closer with LLC. I'm now going to play around a bit with the unroll factor and see what effect it really has. llvm-svn: 13034
-
Chris Lattner authored
While we're at it, add support for updating loop information correctly. llvm-svn: 13033
-
Chris Lattner authored
have a canonical indvar llvm-svn: 13032
-
Chris Lattner authored
limited. Even in it's extremely simple state (it can only *fully* unroll single basic block loops that execute a constant number of times), it already helps improve performance a LOT on some benchmarks, particularly with the native code generators. llvm-svn: 13028
-
Chris Lattner authored
llvm-svn: 13025
-
Chris Lattner authored
llvm-svn: 13023
-
Chris Lattner authored
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
-
- Apr 17, 2004
-
-
Chris Lattner authored
exit values. llvm-svn: 13018
-
Chris Lattner authored
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
-