| Commit message (Collapse) | Author | Age | Files | Lines | 
| | 
| 
| 
| 
| 
|  | 
nodes so that backends don't have to.
llvm-svn: 22999
 | 
| | 
| 
| 
| 
| 
|  | 
Call stil not supported yet
llvm-svn: 22998
 | 
| | 
| 
| 
| 
| 
|  | 
the target isel crashes due to unimplemented features like calls :)
llvm-svn: 22997
 | 
| | 
| 
| 
|  | 
llvm-svn: 22995
 | 
| | 
| 
| 
|  | 
llvm-svn: 22994
 | 
| | 
| 
| 
|  | 
llvm-svn: 22992
 | 
| | 
| 
| 
|  | 
llvm-svn: 22991
 | 
| | 
| 
| 
|  | 
llvm-svn: 22989
 | 
| | 
| 
| 
|  | 
llvm-svn: 22988
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Use this information to avoid doing expensive interval intersections for
registers that could not possible be interesting.  This speeds up linscan
on ia64 compiling kc++ in release mode from taking 7.82s to 4.8s(!), total
itanium llc time on this program is 27.3s now.  This marginally speeds up
PPC and X86, but they appear to be limited by other parts of linscan, not
this code.
On this program, on itanium, live intervals now takes 41% of llc time.
llvm-svn: 22986
 | 
| | 
| 
| 
| 
| 
|  | 
x%y for 'rem' on fp values.
llvm-svn: 22984
 | 
| | 
| 
| 
|  | 
llvm-svn: 22982
 | 
| | 
| 
| 
|  | 
llvm-svn: 22981
 | 
| | 
| 
| 
|  | 
llvm-svn: 22979
 | 
| | 
| 
| 
| 
| 
| 
|  | 
either seteq X, 0 or srl (ctlz X), size(X-1), depending on what's legal
for the target.
llvm-svn: 22978
 | 
| | 
| 
| 
|  | 
llvm-svn: 22977
 | 
| | 
| 
| 
|  | 
llvm-svn: 22976
 | 
| | 
| 
| 
|  | 
llvm-svn: 22975
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
LowercaseString
in the asmprinter.  This changes the .td files to use lower case register names,
avoiding the need to do this call.  This speeds up the asmprinter from 1.52s
to 1.06s on kc++ in a release build.
llvm-svn: 22974
 | 
| | 
| 
| 
| 
| 
|  | 
It used to crash on any function that took float arguments.
llvm-svn: 22973
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
number of regs (e.g. most riscs), many functions won't need to use callee
clobbered registers.  Do a speculative check to see if we can get a free
register without processing the fixed list (which has all of these).  This
saves a lot of time on machines with lots of callee clobbered regs (e.g.
ppc and itanium, also x86).
This reduces ppc llc compile time from 184s -> 172s on kc++.  This is probably
worth FAR FAR more on itanium though.
llvm-svn: 22972
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
we spill out of the fast path.  The scan of active_ and the calls to
updateSpillWeights don't need to happen unless a spill occurs.  This reduces
debug llc time of kc++ with ppc from 187.3s to 183.2s.
llvm-svn: 22971
 | 
| | 
| 
| 
|  | 
llvm-svn: 22970
 | 
| | 
| 
| 
| 
| 
|  | 
promoted to the right type.  This fixes: IA64/2005-08-22-LegalizerCrash.ll
llvm-svn: 22969
 | 
| | 
| 
| 
| 
| 
|  | 
add some comments.  This loop really needs to be reevaluated!
llvm-svn: 22966
 | 
| | 
| 
| 
|  | 
llvm-svn: 22963
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
allowing us to compile this:
float %test2(float* %P) {
        %Q = load float* %P
        %R = add float %Q, 10.1
        ret float %R
}
to this:
_test2:
        lfs r2, 0(r3)
        lis r3, ha16(.CPI_test2_0)
        lfs r3, lo16(.CPI_test2_0)(r3)
        fadds f1, r2, r3
        blr
llvm-svn: 22962
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
float %test2(float* %P) {
        %Q = load float* %P
        %R = add float %Q, %Q
        ret float %R
}
By returning the right result.
llvm-svn: 22961
 | 
| | 
| 
| 
| 
| 
|  | 
that is conditionally executed
llvm-svn: 22960
 | 
| | 
| 
| 
|  | 
llvm-svn: 22959
 | 
| | 
| 
| 
|  | 
llvm-svn: 22957
 | 
| | 
| 
| 
|  | 
llvm-svn: 22956
 | 
| | 
| 
| 
|  | 
llvm-svn: 22955
 | 
| | 
| 
| 
|  | 
llvm-svn: 22953
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
simplifies BRTWOWAY into BR if one of the results is a fall-through.
Unless I'm missing something, there is no reason to duplicate this
in the target-specific code.
llvm-svn: 22952
 | 
| | 
| 
| 
|  | 
llvm-svn: 22951
 | 
| | 
| 
| 
|  | 
llvm-svn: 22949
 | 
| | 
| 
| 
|  | 
llvm-svn: 22948
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
the old condition to a one bit value.  The incoming value must have been
promoted, and the top bits are undefined.  This causes us to generate:
_test:
        rlwinm r2, r3, 0, 31, 31
        li r3, 17
        cmpwi cr0, r2, 0
        bne .LBB_test_2 ;
.LBB_test_1:    ;
        li r3, 1
.LBB_test_2:    ;
        blr
instead of:
_test:
        rlwinm r2, r3, 0, 31, 31
        li r2, 17
        cmpwi cr0, r3, 0
        bne .LBB_test_2 ;
.LBB_test_1:    ;
        li r2, 1
.LBB_test_2:    ;
        or r3, r2, r2
        blr
for:
int %test(bool %c) {
        %retval = select bool %c, int 17, int 1
        ret int %retval
}
llvm-svn: 22947
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
it in the block.  This codegens:
int %test(bool %c) {
        %retval = select bool %c, int 17, int 1
        ret int %retval
}
as:
_test:
        rlwinm r2, r3, 0, 31, 31
        li r2, 17
        cmpwi cr0, r3, 0
        bne .LBB_test_2 ;
.LBB_test_1:    ;
        li r2, 1
.LBB_test_2:    ;
        or r3, r2, r2
        blr
instead of:
_test:
        rlwinm r2, r3, 0, 31, 31
        li r2, 17
        li r4, 1
        cmpwi cr0, r3, 0
        bne .LBB_test_2 ;
.LBB_test_1:    ;
        or r2, r4, r4
.LBB_test_2:    ;
        or r3, r2, r2
        blr
... which is one fewer instruction.  The savings are more significant for
global address and constantfp nodes.
llvm-svn: 22946
 | 
| | 
| 
| 
|  | 
llvm-svn: 22944
 | 
| | 
| 
| 
|  | 
llvm-svn: 22943
 | 
| | 
| 
| 
|  | 
llvm-svn: 22942
 | 
| | 
| 
| 
| 
| 
|  | 
This REALLY should be lowered by the legalizer!
llvm-svn: 22941
 | 
| | 
| 
| 
|  | 
llvm-svn: 22940
 | 
| | 
| 
| 
|  | 
llvm-svn: 22938
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
us to compile stuff like this:
double %test(double %A, double %B, double %C, double %E) {
        %F = mul double %A, %A
        %G = add double %F, %B
        %H = sub double -0.0, %G
        %I = mul double %H, %C
        %J = add double %I, %E
        ret double %J
}
to:
_test:
        fnmadd f0, f1, f1, f2
        fmadd f1, f0, f3, f4
        blr
woot!
llvm-svn: 22937
 | 
| | 
| 
| 
|  | 
llvm-svn: 22936
 | 
| | 
| 
| 
|  | 
llvm-svn: 22935
 | 
| | 
| 
| 
|  | 
llvm-svn: 22934
 |