| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 30945
|
| |
|
|
| |
llvm-svn: 30884
|
| |
|
|
| |
llvm-svn: 30878
|
| |
|
|
|
|
| |
As a bonus, use the GOT node instead of the AlphaISD::GOT for internal stuff.
llvm-svn: 30873
|
| |
|
|
| |
llvm-svn: 30857
|
| |
|
|
| |
llvm-svn: 30853
|
| |
|
|
| |
llvm-svn: 30844
|
| |
|
|
|
|
| |
part was always forced to be sextload, even when we needed an zextload.
llvm-svn: 30782
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
long long foo(long long X) {
return (long long)(signed char)(int)X;
}
Instead of:
_foo:
extsb r2, r4
srawi r3, r4, 31
mr r4, r2
blr
we now produce:
_foo:
extsb r4, r4
srawi r3, r4, 31
blr
This fixes a miscompilation in ConstantFolding.cpp.
llvm-svn: 30768
|
| |
|
|
| |
llvm-svn: 30759
|
| |
|
|
|
|
| |
extra operand to LOADX to specify the exact value extension type.
llvm-svn: 30714
|
| |
|
|
| |
llvm-svn: 30711
|
| |
|
|
|
|
| |
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
|