| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously print+verify passes were added in a very unsystematic way, which is
annoying when debugging as you miss intermediate steps and allows bugs to stay
unnotice when no verification is performed.
To make this change practical I added the possibility to explicitely disable
verification. I used this option on all places where no verification was
performed previously (because alot of places actually don't pass the
MachineVerifier).
In the long term these problems should be fixed properly and verification
enabled after each pass. I'll enable some more verification in subsequent
commits.
llvm-svn: 224042
|
|
|
|
| |
llvm-svn: 223940
|
|
|
|
| |
llvm-svn: 223722
|
|
|
|
| |
llvm-svn: 223721
|
|
|
|
|
|
| |
There's nothing else to bother trying to shrink these.
llvm-svn: 223686
|
|
|
|
|
|
| |
This is only a workaround.
llvm-svn: 223615
|
|
|
|
| |
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: 223603
|
|
|
|
| |
llvm-svn: 223602
|
|
|
|
|
|
| |
This was changed in r223323.
llvm-svn: 223579
|
|
|
|
|
|
|
|
| |
Use the MCAsmInfo instead of the DataLayout, and allow
specifying a custom prefix for labels specifically. HSAIL
requires that labels begin with @, but global symbols with &.
llvm-svn: 223323
|
|
|
|
|
|
|
| |
This pass needs to be run after PrologEpilogInserter, because
that pass may inserter spill code which reads or writes memory.
llvm-svn: 223253
|
|
|
|
| |
llvm-svn: 223252
|
|
|
|
| |
llvm-svn: 223237
|
|
|
|
|
|
|
| |
This shows up when operands required to be passed in VCC are copied
to.
llvm-svn: 223208
|
|
|
|
|
|
| |
This can be a COPY to a physical register, such as VCC
llvm-svn: 223207
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
| |
The loop is over the operands of an instruction, and checks the
register with the sub reg index of the dest register. This probably
meant to be checking the sub reg index of the same operand.
llvm-svn: 223205
|
|
|
|
| |
llvm-svn: 223204
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
m0 is treated as a virtual register class with a single register
rather than the physical register it really is. This was updating
the live range of the used virtual copy of m0 from the first ds_read
instruction, and leaving the unused copy unchanged. This resulted in a
"Live segment doesn't end at a valid instruction" verifier error because
the erased instructions. Update the live range of the second copy (which
should be dead).
No test since I'm not sure how to trigger this with SIFoldOperands
enabled.
llvm-svn: 223203
|
|
|
|
|
|
|
|
| |
We just needed to remove the assertion in
AMDGPURegisterInfo::getFrameRegister(), which is called when
initializing the parser for inline assembly.
llvm-svn: 223197
|
|
|
|
|
|
| |
This matches SC's behavior.
llvm-svn: 223194
|
|
|
|
| |
llvm-svn: 223160
|
|
|
|
| |
llvm-svn: 223154
|
|
|
|
| |
llvm-svn: 223144
|
|
|
|
|
|
| |
We don't support scratch buffers yet with HSA.
llvm-svn: 223130
|
|
|
|
| |
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 was trying to create an MVT with 3x vectors which
created an invalid EVT
llvm-svn: 222942
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This sort of doesn't matter since the setcc type is i1, but
this previously was using the default UndefinedBooleanContent. This
makes it more consistent with R600. This enables more optimizations
which typically give up on UndefinedBooleanContent. For example,
there is already a special case target DAG combine for
setcc + sext which can be eliminated in favor of what the generic
DAG combiner can do if it assumes boolean values are sign extended.
Since -1 is an inline immediate, using it is basically free and the
backend already uses it when a boolean value is needed in a wider type.
llvm-svn: 222850
|
|
|
|
|
|
|
|
|
| |
This fixes moving boolean constants into registers before operating
on them. They get permuted and shrunk down to e32 anyway later. This
is a temporary fix until the patch that removes these pseudos is
committed.
llvm-svn: 222844
|
|
|
|
| |
llvm-svn: 222801
|
|
|
|
| |
llvm-svn: 222789
|
|
|
|
|
|
|
|
| |
tests to start failing.
Original commit log: R600/SI: Disable commutativity for MIN/MAX_LEGACY
llvm-svn: 222753
|
|
|
|
| |
llvm-svn: 222746
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
has been alerted to the warning, in case this variable is meant to be used. Fixes -Werror builds in the meantime.
llvm-svn: 222649
|
|
|
|
| |
llvm-svn: 222631
|
|
|
|
|
|
|
| |
i1 is not a legal type on Evergreen, so this combine proceeded
and tried to produce a bitcast between i1 and i8.
llvm-svn: 222630
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
This pass attempts to fold the source operands of mov and copy
instructions into their uses.
llvm-svn: 222581
|
|
|
|
| |
llvm-svn: 222579
|
|
|
|
|
|
|
|
|
|
|
|
| |
A register operand that has a common sub-class with its instruction's
defined register class is not always legal. For example,
SReg_32 and M0Reg both have a common sub-class, but we can't
use an SReg_32 in instructions that expect a M0Reg.
This prevents the llvm.SI.sendmsg.ll test from failing when the fold
operand pass is added.
llvm-svn: 222368
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
| |
This should expose more of the actually used VALU
instructions to the machine optimization passes.
This also should help getting i1 handling into a better state.
For not entirly understood reasons, this fixes the split-scalar-i64-add.ll
test where a 64-bit add would only partially be moved to the VALU
resulting in use of undefined VCC.
llvm-svn: 222256
|
|
|
|
| |
llvm-svn: 222253
|
|
|
|
|
|
|
|
|
| |
This was resulting in use of a register after a kill.
For some reason this showed up as a problem in many tests
when moving the SIFixSGPRCopies pass closer to instruction
selection.
llvm-svn: 222175
|