| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
because 1) the first instruction might not be a call site, and
2) CS and SF.Caller were not getting set to point to the new call site
anyway (resulting in a crash on e.g. call %llvm.memset).
llvm-svn: 13122
|
| |
|
|
| |
llvm-svn: 13120
|
| |
|
|
|
|
| |
Use emitWordAt() to emit forward-branch fixups.
llvm-svn: 13119
|
| |
|
|
| |
llvm-svn: 13118
|
| |
|
|
|
|
|
| |
am not so sure about the file printer emitter, but the debug emitter change
should be harmless.)
llvm-svn: 13117
|
| |
|
|
|
|
| |
the function instead of isolating it. This also means the condition is reversed.
llvm-svn: 13112
|
| |
|
|
|
|
|
| |
the Module. The default behavior keeps functionality as before: the chosen
function is the one that remains.
llvm-svn: 13111
|
| |
|
|
| |
llvm-svn: 13108
|
| |
|
|
| |
llvm-svn: 13106
|
| |
|
|
|
|
|
|
| |
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. :)
llvm-svn: 13103
|
| |
|
|
|
|
|
|
| |
over its USES. If it's dead it doesn't have any uses! :)
Thanks to the fabulous and mysterious Bill Wendling for pointing this out. :)
llvm-svn: 13102
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
| |
ilists :)
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
|
| |
|
|
| |
llvm-svn: 13096
|
| |
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 13091
|
| |
|
|
| |
llvm-svn: 13089
|
| |
|
|
|
|
| |
is done, which avoids invalidating iterators in the SCC traversal routines
llvm-svn: 13088
|
| |
|
|
| |
llvm-svn: 13087
|
| |
|
|
| |
llvm-svn: 13084
|
| |
|
|
| |
llvm-svn: 13081
|
| |
|
|
| |
llvm-svn: 13080
|
| |
|
|
| |
llvm-svn: 13078
|
| |
|
|
| |
llvm-svn: 13076
|
| |
|
|
| |
llvm-svn: 13073
|
| |
|
|
| |
llvm-svn: 13071
|
| |
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
Remove the extra %fsr register from SparcV9FloatCCRegClass.
llvm-svn: 13069
|
| |
|
|
|
|
| |
but it's a start, and seems to do it's basic job.
llvm-svn: 13068
|
| |
|
|
| |
llvm-svn: 13064
|
| |
|
|
| |
llvm-svn: 13058
|
| |
|
|
| |
llvm-svn: 13057
|
| |
|
|
| |
llvm-svn: 13051
|
| |
|
|
| |
llvm-svn: 13050
|
| |
|
|
| |
llvm-svn: 13048
|
| |
|
|
| |
llvm-svn: 13047
|
| |
|
|
|
|
| |
on demand.
llvm-svn: 13046
|
| |
|
|
|
|
|
| |
structure to being dynamically computed on demand. This makes updating
loop information MUCH easier.
llvm-svn: 13045
|
| |
|
|
| |
llvm-svn: 13040
|
| |
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
| |
using instructions inside of the loop. This should fix the MishaTest failure
from last night.
llvm-svn: 13038
|
| |
|
|
| |
llvm-svn: 13036
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
While we're at it, add support for updating loop information correctly.
llvm-svn: 13033
|
| |
|
|
|
|
| |
have a canonical indvar
llvm-svn: 13032
|
| |
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
of hardcoded
llvm-svn: 13025
|
| |
|
|
| |
llvm-svn: 13023
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
exit values.
llvm-svn: 13018
|