Module: Mesa Branch: master Commit: a6d6eff2e6ea2ccd585fe9bf1e159979cd3047df URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6d6eff2e6ea2ccd585fe9bf1e159979cd3047df
Author: Ilia Mirkin <imir...@alum.mit.edu> Date: Wed Oct 12 13:30:57 2016 -0400 nvc0/ir: be more careful about preserving modifiers in SHLADD creation src2 was being given the wrong modifier, and we were not properly managing the modifier on the SHL source either. Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> --- src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp index d88bb34..737bda3 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp @@ -2163,7 +2163,6 @@ LateAlgebraicOpt::tryADDToSHLADD(Instruction *add) Value *src1 = add->getSrc(1); ImmediateValue imm; Instruction *shl; - Modifier mod[2]; Value *src; int s; @@ -2182,20 +2181,19 @@ LateAlgebraicOpt::tryADDToSHLADD(Instruction *add) src = add->getSrc(s); shl = src->getUniqueInsn(); - if (shl->bb != add->bb || shl->usesFlags() || shl->subOp) + if (shl->bb != add->bb || shl->usesFlags() || shl->subOp || shl->src(0).mod) return false; if (!shl->src(1).getImmediate(imm)) return false; - mod[0] = add->src(0).mod; - mod[1] = add->src(1).mod; - add->op = OP_SHLADD; add->setSrc(2, add->src(!s)); - add->src(2).mod = mod[s]; - + // SHL can't have any modifiers, but the ADD source may have had + // one. Preserve it. add->setSrc(0, shl->getSrc(0)); + if (s == 1) + add->src(0).mod = add->src(1).mod; add->setSrc(1, new_ImmediateValue(shl->bb->getProgram(), imm.reg.data.u32)); add->src(1).mod = Modifier(0); _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit