| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 229152
|
|
|
|
| |
llvm-svn: 229150
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
What this does is that if you accidentally select these instructions on VI,
the code generation will fail, because the pseudo -> _vi mapping will be
undefined.
The idea is to be able to catch possible future bugs easily.
Tested-by: Michel Dänzer <michel.daenzer@amd.com>
llvm-svn: 228038
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
Only pseudos have patterns on them.
Also don't set the asm string for VINTRP_Pseudo. All pseudos should have empty
asm.
This matches what all other multiclasses do.
llvm-svn: 227212
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
This defines the SI versions only, so it shouldn't change anything.
There are no changes other than using the new multiclasses, adding missing
mayLoad/mayStore, and formatting fixes.
llvm-svn: 227208
|
|
|
|
|
|
|
| |
Instructions with 1 operand can still use source modifiers,
so make sure we don't print an extra comma afterwards.
llvm-svn: 226226
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This removes some duplicated classes and definitions.
These instructions are defined:
_e32 // pseudo
_e32_si
_e64 // pseudo
_e64_si
_e64_vi
llvm-svn: 226191
|
|
|
|
|
|
|
|
| |
These are VOP3-only on VI.
The new multiclass doesn't define VOP3 versions of VOP2 instructions.
llvm-svn: 226189
|
|
|
|
|
|
|
|
| |
v2: modify hasVALU32BitEncoding instead
v3: - add pseudoToMCOpcode helper to AMDGPUInstInfo, which is used by both
hasVALU32BitEncoding and AMDGPUMCInstLower::lower
- report an error if a pseudo can't be lowered
llvm-svn: 226188
|
|
|
|
| |
llvm-svn: 225988
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 225305
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 224458
|
|
|
|
| |
llvm-svn: 223722
|
|
|
|
| |
llvm-svn: 223721
|
|
|
|
| |
llvm-svn: 223614
|
|
|
|
| |
llvm-svn: 223603
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
- Fix missing SALU format bits
- Remove unused isSALUInstr
- Add isVALU
- Switch isDS to use a bit like the others
- Move SIInstrInfo::is* functions to header
- Reorder so they are approximately sorted by type (SALU, VALU, memory)
llvm-svn: 223038
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
| |
Assuming unmodeled side effects interferes with some scheduling
opportunities.
Don't put it in the base class of DS instructions since there
are a few weird effecting, non load/store instructions there.
llvm-svn: 222285
|
|
|
|
| |
llvm-svn: 222012
|
|
|
|
| |
llvm-svn: 221922
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 221387
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This matches the format produced by the AMD proprietary driver.
//==================================================================//
// Shell script for converting .ll test cases: (Pass the .ll files
you want to convert to this script as arguments).
//==================================================================//
; This was necessary on my system so that A-Z in sed would match only
; upper case. I'm not sure why.
export LC_ALL='C'
TEST_FILES="$*"
MATCHES=`grep -v Patterns SIInstructions.td | grep -o '"[A-Z0-9_]\+["e]' | grep -o '[A-Z0-9_]\+' | sort -r`
for f in $TEST_FILES; do
# Check that there are SI tests:
grep -q -e 'verde' -e 'bonaire' -e 'SI' -e 'tahiti' $f
if [ $? -eq 0 ]; then
for match in $MATCHES; do
sed -i -e "s/\([ :]$match\)/\L\1/" $f
done
# Try to get check lines with partial instruction names
sed -i 's/\(;[ ]*SI[A-Z\\-]*: \)\([A-Z_0-9]\+\)/\1\L\2/' $f
fi
done
sed -i -e 's/bb0_1/BB0_1/g' ../../../test/CodeGen/R600/infinite-loop.ll
sed -i -e 's/SI-NOT: bfe/SI-NOT: {{[^@]}}bfe/g'../../../test/CodeGen/R600/llvm.AMDGPU.bfe.*32.ll ../../../test/CodeGen/R600/sext-in-reg.ll
sed -i -e 's/exp_IEEE/EXP_IEEE/g' ../../../test/CodeGen/R600/llvm.exp2.ll
sed -i -e 's/numVgprs/NumVgprs/g' ../../../test/CodeGen/R600/register-count-comments.ll
sed -i 's/\(; CHECK[-NOT]*: \)\([A-Z_0-9]\+\)/\1\L\2/' ../../../test/CodeGen/R600/select64.ll ../../../test/CodeGen/R600/sgpr-copy.ll
//==================================================================//
// Shell script for converting .td files (run this last)
//==================================================================//
export LC_ALL='C'
sed -i -e '/Patterns/!s/\("[A-Z0-9_]\+[ "e]\)/\L\1/g' SIInstructions.td
sed -i -e 's/"EXP/"exp/g' SIInstrInfo.td
llvm-svn: 221350
|
|
|
|
| |
llvm-svn: 221291
|
|
|
|
|
|
|
| |
Match SC by using offset/offset0/offset1 and printing
in decimal.
llvm-svn: 219537
|
|
|
|
| |
llvm-svn: 219256
|
|
|
|
| |
llvm-svn: 219255
|
|
|
|
| |
llvm-svn: 219254
|
|
|
|
| |
llvm-svn: 219253
|
|
|
|
| |
llvm-svn: 218767
|
|
|
|
| |
llvm-svn: 218766
|
|
|
|
| |
llvm-svn: 218765
|
|
|
|
|
|
|
|
| |
No tests for omod since nothing uses it yet, but
this should get rid of the remaining annoying trailing
zeros after some instructions.
llvm-svn: 218692
|