| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 23069
|
| |
|
|
| |
llvm-svn: 23058
|
| |
|
|
| |
llvm-svn: 23055
|
| |
|
|
| |
llvm-svn: 23054
|
| |
|
|
| |
llvm-svn: 23053
|
| |
|
|
| |
llvm-svn: 23050
|
| |
|
|
| |
llvm-svn: 23041
|
| |
|
|
| |
llvm-svn: 23035
|
| |
|
|
| |
llvm-svn: 23027
|
| |
|
|
|
|
| |
Add some foldings to hopefully help the illegal setcc issue, and move some code around.
llvm-svn: 23025
|
| |
|
|
| |
llvm-svn: 23022
|
| |
|
|
| |
llvm-svn: 23021
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
select. Also teach it that the bit count instructions can only set the low bits
of the result, depending on the size of the input.
This allows us to compile this:
int %eq0(int %a) {
%tmp.1 = seteq int %a, 0 ; <bool> [#uses=1]
%tmp.2 = cast bool %tmp.1 to int ; <int> [#uses=1]
ret int %tmp.2
}
To this:
_eq0:
cntlzw r2, r3
srwi r3, r2, 5
blr
instead of this:
_eq0:
cntlzw r2, r3
rlwinm r3, r2, 27, 31, 31
blr
when setcc is marked illegal on ppc (which restores parity to non-illegal
setcc). Thanks to Nate for pointing this out.
llvm-svn: 23013
|
| |
|
|
| |
llvm-svn: 23012
|
| |
|
|
|
|
| |
nodes so that backends don't have to.
llvm-svn: 22999
|
| |
|
|
|
|
| |
the target isel crashes due to unimplemented features like calls :)
llvm-svn: 22997
|
| |
|
|
| |
llvm-svn: 22995
|
| |
|
|
| |
llvm-svn: 22994
|
| |
|
|
| |
llvm-svn: 22992
|
| |
|
|
| |
llvm-svn: 22989
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 22957
|
| |
|
|
| |
llvm-svn: 22956
|
| |
|
|
| |
llvm-svn: 22955
|
| |
|
|
| |
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
|
| |
|
|
| |
llvm-svn: 22943
|
| |
|
|
| |
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: 22934
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This gets us this for the previous testcase:
_test:
lis r2, 0
ori r3, r2, 65535
blr
Note that we actually write to r3 (the return reg) correctly now :)
llvm-svn: 22933
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
temporary registers for things that define a register. This allows dag->dag
isel to compile this:
int %test() { ret int 65535 }
into:
_test:
lis r2, 0
ori r2, r2, 65535
blr
Next up, getting CopyFromReg to work, allowing arguments and cross-bb values.
llvm-svn: 22932
|
| |
|
|
| |
llvm-svn: 22907
|
| |
|
|
| |
llvm-svn: 22902
|
| |
|
|
| |
llvm-svn: 22896
|
| |
|
|
|
|
| |
scheduler.
llvm-svn: 22878
|
| |
|
|
|
|
|
|
|
|
|
|
| |
codegen:
_empty:
.LBB_empty_0: ;
blr
but can't do anything more (yet). :)
llvm-svn: 22876
|
| |
|
|
| |
llvm-svn: 22868
|
| |
|
|
| |
llvm-svn: 22863
|
| |
|
|
|
|
| |
rlwinm.
llvm-svn: 22856
|