| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 25025
|
|
|
|
| |
llvm-svn: 25024
|
|
|
|
| |
llvm-svn: 25023
|
|
|
|
| |
llvm-svn: 25022
|
|
|
|
| |
llvm-svn: 25021
|
|
|
|
| |
llvm-svn: 25018
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently tblgen cannot tell which operands in the operand list are results so
it assumes the first one is a result. This is bad. Ideally we would fix this
by separating results from inputs, e.g. (res R32:$dst),
(ops R32:$src1, R32:$src2). But that's a more distruptive change. Adding
'let noResults = 1' is the workaround to tell tblgen that the instruction does
not produces a result. It works for now since tblgen does not support
instructions which produce multiple results.
llvm-svn: 25017
|
|
|
|
| |
llvm-svn: 25015
|
|
|
|
|
|
|
|
| |
the bzip2 homepage, only ancient (gcc 2.7.x ?) versions of GCC
require this? It certainly isn't needed for the current bzip2
sources.
llvm-svn: 25013
|
|
|
|
|
|
|
| |
to try building LLVM on HP-UX! (the Right Way seems to be to tear out
the ancient STL that HP ship and use http://incubator.apache.org/stdcxx/ )
llvm-svn: 25012
|
|
|
|
| |
llvm-svn: 25011
|
|
|
|
| |
llvm-svn: 25010
|
|
|
|
| |
llvm-svn: 25009
|
|
|
|
| |
llvm-svn: 25008
|
|
|
|
| |
llvm-svn: 25007
|
|
|
|
|
|
| |
Alpha needs to custom lower *DIV and *REM
llvm-svn: 25006
|
|
|
|
| |
llvm-svn: 25005
|
|
|
|
| |
llvm-svn: 25004
|
|
|
|
|
|
|
|
|
| |
are for function prologue.
TODO: move external symbols over to using RelLit.
: have a pattern that matches constpool|globaladdr
: have a pattern that matches (add x imm) -> x, imm or (...) -> ..., 0
llvm-svn: 25003
|
|
|
|
|
|
| |
supported. This almost completes memory operations.
llvm-svn: 25002
|
|
|
|
|
|
|
|
| |
Lower GOT relative addresses to Lo and HI.
Update both ISels to select them when they can.
Saves instructions here and there.
llvm-svn: 25001
|
|
|
|
| |
llvm-svn: 25000
|
|
|
|
|
|
| |
constant offsets from statics into the address arithmetic.
llvm-svn: 24999
|
|
|
|
|
|
|
|
| |
* Added a pseudo instruction (for each target) that represent "return void".
This is a workaround for lack of optional flag operand (return void is not
lowered so it does not have a flag operand.)
llvm-svn: 24997
|
|
|
|
| |
llvm-svn: 24995
|
|
|
|
| |
llvm-svn: 24992
|
|
|
|
| |
llvm-svn: 24991
|
|
|
|
| |
llvm-svn: 24990
|
|
|
|
| |
llvm-svn: 24989
|
|
|
|
|
|
| |
currently used.
llvm-svn: 24988
|
|
|
|
| |
llvm-svn: 24987
|
|
|
|
| |
llvm-svn: 24986
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
void test3(va_list Y);
void test2(int F, ...) {
va_list X;
va_start(X, F);
test3(X);
}
into this:
test2:
save -104, %o6, %o6
st %i5, [%i6+88]
st %i4, [%i6+84]
st %i3, [%i6+80]
st %i2, [%i6+76]
st %i1, [%i6+72]
add %i6, 72, %o0
st %o0, [%i6+-4]
call test3
nop
restore %g0, %g0, %g0
retl
nop
The simple isel emits:
test2:
save -96, %o6, %o6
st %i0, [%i6+68]
st %i1, [%i6+72]
st %i2, [%i6+76]
st %i3, [%i6+80]
st %i4, [%i6+84]
st %i5, [%i6+88]
or %g0, 1, %l0
or %g0, 4, %l1
umul %l0, %l1, %l0
add %l0, 7, %l0
and %l0, -8, %l0
sub %o6, %l0, %o6
add %o6, 96, %l0
add %i6, 72, %l1
st %l1, [%l0]
ld [%l0], %o0
call test3
nop
restore %g0, %g0, %g0
retl
nop
llvm-svn: 24985
|
|
|
|
| |
llvm-svn: 24984
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
void bar(double Y, double *X) {
*X = Y;
}
to this:
bar:
save -96, %o6, %o6
st %i1, [%i2+4]
st %i0, [%i2]
restore %g0, %g0, %g0
retl
nop
instead of this:
bar:
save -104, %o6, %o6
st %i1, [%i6+-4]
st %i0, [%i6+-8]
ldd [%i6+-8], %f0
std %f0, [%i2]
restore %g0, %g0, %g0
retl
nop
on sparcv8.
llvm-svn: 24983
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This allows us to compile this:
void foo(double);
void bar(double *X) { foo(*X); }
To this:
bar:
save -96, %o6, %o6
ld [%i0+4], %o1
ld [%i0], %o0
call foo
nop
restore %g0, %g0, %g0
retl
nop
instead of this:
bar:
save -104, %o6, %o6
ldd [%i0], %f0
std %f0, [%i6+-8]
ld [%i6+-4], %o1
ld [%i6+-8], %o0
call foo
nop
restore %g0, %g0, %g0
retl
nop
on SparcV8.
llvm-svn: 24982
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
void foo(double);
void bar(double X) { foo(X); }
to this:
bar:
save -96, %o6, %o6
or %g0, %i0, %o0
or %g0, %i1, %o1
call foo
nop
restore %g0, %g0, %g0
retl
nop
instead of this:
bar:
save -112, %o6, %o6
st %i1, [%i6+-4]
st %i0, [%i6+-8]
ldd [%i6+-8], %f0
std %f0, [%i6+-16]
ld [%i6+-12], %o1
ld [%i6+-16], %o0
call foo
nop
restore %g0, %g0, %g0
retl
nop
on V8.
llvm-svn: 24981
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
conversions. This allows V8 to compiles this:
void %test() {
call float %test2( float 1.000000e+00, float 2.000000e+00, double 3.000000e+00, double* null )
ret void
}
into:
test:
save -96, %o6, %o6
sethi 0, %o3
sethi 1049088, %o2
sethi 1048576, %o1
sethi 1040384, %o0
or %g0, %o3, %o4
call test2
nop
restore %g0, %g0, %g0
retl
nop
instead of:
test:
save -112, %o6, %o6
sethi 0, %o4
sethi 1049088, %l0
st %o4, [%i6+-12]
st %l0, [%i6+-16]
ld [%i6+-12], %o3
ld [%i6+-16], %o2
sethi 1048576, %o1
sethi 1040384, %o0
call test2
nop
restore %g0, %g0, %g0
retl
nop
llvm-svn: 24980
|
|
|
|
| |
llvm-svn: 24979
|
|
|
|
| |
llvm-svn: 24978
|
|
|
|
|
|
| |
to represent the int part (because it's always 32-bits)
llvm-svn: 24976
|
|
|
|
| |
llvm-svn: 24975
|
|
|
|
| |
llvm-svn: 24974
|
|
|
|
| |
llvm-svn: 24973
|
|
|
|
| |
llvm-svn: 24972
|
|
|
|
| |
llvm-svn: 24970
|
|
|
|
| |
llvm-svn: 24968
|
|
|
|
| |
llvm-svn: 24967
|
|
|
|
| |
llvm-svn: 24965
|
|
|
|
| |
llvm-svn: 24964
|