| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This allows folding of sequences like:
s[0:1] = s_mov_b64 4
v_add_i32 v0, s0, v0
v_addc_u32 v1, s1, v1
into
v_add_i32 v0, 4, v0
v_add_i32 v1, 0, v1
llvm-svn: 225369
|
|
|
|
| |
llvm-svn: 223614
|
|
|
|
|
|
|
|
|
| |
There are 3 changes:
- Convert 32-bit S_LSHL/LSHR/ASHR to their V_*REV variants for VI
- Lower RSQ_CLAMP for VI
- Don't generate MIN/MAX_LEGACY on VI
llvm-svn: 223604
|
|
|
|
| |
llvm-svn: 223125
|
|
|
|
|
|
|
|
|
|
|
| |
- 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 partially makes up for not having address spaces
used for alias analysis in some simple cases.
This is not yet enabled by default so shouldn't change anything yet.
llvm-svn: 222286
|
|
|
|
| |
llvm-svn: 222012
|
|
|
|
|
|
|
|
| |
The generic code trying to use findCommutedOpIndices won't
understand that it needs to swap the modifier operands also,
so it should fail if they are set.
llvm-svn: 220064
|
|
|
|
|
|
| |
Move enums to SIDefines.h
llvm-svn: 218610
|
|
|
|
| |
llvm-svn: 218533
|
|
|
|
|
|
|
|
|
|
|
| |
The base implementation of commuteInstruction is used
in some cases, but it turns out this has been broken for a
long time since modifiers were inserted between the real operands.
The base implementation of commuteInstruction also fails on immediates,
which also needs to be fixed.
llvm-svn: 218530
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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: 217968
|
|
|
|
| |
llvm-svn: 217777
|
|
|
|
|
|
|
|
| |
Only handles LDS atomics for now, and will be used
to replace atomics with no uses with the no return
versions.
llvm-svn: 217378
|
|
|
|
|
|
| |
No functionality change. Changes made by clang-tidy + some manual cleanup.
llvm-svn: 217028
|
|
|
|
| |
llvm-svn: 216220
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Ordinarily (shl (add x, c1), c2) -> (add (shl x, c2), c1 << c2)
is only done if the add has one use. If the resulting constant
add can be folded into an addressing mode, force this to happen
for the pointer operand.
This ends up happening a lot because of how LDS objects are allocated.
Since the globals are allocated next to each other, acessing the first
element of the second object is directly indexed by a shifted pointer.
llvm-svn: 215739
|
|
|
|
|
|
|
|
|
|
| |
Add header guards to files that were missing guards. Remove #endif comments
as they don't seem common in LLVM (we can easily add them back if we decide
they're useful)
Changes made by clang-tidy with minor tweaks.
llvm-svn: 215558
|
|
|
|
|
|
|
| |
This saves us from having to copy a 64-bit 0 value into VGPRs for
BUFFER_* instruction which only have a 12-bit immediate offset.
llvm-svn: 215399
|
|
|
|
|
|
|
|
| |
This currently has a noticable effect on the kernel argument loads.
LDS and global loads are more problematic, I think because of how copies
are currently inserted to ensure that the address is a VGPR.
llvm-svn: 214942
|
|
|
|
|
|
|
|
|
|
| |
Abs/neg folding has moved out of foldOperands and into the instruction
selection phase using complex patterns. As a consequence of this
change, we now prefer to select the 64-bit encoding for most
instructions and the modifier operands have been dropped from
integer VOP3 instructions.
llvm-svn: 214467
|
|
|
|
|
|
|
|
|
|
|
|
| |
We were incorrectly assuming that all VOP2 instructions can read SGPRs
in Src0, but this is not true for instructions that read carry-in from
VCC.
The old logic has been replaced with new logic which checks the defined
register classes of the VOP2 instruction to determine whether or not to
legalize the operands.
llvm-svn: 214465
|
|
|
|
|
|
|
| |
This will prevent us from using extra MOV instructions once we prefer
selecting 64-bit instructions.
llvm-svn: 214464
|
|
|
|
|
|
|
|
| |
We were commuting the instruction by still shrinking it using the
original opcode.
NOTE: This is a candidate for the 3.5 branch.
llvm-svn: 214463
|
|
|
|
| |
llvm-svn: 214225
|
|
|
|
|
|
| |
Also add missing comments about how the flags work.
llvm-svn: 214195
|
|
|
|
|
|
| |
All the others use bool, so these should too.
llvm-svn: 214106
|
|
|
|
|
|
| |
This pass converts 64-bit instructions to 32-bit when possible.
llvm-svn: 213561
|
|
|
|
| |
llvm-svn: 213551
|
|
|
|
| |
llvm-svn: 213472
|
|
|
|
| |
llvm-svn: 210869
|
|
|
|
| |
llvm-svn: 210568
|
|
|
|
| |
llvm-svn: 210476
|
|
|
|
|
|
|
|
| |
This will allow us to use a single MachineInstr to represent
instructions which behave the same but have different encodings
on some subtargets.
llvm-svn: 209028
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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: 207660
|
|
|
|
|
|
| |
'final' and leave 'virtual' on some methods that are marked virtual without overriding anything and have no obvious overrides themselves. R600 edition
llvm-svn: 207503
|
|
|
|
| |
llvm-svn: 207394
|
|
|
|
| |
llvm-svn: 206547
|
|
|
|
| |
llvm-svn: 205244
|
|
|
|
| |
llvm-svn: 205188
|
|
|
|
|
|
|
| |
No longer asserts, but now you get moves loading legal immediates
into the split 32-bit operations.
llvm-svn: 204661
|
|
|
|
|
|
|
|
| |
Try to match scalar and first like the other instructions.
Expand 64-bit ands to a pair of 32-bit ands since that is not
available on the VALU.
llvm-svn: 204660
|
|
|
|
| |
llvm-svn: 204651
|
|
|
|
| |
llvm-svn: 204476
|
|
|
|
| |
llvm-svn: 204357
|
|
|
|
| |
llvm-svn: 203518
|