| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 40075
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
InOperandList. This gives one piece of important information: # of results
produced by an instruction.
An example of the change:
def ADD32rr : I<0x01, MRMDestReg, (ops GR32:$dst, GR32:$src1, GR32:$src2),
"add{l} {$src2, $dst|$dst, $src2}",
[(set GR32:$dst, (add GR32:$src1, GR32:$src2))]>;
=>
def ADD32rr : I<0x01, MRMDestReg, (outs GR32:$dst), (ins GR32:$src1, GR32:$src2),
"add{l} {$src2, $dst|$dst, $src2}",
[(set GR32:$dst, (add GR32:$src1, GR32:$src2))]>;
llvm-svn: 40033
|
|
|
|
| |
llvm-svn: 39828
|
|
|
|
| |
llvm-svn: 38498
|
|
|
|
| |
llvm-svn: 37963
|
|
|
|
|
|
| |
their predicates are fixed at isel time.
llvm-svn: 37899
|
|
|
|
|
|
|
|
|
| |
instruction flag, and use the flag along with a virtual member function
hook for targets to override if there are instructions that are only
trivially rematerializable with specific operands (i.e. constant pool
loads).
llvm-svn: 37728
|
|
|
|
|
|
|
|
|
|
| |
with a general target hook to identify rematerializable instructions. Some
instructions are only rematerializable with specific operands, such as loads
from constant pools, while others are always rematerializable. This hook
allows both to be identified as being rematerializable with the same
mechanism.
llvm-svn: 37644
|
|
|
|
| |
llvm-svn: 37643
|
|
|
|
|
|
| |
class basis.
llvm-svn: 37572
|
|
|
|
|
|
| |
are used to predicate instructions.
llvm-svn: 37465
|
|
|
|
|
|
|
| |
being changed from an enum to an integer type, which can't have a custom
operator<< overload.
llvm-svn: 37412
|
|
|
|
|
|
| |
without having a PredicateOperand.
llvm-svn: 37116
|
|
|
|
|
|
|
|
|
|
| |
Implement code generation for overloaded intrinsic functions. The basic
difference is that "actual" argument types must be provided when
constructing intrinsic names and types. Also, for recognition, only the
prefix is examined. If it matches, the suffix is assumed to match. The
suffix is checked by the Verifier, however.
llvm-svn: 35539
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
#include <mmintrin.h>
extern __m64 C;
void baz(__v2si *A, __v2si *B)
{
*A = C;
_mm_empty();
}
We get this:
_baz:
call "L1$pb"
"L1$pb":
popl %eax
movl L_C$non_lazy_ptr-"L1$pb"(%eax), %eax
movq (%eax), %mm0
movl 4(%esp), %eax
movq %mm0, (%eax)
emms
ret
GCC gives us this:
_baz:
pushl %ebx
call L3
"L00000000001$pb":
L3:
popl %ebx
subl $8, %esp
movl L_C$non_lazy_ptr-"L00000000001$pb"(%ebx), %eax
movl (%eax), %edx
movl 4(%eax), %ecx
movl 16(%esp), %eax
movl %edx, (%eax)
movl %ecx, 4(%eax)
emms
addl $8, %esp
popl %ebx
ret
llvm-svn: 35351
|
|
|
|
| |
llvm-svn: 35159
|
|
|
|
| |
llvm-svn: 34697
|
|
|
|
|
|
|
|
|
|
| |
CodeGenTarget.cpp updated: 1.82 -> 1.83
Record.cpp updated: 1.55 -> 1.56
Record.h updated: 1.59 -> 1.60
TableGen.cpp updated: 1.47 -> 1.48
It's missing CallingConvEmitter.h
llvm-svn: 34693
|
|
|
|
| |
llvm-svn: 34682
|
|
|
|
| |
llvm-svn: 33539
|
|
|
|
| |
llvm-svn: 32333
|
|
|
|
| |
llvm-svn: 32107
|
|
|
|
|
|
|
|
|
|
| |
not be used for anything other than backwards compat constraint handling.
Add support for a new DisableEncoding property which contains a list of
registers that should not be encoded by the generated code emitter. Convert
the codeemitter generator to use this, fixing some PPC JIT regressions.
llvm-svn: 31769
|
|
|
|
| |
llvm-svn: 31748
|
|
|
|
|
|
| |
have to be a subpart of a complex operand.
llvm-svn: 31618
|
|
|
|
| |
llvm-svn: 31484
|
|
|
|
|
|
| |
to extend.
llvm-svn: 31481
|
|
|
|
| |
llvm-svn: 31480
|
|
|
|
| |
llvm-svn: 31451
|
|
|
|
| |
llvm-svn: 31432
|
|
|
|
|
|
| |
throw an exception.
llvm-svn: 31361
|
|
|
|
| |
llvm-svn: 31333
|
|
|
|
| |
llvm-svn: 30890
|
|
|
|
| |
llvm-svn: 28790
|
|
|
|
| |
llvm-svn: 28376
|
|
|
|
| |
llvm-svn: 28366
|
|
|
|
|
|
| |
represent pointer type.
llvm-svn: 28363
|
|
|
|
|
|
| |
register classes.
llvm-svn: 28323
|
|
|
|
| |
llvm-svn: 27568
|
|
|
|
| |
llvm-svn: 27197
|
|
|
|
| |
llvm-svn: 27196
|
|
|
|
| |
llvm-svn: 27188
|
|
|
|
| |
llvm-svn: 27078
|
|
|
|
|
|
|
|
| |
the CodeGen* implementations.
Parse the MVT::ValueType for each operand of the intrinsics.
llvm-svn: 27075
|
|
|
|
| |
llvm-svn: 26869
|
|
|
|
| |
llvm-svn: 26437
|
|
|
|
|
|
| |
packed word integer (v8i16), and 64-bit packed doubleword integer (v2i32).
llvm-svn: 26294
|
|
|
|
| |
llvm-svn: 25673
|
|
|
|
|
|
|
|
|
| |
SNDPOutFlag to DAG nodes. These properties do not belong to target specific
instructions.
* Added DAG node property SNDPOptInFlag. It's same as SNDPInFlag except it's
optional. Used by ret / call, etc.
llvm-svn: 25154
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently tblgen cannot tell which operands in the operand list are results so
it assumes the first one is a result. This is bad. Ideally we would fix this
by separating results from inputs, e.g. (res R32:$dst),
(ops R32:$src1, R32:$src2). But that's a more distruptive change. Adding
'let noResults = 1' is the workaround to tell tblgen that the instruction does
not produces a result. It works for now since tblgen does not support
instructions which produce multiple results.
llvm-svn: 25017
|