Mesa (master): nv50/ir: convert an ATOM.EXCH without a destination into a store

Ilia Mirkin imirkin at kemper.freedesktop.org
Sun Feb 12 02:08:39 UTC 2017


Module: Mesa
Branch: master
Commit: b38aab50a04b63038a42b7e4da3f8b5e9dbb8f24
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b38aab50a04b63038a42b7e4da3f8b5e9dbb8f24

Author: Ilia Mirkin <imirkin at alum.mit.edu>
Date:   Fri Feb 10 01:55:08 2017 -0500

nv50/ir: convert an ATOM.EXCH without a destination into a store

On SM35 there does not appear to be a way to emit a ATOM.EXCH with a
null destination. This should be functionally equivalent to a plain
store however, so just do that.

Fixes GL45-CTS.compute_shader.atomic-case2 on SM35.

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>

---

 src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
index d79e87d..79403c9 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
@@ -3549,6 +3549,11 @@ DeadCodeElim::visit(BasicBlock *bb)
              i->op == OP_SUREDP ||
              i->op == OP_SUREDB) {
             i->setDef(0, NULL);
+            if (i->op == OP_ATOM && i->subOp == NV50_IR_SUBOP_ATOM_EXCH) {
+               i->cache = CACHE_CV;
+               i->op = OP_STORE;
+               i->subOp = 0;
+            }
          } else if (i->op == OP_LOAD && i->subOp == NV50_IR_SUBOP_LOAD_LOCKED) {
             i->setDef(0, i->getDef(1));
             i->setDef(1, NULL);




More information about the mesa-commit mailing list