From ea22ac23e04c093f9dd0bb8f9b946e61d79824ff Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Sat, 12 Aug 2017 00:02:34 -0400 Subject: nvc0/ir: unlink values pre- and post-call to division function While technically correct, this can lead to e.g. getImmediate assuming that it can walk up the value chain. It could be fixed to not do this, but it seems easier and less error-prone to just not link the two values to save on one LValue object. Signed-off-by: Ilia Mirkin --- src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp index 64d743708a6..c8f07015728 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp @@ -45,11 +45,10 @@ NVC0LegalizeSSA::handleDIV(Instruction *i) { FlowInstruction *call; int builtin; - Value *def[2]; bld.setPosition(i, false); - def[0] = bld.mkMovToReg(0, i->getSrc(0))->getDef(0); - def[1] = bld.mkMovToReg(1, i->getSrc(1))->getDef(0); + bld.mkMovToReg(0, i->getSrc(0)); + bld.mkMovToReg(1, i->getSrc(1)); switch (i->dType) { case TYPE_U32: builtin = NVC0_BUILTIN_DIV_U32; break; case TYPE_S32: builtin = NVC0_BUILTIN_DIV_S32; break; @@ -57,7 +56,7 @@ NVC0LegalizeSSA::handleDIV(Instruction *i) return; } call = bld.mkFlow(OP_CALL, NULL, CC_ALWAYS, NULL); - bld.mkMov(i->getDef(0), def[(i->op == OP_DIV) ? 0 : 1]); + bld.mkMovFromReg(i->getDef(0), i->op == OP_DIV ? 0 : 1); bld.mkClobber(FILE_GPR, (i->op == OP_DIV) ? 0xe : 0xd, 2); bld.mkClobber(FILE_PREDICATE, (i->dType == TYPE_S32) ? 0xf : 0x3, 0); -- cgit v1.2.3