nvc0/ir: allow min/max instructions to be dual-issued in pairs

changes for GpuTest /test=pixmark_piano /benchmark /no_scorebox /msaa=0
/benchmark_duration_ms=60000 /width=1024 /height=640:

inst_executed: 1.03G
inst_issued1: 614M -> 580M
inst_issued2: 213M -> 230M

score: 1021 -> 1030

Signed-off-by: Karol Herbst <karolherbst@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
Karol Herbst
2016-08-13 11:54:52 +02:00
committed by Ilia Mirkin
parent 7e891f90c7
commit ae7eb93e6c
@@ -625,9 +625,19 @@ bool TargetNVC0::canDualIssue(const Instruction *a, const Instruction *b) const
if (a->op == OP_MOV || b->op == OP_MOV)
return true;
if (clA == clB) {
// only F32 arith or integer additions
if (clA != OPCLASS_ARITH)
switch (clA) {
// there might be more
case OPCLASS_COMPARE:
if ((a->op == OP_MIN || a->op == OP_MAX) &&
(b->op == OP_MIN || b->op == OP_MAX))
break;
return false;
case OPCLASS_ARITH:
break;
default:
return false;
}
// only F32 arith or integer additions
return (a->dType == TYPE_F32 || a->op == OP_ADD ||
b->dType == TYPE_F32 || b->op == OP_ADD);
}