Hi Karol, one question inline.
On 13.08.2016 12:02, Karol Herbst wrote:
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 <karolher...@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
are there 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); }
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev