From dd4b44efc04413453e4cbf78434b29392eb148a9 Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Tue, 17 May 2016 03:27:02 -0400 Subject: [PATCH] nvc0/ir: fix shared atomic lowering to preserve shared memory location We were always doing atomics on shared memory location 0 instead of the originally supplied location. Make sure to pass through the original symbol and any indirection. Signed-off-by: Ilia Mirkin Reviewed-by: Samuel Pitoiset Cc: mesa-stable@lists.freedesktop.org # note: expect minor conflict --- .../nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 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 5e5eacb9824..0a3964c3b04 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp @@ -1129,8 +1129,8 @@ NVC0LoweringPass::handleSharedATOMNVE4(Instruction *atom) bld.setPosition(tryLockBB, true); Instruction *ld = - bld.mkLoad(TYPE_U32, atom->getDef(0), - bld.mkSymbol(FILE_MEMORY_SHARED, 0, TYPE_U32, 0), NULL); + bld.mkLoad(TYPE_U32, atom->getDef(0), atom->getSrc(0)->asSym(), + atom->getIndirect(0, 0)); ld->setDef(1, bld.getSSA(1, FILE_PREDICATE)); ld->subOp = NV50_IR_SUBOP_LOAD_LOCKED; @@ -1186,9 +1186,8 @@ NVC0LoweringPass::handleSharedATOMNVE4(Instruction *atom) } Instruction *st = - bld.mkStore(OP_STORE, TYPE_U32, - bld.mkSymbol(FILE_MEMORY_SHARED, 0, TYPE_U32, 0), - NULL, stVal); + bld.mkStore(OP_STORE, TYPE_U32, atom->getSrc(0)->asSym(), + atom->getIndirect(0, 0), stVal); st->setDef(0, pred->getDef(0)); st->subOp = NV50_IR_SUBOP_STORE_UNLOCKED; @@ -1225,8 +1224,8 @@ NVC0LoweringPass::handleSharedATOM(Instruction *atom) bld.setPosition(tryLockAndSetBB, true); Instruction *ld = - bld.mkLoad(TYPE_U32, atom->getDef(0), - bld.mkSymbol(FILE_MEMORY_SHARED, 0, TYPE_U32, 0), NULL); + bld.mkLoad(TYPE_U32, atom->getDef(0), atom->getSrc(0)->asSym(), + atom->getIndirect(0, 0)); ld->setDef(1, bld.getSSA(1, FILE_PREDICATE)); ld->subOp = NV50_IR_SUBOP_LOAD_LOCKED; @@ -1283,9 +1282,8 @@ NVC0LoweringPass::handleSharedATOM(Instruction *atom) } Instruction *st = - bld.mkStore(OP_STORE, TYPE_U32, - bld.mkSymbol(FILE_MEMORY_SHARED, 0, TYPE_U32, 0), - NULL, stVal); + bld.mkStore(OP_STORE, TYPE_U32, atom->getSrc(0)->asSym(), + atom->getIndirect(0, 0), stVal); st->setPredicate(CC_P, ld->getDef(1)); st->subOp = NV50_IR_SUBOP_STORE_UNLOCKED; -- 2.30.2