total instructions in shared programs : 1922112 -> 1921966 (-0.01%)
total gprs used in shared programs    : 251863 -> 251863 (0.00%)
total local used in shared programs   : 5673 -> 5673 (0.00%)
total bytes used in shared programs   : 17624080 -> 17622728 (-0.01%)

                local        gpr       inst      bytes
    helped           0           0          62          62
      hurt           0           0           0           0

v2: make the diff more clear and use swapSources
Signed-off-by: Karol Herbst <nouv...@karolherbst.de>
---
 src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp 
b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
index ced9904..7b51ce0 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
@@ -2881,6 +2881,17 @@ NV50PostRaConstantFolding::visit(BasicBlock *bb)
          def = i->getSrc(1)->getInsn();
          if (def && def->op == OP_SPLIT && typeSizeof(def->sType) == 4)
             def = def->getSrc(0)->getInsn();
+         if (!def || def->op != OP_MOV || def->src(0).getFile() != 
FILE_IMMEDIATE) {
+            /* maybe we can swap it */
+            def = i->getSrc(0)->getInsn();
+            if (def && def->op == OP_SPLIT && typeSizeof(def->sType) == 4)
+               def = def->getSrc(0)->getInsn();
+            if (!def || def->op != OP_MOV || def->src(0).getFile() != 
FILE_IMMEDIATE)
+               break;
+
+            i->swapSources(0, 1);
+         }
+
          if (def && def->op == OP_MOV && def->src(0).getFile() == 
FILE_IMMEDIATE) {
             vtmp = i->getSrc(1);
             if (typeSizeof(i->sType) >= 2) {
-- 
2.7.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to