| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
| |
moving toward making structs and arrays first-class types.
llvm-svn: 51157
|
| |
|
|
|
|
| |
and memset. Currently only X86 target is taking advantage of these.
llvm-svn: 51140
|
| |
|
|
| |
llvm-svn: 51131
|
| |
|
|
| |
llvm-svn: 51126
|
| |
|
|
| |
llvm-svn: 51123
|
| |
|
|
| |
llvm-svn: 51115
|
| |
|
|
|
|
| |
SETOEQ, is it does with (SETEQ & SETULE), map it to SETEQ.
llvm-svn: 51112
|
| |
|
|
| |
llvm-svn: 51089
|
| |
|
|
|
|
|
|
|
|
|
| |
element from address with an offset.
pshufd $1, (%rdi), %xmm0
movd %xmm0, %eax
=>
movl 4(%rdi), %eax
llvm-svn: 51026
|
| |
|
|
|
|
|
| |
several things that were neither in an anonymous namespace nor static
but not intended to be global.
llvm-svn: 51017
|
| |
|
|
|
|
| |
Teach X86 a few more vsetcc patterns. Custom lowering for unsupported ones is next.
llvm-svn: 51009
|
| |
|
|
|
|
| |
locations are at the right offset from each other.
llvm-svn: 51008
|
| |
|
|
|
|
| |
make use of it.
llvm-svn: 50991
|
| |
|
|
|
|
| |
This is necessary to unbreak the build.
llvm-svn: 50988
|
| |
|
|
| |
llvm-svn: 50967
|
| |
|
|
| |
llvm-svn: 50836
|
| |
|
|
| |
llvm-svn: 50793
|
| |
|
|
|
|
| |
instead?)
llvm-svn: 50775
|
| |
|
|
| |
llvm-svn: 50696
|
| |
|
|
|
|
|
| |
ComputeMaskedBits handles, just use a 'default:'. This avoids
TargetLowering's list getting out of date with SelectionDAG's.
llvm-svn: 50693
|
| |
|
|
|
|
| |
ComputeMaskedBits.
llvm-svn: 50692
|
| |
|
|
| |
llvm-svn: 50663
|
| |
|
|
| |
llvm-svn: 50591
|
| |
|
|
| |
llvm-svn: 50562
|
| |
|
|
| |
llvm-svn: 50561
|
| |
|
|
| |
llvm-svn: 50558
|
| |
|
|
|
|
|
|
|
| |
ffastmath mode. This fixes rdar://5902801, a miscompilation
of gcc.dg/builtins-8.c.
Bill, please pull this into Tak.
llvm-svn: 50523
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Move platform independent code (lowering of possibly overwritten
arguments, check for tail call optimization eligibility) from
target X86ISelectionLowering.cpp to TargetLowering.h and
SelectionDAGISel.cpp.
Initial PowerPC tail call implementation:
Support ppc32 implemented and tested (passes my tests and
test-suite llvm-test).
Support ppc64 implemented and half tested (passes my tests).
On ppc tail call optimization is performed if
caller and callee are fastcc
call is a tail call (in tail call position, call followed by ret)
no variable argument lists or byval arguments
option -tailcallopt is enabled
Supported:
* non pic tail calls on linux/darwin
* module-local tail calls on linux(PIC/GOT)/darwin(PIC)
* inter-module tail calls on darwin(PIC)
If constraints are not met a normal call will be emitted.
A test checking the argument lowering behaviour on x86-64 was added.
llvm-svn: 50477
|
| |
|
|
|
|
|
| |
DAG.UpdateNodeOperands() is called before (not after) the call to
TLI.LowerOperation().
llvm-svn: 50461
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This removes the existing bottleneck related to the removal of elements from
the middle of the queue.
Also fixes a subtle bug in ScheduleDAGRRList::CapturePred:
It was updating the state of the SUnit before removing it. As a result, the
comparison operators were working incorrectly and this SUnit could not be removed
from the queue properly.
Reviewed by Evan and Dan. Approved by Dan.
llvm-svn: 50412
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We now compile test2/test3 to:
_test2:
## InlineAsm Start
set %xmm0, %xmm1
## InlineAsm End
addps %xmm1, %xmm0
ret
_test3:
## InlineAsm Start
set %xmm0, %xmm1
## InlineAsm End
paddd %xmm1, %xmm0
ret
as expected.
llvm-svn: 50389
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
towards PR2094. It now compiles the attached .ll file to:
_sad16_sse2:
movslq %ecx, %rax
## InlineAsm Start
%ecx %rdx %rax %rax %r8d %rdx %rsi
## InlineAsm End
## InlineAsm Start
set %eax
## InlineAsm End
ret
which is pretty decent for a 3 output, 4 input asm.
llvm-svn: 50386
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
units. If it's creating multiple CopyToReg nodes that are "flagged" together, it should not create a TokenFactor for it's chain outputs:
c1, f1 = CopyToReg
c2, f2 = CopyToReg
c3 = TokenFactor c1, c2
...
= user c3, ..., f2
Now that the two CopyToReg's and the user are "flagged" together. They effectively forms a single scheduling unit. The TokenFactor is now both an operand and a successor of the Flagged nodes.
llvm-svn: 50376
|
| |
|
|
|
|
| |
if the zext is not legal.
llvm-svn: 50368
|
| |
|
|
| |
llvm-svn: 50367
|
| |
|
|
|
|
| |
aggregate types.
llvm-svn: 50366
|
| |
|
|
|
|
| |
reorder some of the members for clarity.
llvm-svn: 50365
|
| |
|
|
| |
llvm-svn: 50361
|
| |
|
|
|
|
|
| |
memcpy/memset expansion. It was a bug for the SVOffset value
to be used in the actual address calculations.
llvm-svn: 50359
|
| |
|
|
|
|
|
|
|
|
|
| |
ComputeMaskedBits knows about cttz, ctlz, and ctpop. Teach
SelectionDAG's ComputeMaskedBits what InstCombine's knows
about SRem. And teach them both some things about high bits
in Mul, UDiv, URem, and Sub. This allows instcombine and
dagcombine to eliminate sign-extension operations in
several new cases.
llvm-svn: 50358
|
| |
|
|
|
|
| |
sign-bit of x is known to be zero.
llvm-svn: 50357
|
| |
|
|
| |
llvm-svn: 50341
|
| |
|
|
|
|
|
|
|
|
| |
conversion open the door for many nasty implicit conversion issues, and
can be easily solved by initializing with (V.begin(), V.end()) when
needed.
This patch includes many small cleanups for sdisel also.
llvm-svn: 50340
|
| |
|
|
|
|
| |
heap thrash on tiny (usually single-element) vectors.
llvm-svn: 50335
|
| |
|
|
| |
llvm-svn: 50330
|
| |
|
|
| |
llvm-svn: 50329
|
| |
|
|
| |
llvm-svn: 50316
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When choosing between constraints with multiple options,
like "ir", test to see if we can use the 'i' constraint and
go with that if possible. This produces more optimal ASM in
all cases (sparing a register and an instruction to load it),
and fixes inline asm like this:
void test () {
asm volatile (" %c0 %1 " : : "imr" (42), "imr"(14));
}
Previously we would dump "42" into a memory location (which
is ok for the 'm' constraint) which would cause a problem
because the 'c' modifier is not valid on memory operands.
Isn't it great how inline asm turns 'missed optimization'
into 'compile failed'??
Incidentally, this was the todo in
PowerPC/2007-04-24-InlineAsm-I-Modifier.ll
Please do NOT pull this into Tak.
llvm-svn: 50315
|
| |
|
|
| |
llvm-svn: 50314
|
| |
|
|
| |
llvm-svn: 50313
|