| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
| |
same dwarf number. This will be used for creating a dwarf number to register
mapping.
The only case that needs this so far is the XMM/YMM registers that unfortunately
do have the same numbers.
llvm-svn: 132314
|
|
|
|
|
|
|
|
| |
There was no way to check if a given register/mode pair was valid. We now return
an error code (-2) instead of asserting. If anyone thinks that an assert
at this point is really needed, we can autogen a hasValidDwarfRegNum instead.
llvm-svn: 132236
|
|
|
|
|
|
|
| |
Ambiguous sub-register index compositions are OK as long as the backend writer
knows what he is doing.
llvm-svn: 131134
|
|
|
|
|
|
|
| |
The RegisterInfo.td file should only specify the indexes that sources need to
refer to. The rest is inferred.
llvm-svn: 131058
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
On the x86-64 and thumb2 targets, some registers are more expensive to encode
than others in the same register class.
Add a CostPerUse field to the TableGen register description, and make it
available from TRI->getCostPerUse. This represents the cost of a REX prefix or a
32-bit instruction encoding required by choosing a high register.
Teach the greedy register allocator to prefer cheap registers for busy live
ranges (as indicated by spill weight).
llvm-svn: 129864
|
|
|
|
| |
llvm-svn: 127448
|
|
|
|
| |
llvm-svn: 127446
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
registers that alias Reg, including itself. This is almost the same as the
existing getAliasSet() method, except for the inclusion of Reg.
The name matches the reflexive TRI::regsOverlap(x, y) relation.
It is very common to do stuff to a register and all its aliases:
stuff(Reg)
for (const unsigned *Alias = TRI->getAliasSet(Reg); *Alias; ++Alias)
stuff(*Alias);
That can now be written as the simpler:
for (const unsigned *Alias = TRI->getOverlaps(Reg); *Alias; ++Alias)
stuff(*Alias);
This change requires a bit more constant space for the alias lists because Reg
is included and because the empty alias list cannot be shared any longer.
If the getAliasSet method is eventually removed, this space can be reclaimed by
sharing overlap lists. For instance, %rax and %eax have identical overlap sets.
llvm-svn: 121800
|
|
|
|
| |
llvm-svn: 121659
|
|
|
|
|
|
| |
accordingly. No functional change.
llvm-svn: 112008
|
|
|
|
|
|
|
| |
MachineRegisterInfo doesn't have to confusingly allocate an extra
entry.
llvm-svn: 106296
|
|
|
|
|
|
| |
Also verify that all subregister indices compose unambiguously.
llvm-svn: 105064
|
|
|
|
| |
llvm-svn: 104755
|
|
|
|
| |
llvm-svn: 104741
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A Register with subregisters must also provide SubRegIndices for adressing the
subregisters. TableGen automatically inherits indices for sub-subregisters to
minimize typing.
CompositeIndices may be specified for the weirder cases such as the XMM sub_sd
index that returns the same register, and ARM NEON Q registers where both D
subregs have ssub_0 and ssub_1 sub-subregs.
It is now required that all subregisters are named by an index, and a future
patch will also require inherited subregisters to be named. This is necessary to
allow composite subregister indices to be reduced to a single index.
llvm-svn: 104704
|
|
|
|
|
|
| |
This reverts commit 104654.
llvm-svn: 104660
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A Register with subregisters must also provide SubRegIndices for adressing the
subregisters. TableGen automatically inherits indices for sub-subregisters to
minimize typing.
CompositeIndices may be specified for the weirder cases such as the XMM sub_sd
index that returns the same register, and ARM NEON Q registers where both D
subregs have ssub_0 and ssub_1 sub-subregs.
It is now required that all subregisters are named by an index, and a future
patch will also require inherited subregisters to be named. This is necessary to
allow composite subregister indices to be reduced to a single index.
llvm-svn: 104654
|
|
|
|
| |
llvm-svn: 104650
|
|
|
|
| |
llvm-svn: 104628
|
|
|
|
|
|
|
|
|
|
|
| |
instead.
This passes lit tests, but I'll give it a go through the buildbots to smoke out
any remaining places that depend on the old SubRegIndex numbering.
Then I'll remove NumberHack entirely.
llvm-svn: 104615
|
|
|
|
| |
llvm-svn: 104571
|
|
|
|
|
|
|
|
|
|
|
| |
structure that represents a mapping without any dependencies on SubRegIndex
numbering.
This brings us closer to being able to remove the explicit SubRegIndex
numbering, and it is now possible to specify any mapping without inventing
*_INVALID register classes.
llvm-svn: 104563
|
|
|
|
|
|
|
| |
This is the beginning of purely symbolic subregister indices, but we need a bit
of jiggling before the explicit numeric indices can be completely removed.
llvm-svn: 104492
|
|
|
|
| |
llvm-svn: 90934
|
|
|
|
|
|
| |
replace broken code in VirtRegRewriter.
llvm-svn: 88753
|
|
|
|
|
|
| |
this table.
llvm-svn: 81728
|
|
|
|
|
|
|
|
| |
while
the latter is capable of representing either a primitive or an extended type.
llvm-svn: 78713
|
|
|
|
|
|
| |
own struct type.
llvm-svn: 78610
|
|
|
|
| |
llvm-svn: 77564
|
|
|
|
|
|
|
|
| |
- Sorry, I can't help myself.
- No intended functionality change.
llvm-svn: 74742
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A subclass is allowed to have a larger spill size than the superclass, and the
spill alignment must be a multiple of the superclass alignment. This causes
the following new subclass relations:
=== Alpha ===
F4RC -> F8RC
=== PPC ===
F4RC -> F8RC
=== SPU ===
R8C -> R16C -> R32C/R32FP -> R64C/R64FP -> GPRC/VECREG
=== X86 ===
FR32 -> FR64 -> VR128
RFP32 -> RFP64 -> RFP80
These subclass relations are consistent with the behaviour of -join-cross-class-copies.
llvm-svn: 70511
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This will be used to replace things like X86's MOV32to32_.
Enhance ScheduleDAGSDNodesEmit to be more flexible and robust
in the presense of subregister superclasses and subclasses. It
can now cope with the definition of a virtual register being in
a subclass of a use.
Re-introduce the code for recording register superreg classes and
subreg classes. This is needed because when subreg extracts and
inserts get coalesced away, the virtual registers are left in
the correct subclass.
llvm-svn: 68961
|
|
|
|
| |
llvm-svn: 68730
|
|
|
|
|
|
| |
hash table just like subregister checking does.
llvm-svn: 68669
|
|
|
|
|
|
|
|
|
|
| |
TargetRegisterInfo.
This makes debugging register classes a bit easier."
Patch by Jakob Stoklund Olesen!
llvm-svn: 68400
|
|
|
|
|
|
| |
SuperRegClasses. These are not necessary. Also eliminate getSubRegisterRegClass and getSuperRegisterRegClass. These are slow and their results can change if register file names change. Just use TargetLowering::getRegClassFor() to get the right TargetRegisterClass instead.
llvm-svn: 62762
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
use a SUB instruction instead of an ADD, because -128 can be
encoded in an 8-bit signed immediate field, while +128 can't be.
This avoids the need for a 32-bit immediate field in this case.
A similar optimization applies to 64-bit adds with 0x80000000,
with the 32-bit signed immediate field.
To support this, teach tablegen how to handle 64-bit constants.
llvm-svn: 57663
|
|
|
|
| |
llvm-svn: 56107
|
|
|
|
|
|
| |
doesn't have a subreg of the specified index.
llvm-svn: 56099
|
|
|
|
| |
llvm-svn: 55916
|
|
|
|
|
|
| |
- fix to please VS: add a return after an assert.
llvm-svn: 55380
|
|
|
|
|
|
| |
in the example attached to PR2590, but is a problem in general.
llvm-svn: 55361
|
|
|
|
| |
llvm-svn: 55360
|
|
|
|
|
|
| |
orders, part of PR2590
llvm-svn: 55359
|
|
|
|
|
|
|
|
|
| |
expensive
subregister query, and by increasing the size of the subregister hashtable so
that there are fewer collisions.
llvm-svn: 54781
|
|
|
|
|
|
| |
There is no need for targets to specify register names in addition to their AsmName's.
llvm-svn: 53207
|
|
|
|
|
|
| |
and mark it const along with the associated changes to TargetRegisterInfo.
llvm-svn: 52966
|
|
|
|
| |
llvm-svn: 52960
|
|
|
|
|
|
|
|
| |
- Use a more accurate heuristic for the size of the hashtable.
- Use bitwise and instead of modulo since the size is a power of two.
- Use new[] instead of malloc().
llvm-svn: 52951
|
|
|
|
|
|
|
|
| |
with a hashtable-based
version that is computed by tblgen at the time LLVM is compiled.
llvm-svn: 52945
|