gm107/ir: optimize 32-bit CONST load to mov

This is not allowed for indirect accesses because the source
GPR might be erased by a subsequent instruction (WaR hazard)
if we don't emit a read dep bar.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
Samuel Pitoiset
2016-11-25 12:25:58 +01:00
parent 948cce0196
commit 8fdb800bda
2 changed files with 17 additions and 0 deletions
@@ -61,6 +61,19 @@ GM107LegalizeSSA::handlePFETCH(Instruction *i)
i->setSrc(1, NULL);
}
void
GM107LegalizeSSA::handleLOAD(Instruction *i)
{
if (i->src(0).getFile() != FILE_MEMORY_CONST)
return;
if (i->src(0).isIndirect(0))
return;
if (typeSizeof(i->dType) != 4)
return;
i->op = OP_MOV;
}
bool
GM107LegalizeSSA::visit(Instruction *i)
{
@@ -68,6 +81,9 @@ GM107LegalizeSSA::visit(Instruction *i)
case OP_PFETCH:
handlePFETCH(i);
break;
case OP_LOAD:
handleLOAD(i);
break;
default:
break;
}
@@ -21,6 +21,7 @@ private:
virtual bool visit(Instruction *);
void handlePFETCH(Instruction *);
void handleLOAD(Instruction *);
};
} // namespace nv50_ir