| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 239657
|
|
|
|
| |
llvm-svn: 239534
|
|
|
|
| |
llvm-svn: 239377
|
|
|
|
| |
llvm-svn: 238211
|
|
|
|
|
|
|
| |
DisableEncoding and Constraints can be set using let statements around
the multiclass defs.
llvm-svn: 238148
|
|
|
|
|
|
| |
The src and dst register cannot be the same on chips with 16 lds banks.
llvm-svn: 238147
|
|
|
|
|
|
|
|
| |
This lets us drop a parameter the opName parameter to the VINTRP
multiclass and makes it possible to create multiple VINTRP defs
with the same asm mnemonic.
llvm-svn: 238146
|
|
|
|
|
|
|
|
|
|
|
|
| |
AMDGPU::SI_SPILL_V96_RESTORE was missing from a switch statement, which
caused the srsrc and soffset register to not be set correctly.
This commit replaces the switch statement with a SITargetInfo query
to make sure all spill instructions are covered.
Differential Revision: http://reviews.llvm.org/D9582
llvm-svn: 237164
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
Instead add m0 as an implicit operand. This helps avoid spills
of the m0 register in some cases.
llvm-svn: 237141
|
|
|
|
|
|
|
| |
Instead add m0 as an implicit operand. This helps avoid spills
of the m0 register in some cases.
llvm-svn: 237140
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Instead add m0 as an implicit operand. This allows us to avoid using
the M0Reg register class and eliminates a number of unnecessary spills
when using s_sendmsg instructions. This impacts one shader in the
shader-db:
SGPRS: 48 -> 40 (-16.67 %)
VGPRS: 112 -> 108 (-3.57 %)
Code Size: 40132 -> 38796 (-3.33 %) bytes
LDS: 0 -> 0 (0.00 %) blocks
Scratch: 2048 -> 0 (-100.00 %) bytes per wave
llvm-svn: 237133
|
|
|
|
|
|
| |
When SI_KILL has a register operand, its lowered form writes to vcc.
llvm-svn: 236307
|
|
|
|
|
|
|
| |
This enables the rematerialization of some R600 MOV instructions in the
RegisterCoalescer and adds a testcase for r235668.
llvm-svn: 235675
|
|
|
|
| |
llvm-svn: 235628
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is currently considered experimental, but most of the more
commonly used instructions should work.
So far only SI has been extensively tested, CI and VI probably work too,
but may be buggy. The current set of tests cases do not give complete
coverage, but I think it is sufficient for an experimental assembler.
See the documentation in R600Usage for more information.
llvm-svn: 234381
|
|
|
|
| |
llvm-svn: 234380
|
|
|
|
| |
llvm-svn: 233079
|
|
|
|
| |
llvm-svn: 233077
|
|
|
|
|
|
|
| |
Other f64 opcodes not supported on SI can be lowered in a similar way.
v2: use complex VOP3 patterns
llvm-svn: 233076
|
|
|
|
|
|
|
|
|
| |
V_FRACT is buggy on SI.
R600-specific code is left intact.
v2: drop the multiclass, use complex VOP3 patterns
llvm-svn: 233075
|
|
|
|
|
|
| |
Also don't count the class instructions as isCompare anymore.
llvm-svn: 232991
|
|
|
|
|
|
| |
These are already set in the base class for the instruction.
llvm-svn: 232990
|
|
|
|
| |
llvm-svn: 232989
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This enables very common cases to switch to the
smaller encoding.
All of the standard LLVM canonicalizations of comparisons
are the opposite of what we want. Compares with constants
are moved to the RHS, but the first operand can be an inline
immediate, literal constant, or SGPR using the 32-bit VOPC
encoding.
There are additional bad canonicalizations that should
also be fixed, such as canonicalizing ge x, k to gt x, (k + 1)
if this makes k no longer an inline immediate value.
llvm-svn: 232988
|
|
|
|
|
|
| |
Use VOPCX_F64 to not need the let Defs = [EXEC]
llvm-svn: 232987
|
|
|
|
|
|
|
|
|
|
| |
multiple results.
This is needed for AVX512 masked scatter/gather support.
The R600 change is necessary to remove a hack that was working around the lack of multiple results.
llvm-svn: 232798
|
|
|
|
|
|
|
|
| |
Instead print them as part of the $dst operand. The AsmMatcher
requires the 32-bit and 64-bit encodings have the same mnemonic in
order to parse them correctly.
llvm-svn: 232105
|
|
|
|
| |
llvm-svn: 231797
|
|
|
|
|
|
|
| |
This was done by refactoring the v_cndmask_b32 tablegen definition
to use inherit from VOP2Inst.
llvm-svn: 231795
|
|
|
|
|
|
| |
Also print it in the assembly string.
llvm-svn: 231684
|
|
|
|
| |
llvm-svn: 231683
|
|
|
|
| |
llvm-svn: 231663
|
|
|
|
| |
llvm-svn: 231662
|
|
|
|
|
|
| |
Required by OpenGL (ARB_gpu_shader5).
llvm-svn: 231259
|
|
|
|
| |
llvm-svn: 230759
|
|
|
|
|
|
|
|
| |
instructions
This matches the assembly syntax.
llvm-svn: 230758
|
|
|
|
| |
llvm-svn: 230757
|
|
|
|
| |
llvm-svn: 230146
|
|
|
|
|
|
|
|
|
|
| |
The expansion code does the same thing. Since
the operands were not defined with the correct
types, this has the side effect of fixing operand
folding since the expanded pseudo would never use
SGPRs or inline immediates.
llvm-svn: 230072
|
|
|
|
|
|
|
|
|
|
|
| |
This enables a few useful combines that used to only
use fma.
Also since v_mad_f32 apparently does not support denormals,
disable the existing cases that are custom handled if they are
requested.
llvm-svn: 230071
|
|
|
|
|
|
|
|
|
|
|
|
| |
VOP2 declares vsrc1, but VOP3 declares src1.
We can't use the same "ins" if the operands have different names in VOP2
and VOP3 encodings.
This fixes a hang in geometry shaders which spill M0 on VI.
(BTW it doesn't look like M0 needs spilling and the spilling seems
duplicated 3 times)
llvm-svn: 229752
|
|
|
|
| |
llvm-svn: 229688
|
|
|
|
| |
llvm-svn: 229687
|
|
|
|
| |
llvm-svn: 229686
|
|
|
|
| |
llvm-svn: 229685
|
|
|
|
|
|
|
| |
Rename the multiclass since it now applies to the output
modifiers as well.
llvm-svn: 229610
|
|
|
|
| |
llvm-svn: 229605
|
|
|
|
|
|
| |
This version passes the OpenCL conformance test.
llvm-svn: 229239
|
|
|
|
|
|
|
|
|
| |
This should allow finally fixing the f64 fdiv implementation.
Test is disabled for VI since there seems to be a problem with one
of the buffer load instructions on it.
llvm-svn: 229236
|