| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 239657
|
|
|
|
|
|
|
|
| |
We had code to do this in SIRegisterInfo::eliminateFrameIndex(), but
it is easier to just change the definition of SI_SPILL_S32_RESTORE to
only allow numbered sgprs.
llvm-svn: 237143
|
|
|
|
|
|
| |
It is no longer used.
llvm-svn: 237142
|
|
|
|
|
|
|
| |
TRI->getRegClass() takes a register class ID, not a register. We were
using this incorrectly in a few places.
llvm-svn: 237132
|
|
|
|
|
|
| |
This is a candidate for stable.
llvm-svn: 233080
|
|
|
|
|
|
| |
classes.
llvm-svn: 231954
|
|
|
|
|
|
| |
we can inspect the subtarget and function when computing values.
llvm-svn: 231951
|
|
|
|
|
|
| |
This is a candidate for stable.
llvm-svn: 231659
|
|
|
|
| |
llvm-svn: 231658
|
|
|
|
|
|
|
|
| |
instructions
This matches the assembly syntax.
llvm-svn: 230758
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These are VOP2 on SI and VOP3 on VI, and their pseudos are neither, which can
be a problem. In order to make isVOP2 and isVOP3 queries behave as expected,
the encoding must be determined first.
This doesn't fix any known issue, but better safe than sorry.
v2: add and use getMCOpcodeFromPseudo
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
llvm-svn: 227987
|
|
|
|
|
|
| |
This fixes a crash in Unigine Heaven.
llvm-svn: 227618
|
|
|
|
| |
llvm-svn: 227462
|
|
|
|
|
|
| |
The schedule model is not complete yet, and could be improved.
llvm-svn: 227461
|
|
|
|
|
|
|
| |
This is disabled by default, but can be enabled with the subtarget
feature: 'vgpr-spilling'
llvm-svn: 226597
|
|
|
|
| |
llvm-svn: 226596
|
|
|
|
|
|
|
|
| |
We were passing the scratch buffer address to the shaders via user sgprs,
but now we use external symbols and have the driver patch the shader
using reloc information.
llvm-svn: 226586
|
|
|
|
|
|
|
| |
This allows us to re-use the same register for the scratch offset
when accessing large private arrays.
llvm-svn: 226585
|
|
|
|
| |
llvm-svn: 225988
|
|
|
|
|
|
|
|
|
|
|
|
| |
There are some operands which can take either immediates or registers
and we were previously using different register class to distinguish
between operands that could take immediates and those that could not.
This patch switches to using RegisterOperands which should simplify the
backend by reducing the number of register classes and also make it
easier to implement the assembler.
llvm-svn: 225662
|
|
|
|
|
|
|
|
|
|
|
| |
Use VGPR_32 register class instead. These two register classes were
identical and having separate classes was causing
SIInstrInfo::isLegalOperands() to be overly conservative in some cases.
This change is necessary to prevent future paches from missing a folding
opportunity in fneg-fabs.ll.
llvm-svn: 225382
|
|
|
|
|
|
|
|
| |
mubuf instructions now define the soffset field using the SCSrc_32
register class which indicates that only SGPRs and inline constants
are allowed.
llvm-svn: 224622
|
|
|
|
|
|
|
|
| |
Only the super register flat_scr was marked as reserved,
so in some cases with high register usage it would still
try to allocate the subregisters.
llvm-svn: 222737
|
|
|
|
|
|
|
|
|
|
| |
If we have spilled the value of the m0 register, then we need to restore
it with v_readlane_b32 to a regular sgpr, because v_readlane_b32 can't
write to m0.
v_readlane_b32 can't write to m0, so
llvm-svn: 222036
|
|
|
|
| |
llvm-svn: 221965
|
|
|
|
|
|
| |
Move these into header since they are trivial
llvm-svn: 218360
|
|
|
|
|
|
|
| |
These registers can be allocated and used like other 32-bit registers,
but it seems like a likely source for bugs.
llvm-svn: 218350
|
|
|
|
|
|
|
|
| |
Correctly handle special registers: EXEC, EXEC_LO, EXEC_HI, VCC_LO,
VCC_HI, and M0. The previous implementation would assertion fail
when passed these registers.
llvm-svn: 218349
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
VGPRs are spilled to LDS. This still needs more testing, but
we need to at least enable it at -O0, because the fast register
allocator spills all registers that are live at the end of blocks
and without this some future commits will break the
flat-address-space.ll test.
v2: Only calculate thread id once
v3: Move insertion of spill instructions to
SIRegisterInfo::eliminateFrameIndex()
llvm-svn: 218348
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There are new register classes VCSrc_* which represent operands that
can take an SGPR, VGPR or inline constant. The VSrc_* class is now used
to represent operands that can take an SGPR, VGPR, or a 32-bit
immediate.
This allows us to have more accurate checks for legality of
immediates, since before we had no way to distinguish between operands
that supported any 32-bit immediate and operands which could only
support inline constants.
llvm-svn: 218334
|
|
|
|
| |
llvm-svn: 218250
|
|
|
|
| |
llvm-svn: 217777
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This will simplify the SGPR spilling and also allow us to use
MachineFrameInfo for calculating offsets, which should be more
reliable than our custom code.
This fixes a crash in some cases where a register would be spilled
in a branch such that the VGPR defined for spilling did not dominate
all the uses when restoring.
This fixes a crash in an ocl conformance test. The test requries
register spilling and is too big to include.
llvm-svn: 216217
|
|
|
|
|
|
|
| |
This fixes a crash in an ocl conformance test. The test requries
register spilling and is too big to include.
llvm-svn: 216216
|
|
|
|
|
|
|
|
|
|
| |
GCC believes it may be possible to not return a value from the switch:
lib/Target/R600/SIRegisterInfo.cpp:187:1: warning: control reaches end of non-void function [-Wreturn-type]
Add an unreachable label to indicate that this is not possible and still permit
switch coverage checking.
llvm-svn: 213572
|
|
|
|
| |
llvm-svn: 213551
|
|
|
|
| |
llvm-svn: 212214
|
|
|
|
|
|
| |
Most of these are no longer used any more.
llvm-svn: 210915
|
|
|
|
| |
llvm-svn: 210869
|
|
|
|
| |
llvm-svn: 208617
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The register spiller assumes that only one new instruction is created
when spilling and restoring registers, so we need to emit pseudo
instructions for vector register spills and lower them after
register allocation.
v2:
- Fix calculation of lane index
- Extend VGPR liveness to end of program.
v3:
- Use SIMM16 field of S_NOP to specify multiple NOPs.
https://bugs.freedesktop.org/show_bug.cgi?id=75005
llvm-svn: 207843
|
|
|
|
| |
llvm-svn: 207197
|
|
|
|
|
|
| |
The register index is stored in the low 8-bits of the encoding.
llvm-svn: 205186
|
|
|
|
|
|
|
| |
Sweep the codebase for common typos. Includes some changes to visible function
names that were misspelt.
llvm-svn: 200018
|
|
|
|
|
|
|
| |
Moving into a VSrc doesn't always work, since it could be
replaced with an SGPR later.
llvm-svn: 195042
|
|
|
|
|
|
| |
This fixes a crash with GNOME settings manager.
llvm-svn: 194836
|
|
|
|
|
|
|
| |
Private address space is emulated using the register file with
MOVRELS and MOVRELD instructions.
llvm-svn: 194626
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
All shift operations will be selected as SALU instructions and then
if necessary lowered to VALU instructions in the SIFixSGPRCopies pass.
This allows us to do more operations on the SALU which will improve
performance and is also required for implementing private memory
using indirect addressing, since the private memory pointers must stay
in the scalar registers.
This patch includes some fixes from Matt Arsenault.
llvm-svn: 194625
|
|
|
|
| |
llvm-svn: 194340
|
|
|
|
|
|
|
|
| |
This prevents the machine verifier from complaining about uses of
an undefined physical register.
Reviewed-by: Vincent Lejeune<vljn at ovi.com>
llvm-svn: 192364
|