From: Karol Herbst <karolher...@gmail.com> shader-db changes: total instructions in shared programs : 5894114 -> 5887031 (-0.12%) total gprs used in shared programs : 666558 -> 666514 (-0.01%) total shared used in shared programs : 520416 -> 520416 (0.00%) total local used in shared programs : 53524 -> 53572 (0.09%) total bytes used in shared programs : 54006744 -> 53942072 (-0.12%)
local shared gpr inst bytes helped 3 0 36 936 936 hurt 10 0 5 0 0 increase in local use is related to a bug in the spilling code Signed-off-by: Karol Herbst <karolher...@gmail.com> --- .../drivers/nouveau/codegen/nv50_ir_peephole.cpp | 32 +++++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp index 48cf74950df..18d5456b8fd 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp @@ -636,11 +636,35 @@ ConstantFolding::expr(Instruction *i, return; } break; - case OP_SLCT: - if (a->data.u32 != b->data.u32) + case OP_SLCT: { + CmpInstruction *slct = i->asCmp(); + // slct(a, a, c) -> a + if (a->data.u32 == b->data.u32) { + res.data.u32 = a->data.u32; + break; + } + // slct(-1, 0, c) -> set(c, 0) + if (a->data.u32 == 0xffffffff && + b->data.u32 == 0x0) { + i->op = OP_SET; + i->setSrc(0, i->getSrc(2)); + i->setSrc(2, NULL); + i->dType = TYPE_U32; return; - res.data.u32 = a->data.u32; - break; + } + // slct(0, -1, c) -> !set(c, 0) + if (a->data.u32 == 0x0 && + b->data.u32 == 0xffffffff) { + i->op = OP_SET; + i->swapSources(0, 1); + i->setSrc(0, i->getSrc(2)); + i->setSrc(2, NULL); + i->dType = TYPE_U32; + slct->setCondition(inverseCondCode(slct->getCondition())); + return; + } + return; + } case OP_EXTBF: { int offset = b->data.u32 & 0xff; int width = (b->data.u32 >> 8) & 0xff; -- 2.14.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev