[Mesa-dev] [PATCH] intel/eu/validate: Look up types on demand in execution_type()

Jason Ekstrand jason at jlekstrand.net
Thu Aug 31 22:48:13 UTC 2017


We are looking up the execution type prior to checking how many sources
we have.  This leads to looking for a type for src1 on MOV instructions
which is bogus.  On BDW+, the src1 register type overlaps with the
64-bit immediate and causes us problems.
---
 src/intel/compiler/brw_eu_validate.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/intel/compiler/brw_eu_validate.c b/src/intel/compiler/brw_eu_validate.c
index 249342f..d72c0a0 100644
--- a/src/intel/compiler/brw_eu_validate.c
+++ b/src/intel/compiler/brw_eu_validate.c
@@ -300,15 +300,13 @@ execution_type(const struct gen_device_info *devinfo, const brw_inst *inst)
 {
    unsigned num_sources = num_sources_from_inst(devinfo, inst);
    enum brw_reg_type src0_exec_type, src1_exec_type;
-   enum brw_reg_type src0_type = brw_inst_src0_type(devinfo, inst);
-   enum brw_reg_type src1_type = brw_inst_src1_type(devinfo, inst);
 
    /* Execution data type is independent of destination data type, except in
     * mixed F/HF instructions on CHV and SKL+.
     */
    enum brw_reg_type dst_exec_type = brw_inst_dst_type(devinfo, inst);
 
-   src0_exec_type = execution_type_for_type(src0_type);
+   src0_exec_type = execution_type_for_type(brw_inst_src0_type(devinfo, inst));
    if (num_sources == 1) {
       if ((devinfo->gen >= 9 || devinfo->is_cherryview) &&
           src0_exec_type == BRW_REGISTER_TYPE_HF) {
@@ -317,7 +315,7 @@ execution_type(const struct gen_device_info *devinfo, const brw_inst *inst)
       return src0_exec_type;
    }
 
-   src1_exec_type = execution_type_for_type(src1_type);
+   src1_exec_type = execution_type_for_type(brw_inst_src1_type(devinfo, inst));
    if (src0_exec_type == src1_exec_type)
       return src0_exec_type;
 
-- 
2.5.0.400.gff86faf



More information about the mesa-dev mailing list