Mesa (master): nv50/ir: also do PostRaLoadPropagation for FMA

Ilia Mirkin imirkin at kemper.freedesktop.org
Sat Apr 1 03:59:23 UTC 2017


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

Author: Karol Herbst <karolherbst at gmail.com>
Date:   Sun Mar 26 21:46:01 2017 +0200

nv50/ir: also do PostRaLoadPropagation for FMA

Helps Feral-ported games, due to their use of fma()

shader-db changes:
total instructions in shared programs : 3934925 -> 3934327 (-0.02%)
total gprs used in shared programs    : 481563 -> 481563 (0.00%)
total local used in shared programs   : 27469 -> 27469 (0.00%)
total bytes used in shared programs   : 36061888 -> 36056504 (-0.01%)

                local        gpr       inst      bytes
    helped           0           0         228         228
      hurt           0           0           0           0

Signed-off-by: Karol Herbst <karolherbst at gmail.com>
Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

---

 src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 1 +
 src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp       | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
index 7cf0166cbb..4c92a1efb5 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
@@ -3307,6 +3307,7 @@ bool
 PostRaLoadPropagation::visit(Instruction *i)
 {
    switch (i->op) {
+   case OP_FMA:
    case OP_MAD:
       if (prog->getTarget()->getChipset() < 0xc0)
          handleMADforNV50(i);
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp
index d36c8531a2..193628cfbd 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_ra.cpp
@@ -1471,7 +1471,7 @@ GCRA::allocateRegisters(ArrayList& insns)
          if (lval->inFile(FILE_GPR) && lval->getInsn() != NULL &&
              prog->getTarget()->getChipset() < 0xc0) {
             Instruction *insn = lval->getInsn();
-            if (insn->op == OP_MAD || insn->op == OP_SAD)
+            if (insn->op == OP_MAD || insn->op == OP_FMA || insn->op == OP_SAD)
                // Short encoding only possible if they're all GPRs, no need to
                // affect them otherwise.
                if (insn->flagsDef < 0 &&




More information about the mesa-commit mailing list