| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 229235
|
|
|
|
|
|
| |
We were previously hard-coding soffset to 0.
llvm-svn: 228775
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If whole quad mode isn't enabled for these, the level of detail is
calculated incorrectly for pixels along diagonal triangle edges, causing
artifacts.
v2: Use a TSFlag instead of lots of switch cases
v3: Add test coverage
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=88642
Reviewed-by: Tom Stellard <tom@stellard.net>
llvm-svn: 228372
|
|
|
|
| |
llvm-svn: 228273
|
|
|
|
|
|
|
| |
Also remove hasPostISelHook=1 from V_LSHL_B32. It's defined by InstSI already.
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
llvm-svn: 228039
|
|
|
|
|
|
|
| |
SI only has standard versions. VI only has REV versions.
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
llvm-svn: 228037
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This can happen when a REV instruction is commuted.
The trick is not to define the _vi versions of instructions, which has these
consequences:
- code generation will always fail if a pseudo cannot be lowered
(very useful to catch bugs where an unsupported instruction somehow makes
it to the printer)
- ability to query if a pseudo can be lowered, which is done in commuteOpcode
to prevent REV from commuting to non-REV on VI
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
llvm-svn: 227990
|
|
|
|
|
|
|
|
|
|
|
| |
The getCommute* functions are only used with pseudos, so this commit doesn't
change anything.
The issue with missing non-rev versions of shift instructions on VI will fixed
separately.
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
llvm-svn: 227989
|
|
|
|
|
|
|
|
|
|
|
|
| |
- V_MAC_LEGACY_F32 exists on VI, but it's VOP3-only.
- Define CVT_PK opcodes which are different between SI and VI. These are
unused. The idea is to define all chip differences.
v2: keep V_MUL_LO_U32
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
llvm-svn: 227988
|
|
|
|
|
|
| |
without a Function argument.
llvm-svn: 227638
|
|
|
|
| |
llvm-svn: 227213
|
|
|
|
|
|
|
| |
Each class is split into two: one adds let statements around non-pseudos,
and the other one specifies the parameters.
llvm-svn: 227211
|
|
|
|
| |
llvm-svn: 227210
|
|
|
|
|
|
| |
This enables a lot of existing patterns for VI.
llvm-svn: 227209
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 226230
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This removes some duplicated classes and definitions.
These instructions are defined:
_e32 // pseudo
_e32_si
_e64 // pseudo
_e64_si
_e64_vi
llvm-svn: 226191
|
|
|
|
| |
llvm-svn: 226190
|
|
|
|
|
|
|
|
| |
These are VOP3-only on VI.
The new multiclass doesn't define VOP3 versions of VOP2 instructions.
llvm-svn: 226189
|
|
|
|
| |
llvm-svn: 226186
|
|
|
|
| |
llvm-svn: 225988
|
|
|
|
|
|
|
|
| |
The machine scheduler is still disabled by default.
The schedule model is not complete yet, and could be improved.
llvm-svn: 225913
|
|
|
|
|
|
|
|
| |
The backend now assumes that all immediates are integers. This allows
us to simplify immediate handling code, becasue we no longer need to
handle fp and integer immediates differently.
llvm-svn: 225844
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
This is used to simplify the SIFoldOperands pass and make it easier to
fold immediates.
llvm-svn: 225373
|
|
|
|
| |
llvm-svn: 225305
|
|
|
|
| |
llvm-svn: 224458
|
|
|
|
|
|
|
|
| |
The returned operand needs to be permuted for the unordered
compares. Also fix incorrectly producing fmin_legacy / fmax_legacy
for f64, which don't exist.
llvm-svn: 224094
|
|
|
|
|
|
|
|
| |
This is nice for the instruction patterns, but it complicates
min / max matching. The select doesn't have the correct type and would
require looking through the bitcasts for the real float operands.
llvm-svn: 224092
|
|
|
|
| |
llvm-svn: 224067
|
|
|
|
|
|
|
| |
This saves a second compare and an and / or by using
the unordered comparison instructions.
llvm-svn: 224066
|
|
|
|
| |
llvm-svn: 224065
|
|
|
|
| |
llvm-svn: 223614
|
|
|
|
| |
llvm-svn: 223603
|
|
|
|
| |
llvm-svn: 223602
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Select i1 logical ops directly to 64-bit SALU instructions.
Vector i1 values are always really in SGPRs, with each
bit for each item in the wave. This saves about 4 instructions
when and/or/xoring any condition, and also helps write conditions
that need to be passed in vcc.
This should work correctly now that the SGPR live range
fixing pass works. More work is needed to eliminate the VReg_1
pseudo regclass and possibly the entire SILowerI1Copies pass.
llvm-svn: 223206
|
|
|
|
|
|
|
|
| |
tests to start failing.
Original commit log: R600/SI: Disable commutativity for MIN/MAX_LEGACY
llvm-svn: 222753
|
|
|
|
| |
llvm-svn: 222746
|
|
|
|
|
|
|
| |
We need to use a s_mov_b32 rather than a copy, so that CSE will
eliminate redundant moves to the m0 register.
llvm-svn: 222584
|
|
|
|
|
|
|
|
|
|
|
|
| |
This s_mov_b32 will write to a virtual register from the M0Reg
class and all the ds instructions now take an extra M0Reg explicit
argument.
This change is necessary to prevent issues with the scheduler
mixing together instructions that expect different values in the m0
registers.
llvm-svn: 222583
|
|
|
|
| |
llvm-svn: 222579
|
|
|
|
| |
llvm-svn: 222037
|
|
|
|
| |
llvm-svn: 222032
|
|
|
|
| |
llvm-svn: 222012
|
|
|
|
|
|
|
| |
This was done using the Sparc and PowerPC AsmParsers as guides. So far it
is very simple and only supports sopp instructions.
llvm-svn: 221994
|
|
|
|
|
|
| |
select_cc is expanded on SI, so this was never matched.
llvm-svn: 221941
|
|
|
|
|
|
|
|
|
|
|
| |
These were directly using the old base instruction
class, and specifying the wrong register classes
for operands. The operands can be the other special
inputs besides SGPRs. The op name was also being
directly used for the asm string, so this was printed
without any operands.
llvm-svn: 221921
|
|
|
|
|
|
|
| |
It's not necessary. Also use complex patterns to allow
src modifier usage.
llvm-svn: 221916
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
e.g. v_mad_f32 a, b, c -> v_mad_f32 b, a, c
This simplifies matching v_madmk_f32.
This looks somewhat surprising, but it appears to be
OK to do this. We can commute src0 and src1 in all
of these instructions, and that's all that appears
to matter.
llvm-svn: 221910
|
|
|
|
| |
llvm-svn: 221382
|