intel/compiler: grf127 can not be dest when src and dest overlap in send
authorJose Maria Casanova Crespo <jmcasanova@igalia.com>
Mon, 26 Mar 2018 12:59:46 +0000 (14:59 +0200)
committerJose Maria Casanova Crespo <jmcasanova@igalia.com>
Mon, 9 Jul 2018 22:14:49 +0000 (00:14 +0200)
Implement at brw_eu_validate the restriction from Intel Broadwell PRM,
vol 07, section "Instruction Set Reference", subsection "EUISA
Instructions", Send Message (page 990):

"r127 must not be used for return address when there is a src and
dest overlap in send instruction."

v2: Style fixes (Matt Turner)

Reviewed-by: Matt Turner <mattst88@gmail.com>
Cc: 18.1 <mesa-stable@lists.freedesktop.org>
src/intel/compiler/brw_eu_validate.c

index d3189d1ef5e390c2a42cb03762439abd7527981a..29d1fe46f71a995c291a061eb0333a4b89aca582 100644 (file)
@@ -261,6 +261,17 @@ send_restrictions(const struct gen_device_info *devinfo,
                   brw_inst_src0_da_reg_nr(devinfo, inst) < 112,
                   "send with EOT must use g112-g127");
       }
+
+      if (devinfo->gen >= 8) {
+         ERROR_IF(!dst_is_null(devinfo, inst) &&
+                  (brw_inst_dst_da_reg_nr(devinfo, inst) +
+                   brw_inst_rlen(devinfo, inst) > 127) &&
+                  (brw_inst_src0_da_reg_nr(devinfo, inst) +
+                   brw_inst_mlen(devinfo, inst) >
+                   brw_inst_dst_da_reg_nr(devinfo, inst)),
+                  "r127 must not be used for return address when there is "
+                  "a src and dest overlap");
+      }
    }
 
    return error_msg;