3-src instructions don't support immediates, but since 36bc5f06dd22,
we allow them on MAD and LRP relying on the combine constants pass to
fix it up later. However, that pass is specialized for 32-bit float
immediates and can't handle HF constants at present, so this patch
ensures that copy-propagation only does this for 32-bit constants.

Reviewed-by: Topi Pohjolainen <topi.pohjolai...@intel.com>
---
 src/intel/compiler/brw_fs_copy_propagation.cpp | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/intel/compiler/brw_fs_copy_propagation.cpp 
b/src/intel/compiler/brw_fs_copy_propagation.cpp
index a8ec1c34630..c01d4ec4a4f 100644
--- a/src/intel/compiler/brw_fs_copy_propagation.cpp
+++ b/src/intel/compiler/brw_fs_copy_propagation.cpp
@@ -762,8 +762,16 @@ fs_visitor::try_constant_propagate(fs_inst *inst, 
acp_entry *entry)
 
       case BRW_OPCODE_MAD:
       case BRW_OPCODE_LRP:
-         inst->src[i] = val;
-         progress = true;
+         /* 3-src instructions can't take IMM registers, however, for 32-bit
+          * floating instructions we rely on the combine constants pass to fix
+          * it up. For anything else, we shouldn't be promoting immediates
+          * until we can make the pass capable of combining constants of
+          * different sizes.
+          */
+         if (val.type == BRW_REGISTER_TYPE_F) {
+            inst->src[i] = val;
+            progress = true;
+         }
          break;
 
       default:
-- 
2.17.1

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

Reply via email to