mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
gm107/ir: emit RED instead of ATOM when no dst
This is similar to NVC0 and GK110 emitters where we emit reduction operations instead of atomic operations when the destination is not used. Found after writing some tests which check if performance counters return the expected value. In that case, gred_count returned 0 on gm107 while at least gk106 returned the correct value. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
cfb5a9ab23
commit
a295364596
1 changed files with 28 additions and 1 deletions
|
|
@ -180,6 +180,7 @@ private:
|
|||
void emitIPA();
|
||||
void emitATOM();
|
||||
void emitATOMS();
|
||||
void emitRED();
|
||||
void emitCCTL();
|
||||
|
||||
void emitPIXLD();
|
||||
|
|
@ -2495,6 +2496,29 @@ CodeEmitterGM107::emitATOMS()
|
|||
emitGPR (0x00, insn->def(0));
|
||||
}
|
||||
|
||||
void
|
||||
CodeEmitterGM107::emitRED()
|
||||
{
|
||||
unsigned dType;
|
||||
|
||||
switch (insn->dType) {
|
||||
case TYPE_U32: dType = 0; break;
|
||||
case TYPE_S32: dType = 1; break;
|
||||
case TYPE_U64: dType = 2; break;
|
||||
case TYPE_F32: dType = 3; break;
|
||||
case TYPE_B128: dType = 4; break;
|
||||
case TYPE_S64: dType = 5; break;
|
||||
default: assert(!"unexpected dType"); dType = 0; break;
|
||||
}
|
||||
|
||||
emitInsn (0xebf80000);
|
||||
emitField(0x30, 1, insn->src(0).getIndirect(0)->getSize() == 8);
|
||||
emitField(0x17, 3, insn->subOp);
|
||||
emitField(0x14, 3, dType);
|
||||
emitADDR (0x08, 0x1c, 20, 0, insn->src(0));
|
||||
emitGPR (0x00, insn->src(1));
|
||||
}
|
||||
|
||||
void
|
||||
CodeEmitterGM107::emitCCTL()
|
||||
{
|
||||
|
|
@ -3237,7 +3261,10 @@ CodeEmitterGM107::emitInstruction(Instruction *i)
|
|||
if (insn->src(0).getFile() == FILE_MEMORY_SHARED)
|
||||
emitATOMS();
|
||||
else
|
||||
emitATOM();
|
||||
if (!insn->defExists(0) && insn->subOp < NV50_IR_SUBOP_ATOM_CAS)
|
||||
emitRED();
|
||||
else
|
||||
emitATOM();
|
||||
break;
|
||||
case OP_CCTL:
|
||||
emitCCTL();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue