| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 134030
|
|
|
|
|
|
|
|
|
|
|
|
| |
target machine from those that are only needed by codegen. The goal is to
sink the essential target description into MC layer so we can start building
MC based tools without needing to link in the entire codegen.
First step is to refactor TargetRegisterInfo. This patch added a base class
MCRegisterInfo which TargetRegisterInfo is derived from. Changed TableGen to
separate register description from the rest of the stuff.
llvm-svn: 133782
|
|
|
|
| |
llvm-svn: 133310
|
|
|
|
|
|
|
|
|
| |
relationships with just scanning the (typically tiny) static lists.
At the time I wrote this code (circa 2007), TargetRegisterInfo was using a std::set to perform these queries. Switching to the static hashtables was an obvious improvement, but in reality there's no reason to do anything other than scan.
With this change, total LLC time on a whole-program 403.gcc is reduced by approximately 1.5%, almost all of which comes from a 15% reduction in LiveVariables time. It also reduces the binary size of LLC by 86KB, thanks to eliminating a bunch of very large static tables.
llvm-svn: 133051
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Some register classes are only used for instruction operand constraints.
They should never be used for virtual registers. Previously, those
register classes were given an empty allocation order, but now you can
say 'let isAllocatable=0' in the register class definition.
TableGen calculates if a register is part of any allocatable register
class, and makes that information available in TargetRegisterDesc::inAllocatableClass.
The goal here is to eliminate use cases for overriding allocation_order_*
methods.
llvm-svn: 132508
|
|
|
|
|
|
| |
and fixes here and there.
llvm-svn: 123170
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
physical register numbers.
This makes the hack used in LiveInterval official, and lets LiveInterval be
oblivious of stack slots.
The isPhysicalRegister() and isVirtualRegister() predicates don't know about
this, so when a variable may contain a stack slot, isStackSlot() should always
be tested first.
llvm-svn: 123128
|
|
|
|
|
|
|
|
|
|
| |
without a TRI instance.
Print virtual registers numbered from 0 instead of the arbitrary
FirstVirtualRegister. The first virtual register is printed as %vreg0.
TRI::NoRegister is printed as %noreg.
llvm-svn: 123107
|
|
|
|
| |
llvm-svn: 121780
|
|
|
|
| |
llvm-svn: 119904
|
|
|
|
| |
llvm-svn: 119754
|
|
|
|
| |
llvm-svn: 117572
|
|
|
|
| |
llvm-svn: 112847
|
|
|
|
| |
llvm-svn: 112842
|
|
|
|
| |
llvm-svn: 112828
|
|
|
|
|
|
|
|
|
|
|
|
| |
AggressiveAntiDepBreaker should not be using getPhysicalRegisterRegClass. An
instruction might be using a register that can only be replaced with one from
a subclass of getPhysicalRegisterRegClass.
With this patch we use getMinimalPhysRegClass. This is correct, but
conservative. We should check the uses of the register and select the
largest register class that can be used in all of them.
llvm-svn: 108122
|
|
|
|
|
|
| |
from getPhysicalRegisterRegClass.
llvm-svn: 107660
|
|
|
|
|
|
|
|
|
| |
of getPhysicalRegisterRegClass with it.
If we want to make a copy (or estimate its cost), it is better to use the
smallest class as more efficient operations might be possible.
llvm-svn: 107140
|
|
|
|
|
|
|
| |
backends and removes the virtual declaration. With that out of the way
I should be able to cleanup one backend at a time.
llvm-svn: 105321
|
|
|
|
| |
llvm-svn: 104650
|
|
|
|
| |
llvm-svn: 104628
|
|
|
|
| |
llvm-svn: 94612
|
|
|
|
| |
llvm-svn: 83677
|
|
|
|
|
|
|
|
| |
default implementation. Update comment on the default version, which made it
sound like most targets override it. Currently only X86 and SystemZ override
this method.
llvm-svn: 82651
|
|
|
|
|
|
|
|
| |
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: 72604
|
|
|
|
|
|
|
|
|
| |
classes.
This is implemented as a function rather than a method on TargetRegisterClass
because it is symmetric in its arguments.
llvm-svn: 70512
|
|
|
|
| |
llvm-svn: 68730
|
|
|
|
|
|
| |
hash table just like subregister checking does.
llvm-svn: 68669
|
|
|
|
|
|
| |
compute the maximum element directly.
llvm-svn: 56411
|
|
|
|
| |
llvm-svn: 52980
|
|
|
|
|
|
| |
and mark it const along with the associated changes to TargetRegisterInfo.
llvm-svn: 52966
|
|
|
|
|
|
|
|
| |
with a hashtable-based
version that is computed by tblgen at the time LLVM is compiled.
llvm-svn: 52945
|
|
|
|
|
|
|
|
| |
faster lookups.
This speeds up LiveVariables from 0.6279s to 0.6165s on kimwitu++.
llvm-svn: 52818
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and better control the abstraction. Rename the type
to MVT. To update out-of-tree patches, the main
thing to do is to rename MVT::ValueType to MVT, and
rewrite expressions like MVT::getSizeInBits(VT) in
the form VT.getSizeInBits(). Use VT.getSimpleVT()
to extract a MVT::SimpleValueType for use in switch
statements (you will get an assert failure if VT is
an extended value type - these shouldn't exist after
type legalization).
This results in a small speedup of codegen and no
new testsuite failures (x86-64 linux).
llvm-svn: 52044
|
|
|
|
| |
llvm-svn: 50266
|
|
|
|
|
|
| |
the super-class (e.g. on x86, returns GR32, not GR32_).
llvm-svn: 48220
|
|
|
|
|
|
| |
around the def's and use's of the interval being allocated to make it possible for the interval to target a register and spill it right away and restore a register for uses. This likely generates terrible code but is before than aborting.
llvm-svn: 48218
|
|
llvm-svn: 46930
|