| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
| |
- "Redefinition of I" (iterator masks previous definition)
- include missing header file
Patch by Argiris Kirtzidis!
llvm-svn: 48115
|
| |
|
|
| |
llvm-svn: 48112
|
| |
|
|
| |
llvm-svn: 48111
|
| |
|
|
| |
llvm-svn: 48109
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
they are produced by calls (which are known exact) and by cross block copies
which are known to be produced by extends.
This improves:
define double @test2() {
%tmp85 = call double asm sideeffect "fld0", "={st(0)}"()
ret double %tmp85
}
from:
_test2:
subl $20, %esp
# InlineAsm Start
fld0
# InlineAsm End
fstpl 8(%esp)
movsd 8(%esp), %xmm0
movsd %xmm0, (%esp)
fldl (%esp)
addl $20, %esp
#FP_REG_KILL
ret
to:
_test2:
# InlineAsm Start
fld0
# InlineAsm End
#FP_REG_KILL
ret
by avoiding a f64 <-> f80 trip
llvm-svn: 48108
|
| |
|
|
|
|
|
|
|
|
|
|
| |
an RFP register class.
Teach ScheduleDAG how to handle CopyToReg with different src/dst
reg classes.
This allows us to compile trivial inline asms that expect stuff
on the top of x87-fp stack.
llvm-svn: 48107
|
| |
|
|
| |
llvm-svn: 48106
|
| |
|
|
|
|
|
|
| |
in different register classes, e.g. copy of ST(0) to RFP*. This gets
some really trivial inline asm working that plops things on the top of
stack (PR879)
llvm-svn: 48105
|
| |
|
|
|
|
| |
RST -> RFP{32/64/80}. We only handle ST(0) for now.
llvm-svn: 48104
|
| |
|
|
| |
llvm-svn: 48101
|
| |
|
|
| |
llvm-svn: 48100
|
| |
|
|
|
|
|
| |
Secondly, we have to check whether the branch is actually pointing to the block
with the unwind in it. We could have gotten here because of the unwind_to alone.
llvm-svn: 48099
|
| |
|
|
|
|
| |
codegen yet because these can't be spilled (they don't exist until after RA).
llvm-svn: 48098
|
| |
|
|
| |
llvm-svn: 48097
|
| |
|
|
|
|
| |
at all.
llvm-svn: 48096
|
| |
|
|
| |
llvm-svn: 48094
|
| |
|
|
|
|
|
| |
isel'ing value preserving FP roundings from one fp stack reg to another
into a noop, instead of stack traffic.
llvm-svn: 48093
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
into a vector of zeros or undef, and when the top part is obviously
zero, we can just use movd + shuffle. This allows us to compile
vec_set-B.ll into:
_test3:
movl $1234567, %eax
andl 4(%esp), %eax
movd %eax, %xmm0
ret
instead of:
_test3:
subl $28, %esp
movl $1234567, %eax
andl 32(%esp), %eax
movl %eax, (%esp)
movl $0, 4(%esp)
movq (%esp), %xmm0
addl $28, %esp
ret
llvm-svn: 48090
|
| |
|
|
|
|
| |
and also update the cloning interface's major user, the loop optimizations.
llvm-svn: 48088
|
| |
|
|
| |
llvm-svn: 48086
|
| |
|
|
|
|
|
| |
Add the ability to remove just one instance of a BB from a phi node. This fixes
the compile error in the tree now.
llvm-svn: 48085
|
| |
|
|
|
|
| |
removal of invoke, PR1269.
llvm-svn: 48084
|
| |
|
|
| |
llvm-svn: 48064
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
#include <xmmintrin.h>
__m128i doload64(short x) {return _mm_set_epi16(0,0,0,0,0,0,0,1);}
into:
movl $1, %eax
movd %eax, %xmm0
ret
instead of a constant pool load.
llvm-svn: 48063
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
of BUILD_VECTORS that only have two unique elements:
1. The previous code was nondeterminstic, because it walked a map in
SDOperand order, which isn't determinstic.
2. The previous code didn't handle the case when one element was undef
very well. Now we ensure that the generated shuffle mask has the
undef vector on the RHS (instead of potentially being on the LHS)
and that any elements that refer to it are themselves undef. This
allows us to compile CodeGen/X86/vec_set-9.ll into:
_test3:
movd %rdi, %xmm0
punpcklqdq %xmm0, %xmm0
ret
instead of:
_test3:
movd %rdi, %xmm1
#IMPLICIT_DEF %xmm0
punpcklqdq %xmm1, %xmm0
ret
... saving a register.
llvm-svn: 48060
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
_test3:
movd %rdi, %xmm1
#IMPLICIT_DEF %xmm0
punpcklqdq %xmm1, %xmm0
ret
instead of:
_test3:
#IMPLICIT_DEF %rax
movd %rax, %xmm0
movd %rdi, %xmm1
punpcklqdq %xmm1, %xmm0
ret
This is still not ideal. There is no reason to two xmm regs.
llvm-svn: 48058
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
2) Don't try to insert an i64 value into the low part of a
vector with movq on an x86-32 target. This allows us to
compile:
__m128i doload64(short x) {return _mm_set_epi16(0,0,0,0,0,0,0,1);}
into:
_doload64:
movaps LCPI1_0, %xmm0
ret
instead of:
_doload64:
subl $28, %esp
movl $0, 4(%esp)
movl $1, (%esp)
movq (%esp), %xmm0
addl $28, %esp
ret
llvm-svn: 48057
|
| |
|
|
|
|
| |
SCALAR_TO_VECTOR on paths that end up not using it.
llvm-svn: 48056
|
| |
|
|
| |
llvm-svn: 48055
|
| |
|
|
| |
llvm-svn: 48054
|
| |
|
|
| |
llvm-svn: 48047
|
| |
|
|
|
|
| |
it tries to initialize them.
llvm-svn: 48046
|
| |
|
|
| |
llvm-svn: 48044
|
| |
|
|
|
|
| |
are looking pretty good now.
llvm-svn: 48043
|
| |
|
|
|
|
| |
and prefetchnta instructions.
llvm-svn: 48042
|
| |
|
|
| |
llvm-svn: 48041
|
| |
|
|
|
|
| |
kills the sub-register.
llvm-svn: 48038
|
| |
|
|
| |
llvm-svn: 48035
|
| |
|
|
|
|
|
| |
by promoting smaller integral values (i32 at this point) to i64, then truncating
to get the wanted size.
llvm-svn: 48030
|
| |
|
|
| |
llvm-svn: 48029
|
| |
|
|
|
|
| |
but there are bugs.
llvm-svn: 48028
|
| |
|
|
| |
llvm-svn: 48027
|
| |
|
|
|
|
| |
with 32 or 64-bit operands/results.
llvm-svn: 48026
|
| |
|
|
|
|
| |
register, there must be an implicit def of the super-register on the MI.
llvm-svn: 48024
|
| |
|
|
| |
llvm-svn: 48020
|
| |
|
|
| |
llvm-svn: 48019
|
| |
|
|
|
|
| |
Update llvm-extract to use it and optionally extract a global variable if you want it too
llvm-svn: 48015
|
| |
|
|
| |
llvm-svn: 48010
|
| |
|
|
|
|
| |
No functionality change.
llvm-svn: 48009
|
| |
|
|
|
|
| |
we're using SSE or not. This fixes PR2122.
llvm-svn: 48006
|