intel/compiler: Fixup operands in fs_builder::emit() that takes array
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 14 Apr 2020 17:30:53 +0000 (10:30 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 17 Apr 2020 15:21:47 +0000 (08:21 -0700)
The versions that take a specific number of operands will do various
fixups depending on the platform and the opcode.  However, the version
that takes an array of sources did not.  This makes all version operate
similarly.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4582>

src/intel/compiler/brw_fs_builder.h

index 896088cc5b8b4658d529715e718126666d457d20..430c7d10fc12f9ec6e379475a6de7c8d0503fc27 100644 (file)
@@ -344,7 +344,16 @@ namespace brw {
       emit(enum opcode opcode, const dst_reg &dst, const src_reg srcs[],
            unsigned n) const
       {
-         return emit(instruction(opcode, dispatch_width(), dst, srcs, n));
+         /* Use the emit() methods for specific operand counts to ensure that
+          * opcode-specific operand fixups occur.
+          */
+         if (n == 2) {
+            return emit(opcode, dst, srcs[0], srcs[1]);
+         } else if (n == 3) {
+            return emit(opcode, dst, srcs[0], srcs[1], srcs[2]);
+         } else {
+            return emit(instruction(opcode, dispatch_width(), dst, srcs, n));
+         }
       }
 
       /**