diff options
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp index 3fc1abf18cd..a9172f834b2 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp @@ -192,7 +192,7 @@ LoadPropagation::checkSwapSrc01(Instruction *insn) { const Target *targ = prog->getTarget(); if (!targ->getOpInfo(insn).commutative) - if (insn->op != OP_SET && insn->op != OP_SLCT) + if (insn->op != OP_SET && insn->op != OP_SLCT && insn->op != OP_SUB) return; if (insn->src(1).getFile() != FILE_GPR) return; @@ -232,6 +232,11 @@ LoadPropagation::checkSwapSrc01(Instruction *insn) else if (insn->op == OP_SLCT) insn->asCmp()->setCond = inverseCondCode(insn->asCmp()->setCond); + else + if (insn->op == OP_SUB) { + insn->src(0).mod = insn->src(0).mod ^ Modifier(NV50_IR_MOD_NEG); + insn->src(1).mod = insn->src(1).mod ^ Modifier(NV50_IR_MOD_NEG); + } } bool |