Mesa (master): i965/peephole_ffma: Only match a mul+add if none of the ops are exact

Jason Ekstrand jekstrand at kemper.freedesktop.org
Mon Apr 4 20:46:50 UTC 2016


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

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Mon Mar 28 11:47:27 2016 -0700

i965/peephole_ffma: Only match a mul+add if none of the ops are exact

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 src/mesa/drivers/dri/i965/brw_nir_opt_peephole_ffma.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/brw_nir_opt_peephole_ffma.c b/src/mesa/drivers/dri/i965/brw_nir_opt_peephole_ffma.c
index 6e8b1f9..22ff2e3 100644
--- a/src/mesa/drivers/dri/i965/brw_nir_opt_peephole_ffma.c
+++ b/src/mesa/drivers/dri/i965/brw_nir_opt_peephole_ffma.c
@@ -84,6 +84,17 @@ get_mul_for_src(nir_alu_src *src, int num_components,
       return NULL;
 
    nir_alu_instr *alu = nir_instr_as_alu(instr);
+
+   /* We want to bail if any of the other ALU operations involved is labled
+    * exact.  One reason for this is that, while the value that is changing is
+    * actually the result of the add and not the multiply, the intention of
+    * the user when they specify an exact multiply is that they want *that*
+    * value and what they don't care about is the add.  Another reason is that
+    * SPIR-V explicitly requires this behaviour.
+    */
+   if (alu->exact)
+      return NULL;
+
    switch (alu->op) {
    case nir_op_imov:
    case nir_op_fmov:




More information about the mesa-commit mailing list