[Mesa-dev] [PATCH 3/4] nvc0/ir: dual issue two min/max instructions
Karol Herbst
karolherbst at gmail.com
Sat Aug 13 10:02:37 UTC 2016
min/max pairs can be dual issued on Kepler1
changes for ./GpuTest /test=pixmark_piano /benchmark /no_scorebox /msaa=0
/benchmark_duration_ms=60000 /width=1024 /height=640:
without dual_issue pass:
inst_executed: 1.03G
inst_issued1: 614M -> 580M
inst_issued2: 213M -> 230M
score: 1021 -> 1030
with dual_issue pass:
inst_executed: 1.03G
inst_issued1: 535M -> 500M
inst_issued2: 254M -> 271M
score: 1052 -> 1056
Signed-off-by: Karol Herbst <karolherbst at gmail.com>
---
.../drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp
index 8ce8c19..ea44e6f 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp
@@ -628,9 +628,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);
}
--
2.9.2
More information about the mesa-dev
mailing list