| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
directives
llvm-svn: 30593
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
shift amount is one or zero. For example, for:
long long foo1(long long X, int C) {
return X << (C|32);
}
long long foo2(long long X, int C) {
return X << (C&~32);
}
we get:
_foo1:
movb $31, %cl
movl 4(%esp), %edx
andb 12(%esp), %cl
shll %cl, %edx
xorl %eax, %eax
ret
_foo2:
movb $223, %cl
movl 4(%esp), %eax
movl 8(%esp), %edx
andb 12(%esp), %cl
shldl %cl, %eax, %edx
shll %cl, %eax
ret
instead of:
_foo1:
subl $4, %esp
movl %ebx, (%esp)
movb $32, %bl
movl 8(%esp), %eax
movl 12(%esp), %edx
movb %bl, %cl
orb 16(%esp), %cl
shldl %cl, %eax, %edx
shll %cl, %eax
xorl %ecx, %ecx
testb %bl, %bl
cmovne %eax, %edx
cmovne %ecx, %eax
movl (%esp), %ebx
addl $4, %esp
ret
_foo2:
subl $4, %esp
movl %ebx, (%esp)
movb $223, %cl
movl 8(%esp), %eax
movl 12(%esp), %edx
andb 16(%esp), %cl
shldl %cl, %eax, %edx
shll %cl, %eax
xorl %ecx, %ecx
xorb %bl, %bl
testb %bl, %bl
cmovne %eax, %edx
cmovne %ecx, %eax
movl (%esp), %ebx
addl $4, %esp
ret
llvm-svn: 30506
|
|
|
|
| |
llvm-svn: 30474
|
|
|
|
| |
llvm-svn: 30470
|
|
|
|
| |
llvm-svn: 30407
|
|
|
|
| |
llvm-svn: 30403
|
|
|
|
| |
llvm-svn: 30402
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
addl %ecx, %ecx
adcl %eax, %eax
instead of:
movl %ecx, %edx
addl %edx, %edx
shrl $31, %ecx
addl %eax, %eax
orl %ecx, %eax
and to:
addc r5, r5, r5
adde r4, r4, r4
instead of:
slwi r2,r9,1
srwi r0,r11,31
slwi r3,r11,1
or r2,r0,r2
on PPC.
llvm-svn: 30284
|
|
|
|
| |
llvm-svn: 30225
|
|
|
|
| |
llvm-svn: 30217
|
|
|
|
|
|
| |
possible and the target only supports MULHS.
llvm-svn: 30022
|
|
|
|
| |
llvm-svn: 29911
|
|
|
|
| |
llvm-svn: 29796
|
|
|
|
| |
llvm-svn: 29687
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
in the start of an array and a count of operands where applicable. In many
cases, the number of operands is known, so this static array can be allocated
on the stack, avoiding the heap. In many other cases, a SmallVector can be
used, which has the same benefit in the common cases.
I updated a lot of code calling getNode that takes a vector, but ran out of
time. The rest of the code should be updated, and these methods should be
removed.
We should also do the same thing to eliminate the methods that take a
vector of MVT::ValueTypes.
It would be extra nice to convert the dagiselemitter to avoid creating vectors
for operands when calling getTargetNode.
llvm-svn: 29566
|
|
|
|
|
|
|
|
|
| |
method that took std::vector<SDOperand> to take a pointer to a first operand
and #operands.
This speeds up isel on kc++ by about 3%.
llvm-svn: 29561
|
|
|
|
|
|
| |
also make it simpler.
llvm-svn: 29524
|
|
|
|
|
|
|
|
| |
This manifested itself as really long time to compile
Regression/CodeGen/Generic/2003-05-28-ManyArgs.ll on ppc.
This is PR847.
llvm-svn: 29313
|
|
|
|
|
|
| |
non-debug build.
llvm-svn: 29105
|
|
|
|
| |
llvm-svn: 29099
|
|
|
|
| |
llvm-svn: 28970
|
|
|
|
|
|
| |
RET chain, value1, sign1, value2, sign2
llvm-svn: 28509
|
|
|
|
|
|
| |
by Anton Korobeynikov! This is a step towards closing PR786.
llvm-svn: 28447
|
|
|
|
|
|
|
|
|
|
|
|
| |
use UpdateNodeOperands to just update the operands! This is important because
getNode will allocate a new node if the node returns a flag and this breaks
assumptions in the legalizer that you can legalize some things multiple times
and get exactly the same results.
This latent bug was exposed by my ppc patch last night, and this fixes
gsm/toast.
llvm-svn: 28348
|
|
|
|
|
|
| |
change.
llvm-svn: 28347
|
|
|
|
|
|
| |
produce it.
llvm-svn: 28338
|
|
|
|
|
|
| |
for each argument.
llvm-svn: 28313
|
|
|
|
| |
llvm-svn: 28274
|
|
|
|
| |
llvm-svn: 28207
|
|
|
|
|
|
|
|
| |
target-specific subclasses. This has one caller-visible change: getTargetData() now returns a pointer instead of a reference.
This fixes PR 759.
llvm-svn: 28074
|
|
|
|
|
|
|
|
| |
x86 and ppc for 100% dense switch statements when relocations are non-PIC.
This support will be extended and enhanced in the coming days to support
PIC, and less dense forms of jump tables.
llvm-svn: 27947
|
|
|
|
| |
llvm-svn: 27846
|
|
|
|
|
|
| |
the code in GCC PR26546.
llvm-svn: 27780
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and a shuffle. For this:
void %test2(<4 x float>* %F, float %f) {
%tmp = load <4 x float>* %F ; <<4 x float>> [#uses=2]
%tmp3 = add <4 x float> %tmp, %tmp ; <<4 x float>> [#uses=1]
%tmp2 = insertelement <4 x float> %tmp3, float %f, uint 2 ; <<4 x float>> [#uses=2]
%tmp6 = add <4 x float> %tmp2, %tmp2 ; <<4 x float>> [#uses=1]
store <4 x float> %tmp6, <4 x float>* %F
ret void
}
we now get this on X86 (which will get better):
_test2:
movl 4(%esp), %eax
movaps (%eax), %xmm0
addps %xmm0, %xmm0
movaps %xmm0, %xmm1
shufps $3, %xmm1, %xmm1
movaps %xmm0, %xmm2
shufps $1, %xmm2, %xmm2
unpcklps %xmm1, %xmm2
movss 8(%esp), %xmm1
unpcklps %xmm1, %xmm0
unpcklps %xmm2, %xmm0
addps %xmm0, %xmm0
movaps %xmm0, (%eax)
ret
instead of:
_test2:
subl $28, %esp
movl 32(%esp), %eax
movaps (%eax), %xmm0
addps %xmm0, %xmm0
movaps %xmm0, (%esp)
movss 36(%esp), %xmm0
movss %xmm0, 8(%esp)
movaps (%esp), %xmm0
addps %xmm0, %xmm0
movaps %xmm0, (%eax)
addl $28, %esp
ret
llvm-svn: 27765
|
|
|
|
|
|
| |
to write one pattern for vector stores instead of 4.
llvm-svn: 27730
|
|
|
|
| |
llvm-svn: 27695
|
|
|
|
| |
llvm-svn: 27632
|
|
|
|
| |
llvm-svn: 27606
|
|
|
|
|
|
| |
shouldcustom legalize it and remove their XXXTargetLowering::LowerArguments overload
llvm-svn: 27604
|
|
|
|
| |
llvm-svn: 27586
|
|
|
|
| |
llvm-svn: 27580
|
|
|
|
| |
llvm-svn: 27578
|
|
|
|
| |
llvm-svn: 27559
|
|
|
|
| |
llvm-svn: 27542
|
|
|
|
|
|
| |
to match again :)
llvm-svn: 27533
|
|
|
|
|
|
| |
as its input.
llvm-svn: 27528
|
|
|
|
|
|
|
|
|
| |
store vector to $esp
store element to $esp + sizeof(VT) * index
load vector from $esp
The bug is VT is the type of the vector element, not the type of the vector!
llvm-svn: 27517
|
|
|
|
|
|
| |
or custom lowering fails.
llvm-svn: 27432
|
|
|
|
|
|
|
|
|
|
| |
promoted/expanded (e.g. SCALAR_TO_VECTOR from i8/i16 on PPC).
* Add support for targets to request that VECTOR_SHUFFLE nodes be promoted
to a canonical type, for example, we only want v16i8 shuffles on PPC.
* Move isShuffleLegal out of TLI into Legalize.
* Teach isShuffleLegal to allow shuffles that need to be promoted.
llvm-svn: 27399
|
|
|
|
|
|
| |
work with PowerPC.
llvm-svn: 27349
|