| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
have to write arguments to the stack
llvm-svn: 22536
|
| |
|
|
| |
llvm-svn: 22535
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For the following code:
double %ext(int %A.0__, long %A.1__) {
%A_addr = alloca %typedef.DComplex ; <%typedef.DComplex*> [#uses=2]
%tmp.1 = cast %typedef.DComplex* %A_addr to int* ; <int*> [#uses=1]
store int %A.0__, int* %tmp.1
%tmp.2 = getelementptr %typedef.DComplex* %A_addr, int 0, uint 1 ; <double*> [#uses=2]
%tmp.3 = cast double* %tmp.2 to long* ; <long*> [#uses=1]
store long %A.1__, long* %tmp.3
%tmp.5 = load double* %tmp.2 ; <double> [#uses=1]
ret double %tmp.5
}
We now generate:
_ext:
.LBB_ext_0: ;
stw r3, -12(r1)
stw r4, -8(r1)
stw r5, -4(r1)
lfd f1, -8(r1)
blr
Instead of:
_ext:
.LBB_ext_0: ;
stw r3, -12(r1)
addi r2, r1, -12
stw r4, 4(r2)
stw r5, 8(r2)
lfd f1, 4(r2)
blr
This also fires hundreds of times on MultiSource.
llvm-svn: 22533
|
| |
|
|
| |
llvm-svn: 22530
|
| |
|
|
| |
llvm-svn: 22523
|
| |
|
|
|
|
| |
unnecessary SP manipulation in leaf routines that don't need it.
llvm-svn: 22522
|
| |
|
|
| |
llvm-svn: 22521
|
| |
|
|
| |
llvm-svn: 22520
|
| |
|
|
| |
llvm-svn: 22518
|
| |
|
|
| |
llvm-svn: 22517
|
| |
|
|
| |
llvm-svn: 22516
|
| |
|
|
|
|
| |
the need to build PIC.
llvm-svn: 22512
|
| |
|
|
| |
llvm-svn: 22508
|
| |
|
|
| |
llvm-svn: 22507
|
| |
|
|
|
|
| |
memory (should do the same for arbitrary zero extended small negative constants)
llvm-svn: 22505
|
| |
|
|
| |
llvm-svn: 22502
|
| |
|
|
| |
llvm-svn: 22500
|
| |
|
|
|
|
| |
happification)
llvm-svn: 22499
|
| |
|
|
| |
llvm-svn: 22498
|
| |
|
|
|
|
|
|
| |
Remove the LoadHiAddr pseudo-instruction.
Optimization of stores to and loads from statics.
Force JIT to use new non-PIC codepaths.
llvm-svn: 22494
|
| |
|
|
| |
llvm-svn: 22493
|
| |
|
|
|
|
| |
PowerPC gets subtarget support up.
llvm-svn: 22489
|
| |
|
|
|
|
| |
8-byte align doubles.
llvm-svn: 22486
|
| |
|
|
|
|
| |
automatically generated from a target description.
llvm-svn: 22470
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is the first incremental patch to implement this feature. It adds no
functionality to LLVM but setup up the information needed from targets in
order to implement the optimization correctly. Each target needs to specify
the maximum number of store operations for conversion of the llvm.memset,
llvm.memcpy, and llvm.memmove intrinsics into a sequence of store operations.
The limit needs to be chosen at the threshold of performance for such an
optimization (generally smallish). The target also needs to specify whether
the target can support unaligned stores for multi-byte store operations.
This helps ensure the optimization doesn't generate code that will trap on
an alignment errors.
More patches to follow.
llvm-svn: 22468
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the target natively supports. This eliminates some special-case code from
the x86 backend and generates better code as well.
For an i8 to f64 conversion, before & after:
_x87 before:
subl $2, %esp
movb 6(%esp), %al
movsbw %al, %ax
movw %ax, (%esp)
filds (%esp)
addl $2, %esp
ret
_x87 after:
subl $2, %esp
movsbw 6(%esp), %ax
movw %ax, (%esp)
filds (%esp)
addl $2, %esp
ret
_sse before:
subl $12, %esp
movb 16(%esp), %al
movsbl %al, %eax
cvtsi2sd %eax, %xmm0
addl $12, %esp
ret
_sse after:
subl $12, %esp
movsbl 16(%esp), %eax
cvtsi2sd %eax, %xmm0
addl $12, %esp
ret
llvm-svn: 22452
|
| |
|
|
| |
llvm-svn: 22451
|
| |
|
|
| |
llvm-svn: 22450
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
legalizer to eliminate them. With this comes the expected code quality
improvements, such as, for this:
double foo(unsigned short X) { return X; }
we now generate this:
_foo:
subl $4, %esp
movzwl 8(%esp), %eax
movl %eax, (%esp)
fildl (%esp)
addl $4, %esp
ret
instead of this:
_foo:
subl $4, %esp
movw 8(%esp), %ax
movzwl %ax, %eax ;; Load not folded into this.
movl %eax, (%esp)
fildl (%esp)
addl $4, %esp
ret
-Chris
llvm-svn: 22449
|
| |
|
|
|
|
| |
working, and Olden/power.
llvm-svn: 22441
|
| |
|
|
| |
llvm-svn: 22440
|
| |
|
|
|
|
|
|
| |
Add parenthesis around the value being negated; that way, if the value
begins with a minus sign (e.g. negative integer), we won't generate a
C predecrement operator by mistake.
llvm-svn: 22437
|
| |
|
|
|
|
| |
working before modifying the asm printer to use the subtarget info.
llvm-svn: 22408
|
| |
|
|
| |
llvm-svn: 22407
|
| |
|
|
| |
llvm-svn: 22397
|
| |
|
|
| |
llvm-svn: 22394
|
| |
|
|
|
|
| |
to the constructor.
llvm-svn: 22392
|
| |
|
|
| |
llvm-svn: 22391
|
| |
|
|
| |
llvm-svn: 22390
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Implement the X86 Subtarget.
This consolidates the checks for target triple, and setting options based
on target triple into one place. This allows us to convert the asm printer
and isel over from being littered with "forDarwin", "forCygwin", etc. into
just having the appropriate flags for each subtarget feature controlling
the code for that feature.
This patch also implements indirect external and weak references in the
X86 pattern isel, for darwin. Next up is to convert over the asm printers
to use this new interface.
llvm-svn: 22389
|
| |
|
|
| |
llvm-svn: 22388
|
| |
|
|
| |
llvm-svn: 22385
|
| |
|
|
| |
llvm-svn: 22381
|
| |
|
|
| |
llvm-svn: 22380
|
| |
|
|
|
|
|
|
| |
code emitter
after itself.
llvm-svn: 22376
|
| |
|
|
| |
llvm-svn: 22372
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This is the last MVTSDNode.
This allows us to eliminate a bunch of special case code for handling
MVTSDNodes.
Also, remove some uses of dyn_cast that should really be cast (which is
cheaper in a release build).
llvm-svn: 22368
|
| |
|
|
| |
llvm-svn: 22366
|
| |
|
|
|
|
| |
Add support for running bugpoint on mac os x for intel
llvm-svn: 22351
|
| |
|
|
| |
llvm-svn: 22346
|