- Oct 16, 2011
-
-
Craig Topper authored
Add X86 INVPCID instruction. Add 32/64-bit predicates to INVEPT, INVVPID, VMREAD, and VMWRITE to remove hack from X86RecognizableInstr. llvm-svn: 142117
-
Craig Topper authored
Add X86 BEXTR instruction. This instruction uses VEX.vvvv to encode Operand 3 instead of Operand 2 so needs special casing in the disassembler and code emitter. Ultimately, should pass this information from tablegen llvm-svn: 142105
-
- Oct 15, 2011
-
-
Craig Topper authored
Add support for X86 blsr, blsmsk, and blsi instructions. Required extra work because these are the first VEX encoded instructions to use the reg field as an opcode extension. llvm-svn: 142082
-
- Oct 14, 2011
-
-
Craig Topper authored
llvm-svn: 141947
-
Jakob Stoklund Olesen authored
TableGen infers unmodeled side effects on instructions without a pattern. Fix some instruction definitions where that was overlooked. Also raise an error if a rematerializable instruction has unmodeled side effects. That doen't make any sense. llvm-svn: 141929
-
- Oct 12, 2011
-
-
Jim Grosbach authored
llvm-svn: 141786
-
- Oct 11, 2011
-
-
Eli Friedman authored
llvm-svn: 141699
-
Craig Topper authored
Fix disassembling of popcntw. Also remove some code that says it accounts for 64BIT_REXW_XD not existing, but it does exist. llvm-svn: 141642
-
- Oct 10, 2011
-
-
Jakob Stoklund Olesen authored
This should unbreak the picky buildbots. llvm-svn: 141575
-
Jakob Stoklund Olesen authored
The table is indexed by opcode, so simply removing pseudo-instructions creates a wrong mapping from opcode to table entry. Add a test case for xorps which has a very high opcode that exposes this problem. llvm-svn: 141562
-
- Oct 08, 2011
-
-
Jim Grosbach authored
llvm-svn: 141446
-
- Oct 07, 2011
-
-
Craig Topper authored
Revert part of r141274. Only need to change encoding for xchg %eax, %eax in 64-bit mode. This is because in 64-bit mode xchg %eax, %eax implies zeroing the upper 32-bits of RAX which makes it not a NOP. In 32-bit mode using NOP encoding is fine. llvm-svn: 141353
-
- Oct 06, 2011
-
-
Peter Collingbourne authored
llvm-svn: 141293
-
Craig Topper authored
Fix assembling of xchg %eax, %eax to not use the NOP encoding of 0x90. This was done by creating a new register group that excludes AX registers. Fixes PR10345. Also added aliases for flipping the order of the operands of xchg <reg>, %eax. llvm-svn: 141274
-
Peter Collingbourne authored
llvm-svn: 141266
-
Jakob Stoklund Olesen authored
This restores my karma after I added TRI::getSubClassWithSubReg(). Register constraints are applied 'backwards'. Starting from the register class required by an instruction operand, the correct question is: 'How can I constrain the super-register register class so all its sub-registers satisfy the instruction constraint?' The getMatchingSuperRegClass() hook answers that. We never need to go 'forwards': Starting from a super-register register class, what register class are the sub-registers in? The getSubRegisterRegClass() hook did that. llvm-svn: 141258
-
- Oct 05, 2011
-
-
Jakob Stoklund Olesen authored
This function is used to constrain a register class to a sub-class that supports the given sub-register index. For example, getSubClassWithSubReg(GR32, sub_8bit) -> GR32_ABCD. The function will be used to compute register classes when emitting INSERT_SUBREG and EXTRACT_SUBREG nodes and for register class inflation of sub-register operations. The version provided by TableGen is usually adequate, but targets can override. llvm-svn: 141142
-
- Oct 04, 2011
-
-
Jakob Stoklund Olesen authored
This should unbreak the Windows build. llvm-svn: 141105
-
Jakob Stoklund Olesen authored
The set of register classes should be closed under sub-register operations and intersections. That will allow the register allocator to model combinations of constraints accurately. This patch implements the easiest form of register class inference: For every register class, and for every sub-register SubIdx, the subset of registers in RC that have a SubIdx sub-register should also be a register class. This does create some new register classes for the targets in the tree: ARM gets a new QQQQPR_with_ssub_0. This class was omitted from the .td file on purpose because it only has two registers. InstrEmitter and RegisterCoalescer have safeguards against selecting too small register classes, so it is harmless. PowerPC gets a G8RC_with_sub_32 class because LR is not a sub_32 sub-register of LR8. I think that might be an omission? X86 puts RIP in the GR64 class, and since that register doesn't have 8-bit sub-registers, we get: GR64_with_sub_8bit GR64_TC_with_sub_8bit GR64_NOREX_with_sub_8bit GR64_TC_with_sub_8bit_hi The various CodeGen classes have already been fixed so adding new register classes should not affect compile time. llvm-svn: 141084
-
Jakob Stoklund Olesen authored
There is no need to keep the primary order separate. llvm-svn: 141082
-
Jakob Stoklund Olesen authored
When TableGen starts creating its own register classes, the synthesized classes won't have a Record reference. All register classes must have a name, though. llvm-svn: 141081
-
Jakob Stoklund Olesen authored
The RecordKeeper could be shared by multiple target instances, causing duplicate record errors. llvm-svn: 141080
-
Craig Topper authored
Add support in the disassembler for ignoring the L-bit on certain VEX instructions. Mark instructions that have this behavior. Fixes PR10676. llvm-svn: 141065
-
- Oct 02, 2011
-
-
Craig Topper authored
llvm-svn: 140962
-
- Oct 01, 2011
-
-
Craig Topper authored
llvm-svn: 140955
-
Craig Topper authored
Fix disassembler handling of CRC32 which is an odd instruction that uses 0xf2 as an opcode extension and allows the opsize prefix. This necessitated adding IC_XD_OPSIZE and IC_64BIT_XD_OPSIZE contexts. Unfortunately, this increases the size of the disassembler tables. Fixes PR10702. llvm-svn: 140954
-
Peter Collingbourne authored
This is the first step towards splitting LLVM and Clang's tblgen executables. llvm-svn: 140951
-
Bob Wilson authored
llvm-svn: 140928
-
Jakob Stoklund Olesen authored
All the sub-class bit vectors are computed when first creating the register bank. llvm-svn: 140905
-
Jakob Stoklund Olesen authored
This uses less memory and it reduces the complexity of sub-class operations: - hasSubClassEq() and friends become O(1) instead of O(N). - getCommonSubClass() becomes O(N) instead of O(N^2). In the future, TableGen will infer register classes. This makes it cheap to add them. llvm-svn: 140898
-
Jakob Stoklund Olesen authored
This one can also print 32-bit groups. llvm-svn: 140897
-
Jakob Stoklund Olesen authored
Use these lists instead of computing them on the fly in RegisterInfoEmitter. llvm-svn: 140895
-
- Sep 30, 2011
-
-
David Greene authored
Implement VarListElementInit:: resolveListElementReference so that lists of lists can be indexed. llvm-svn: 140882
-
Jakob Stoklund Olesen authored
llvm-svn: 140827
-
Jakob Stoklund Olesen authored
All register classes are given a lower ID than their sub-classes. Cliques are ordered alphabetically. This will be used to simplify some sub-class operations. llvm-svn: 140826
-
Jakob Stoklund Olesen authored
This makes it possible to allocate CodeGenRegisterClass instances dynamically and reorder them. llvm-svn: 140816
-
- Sep 29, 2011
-
-
Daniel Dunbar authored
"show-in-system-header" bits, which I will be adding in Clang shortly. llvm-svn: 140741
-
- Sep 26, 2011
-
-
Owen Anderson authored
llvm-svn: 140560
-
- Sep 25, 2011
-
-
Jakob Stoklund Olesen authored
Many targets use pseudo instructions to help register allocation. Like the COPY instruction, these pseudos can be expanded after register allocation. The early expansion can make life easier for PEI and the post-ra scheduler. This patch adds a hook that is called for all remaining pseudo instructions from the ExpandPostRAPseudos pass. llvm-svn: 140472
-
- Sep 23, 2011
-
-
Craig Topper authored
llvm-svn: 140370
-