From 051887fbf3f07c49fb834ca3c1e5aa052ee4b18b Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Fri, 18 Feb 2022 21:58:24 -0800 Subject: [PATCH] intel/fs: Make the result of is_unordered() dependent on devinfo. Reviewed-by: Paulo Zanoni Part-of: --- src/intel/compiler/brw_fs_lower_regioning.cpp | 4 ++-- src/intel/compiler/brw_fs_scoreboard.cpp | 17 +++++++++-------- src/intel/compiler/brw_ir_fs.h | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/intel/compiler/brw_fs_lower_regioning.cpp b/src/intel/compiler/brw_fs_lower_regioning.cpp index 638a5c0..c52cb44 100644 --- a/src/intel/compiler/brw_fs_lower_regioning.cpp +++ b/src/intel/compiler/brw_fs_lower_regioning.cpp @@ -207,7 +207,7 @@ namespace { has_invalid_src_region(const intel_device_info *devinfo, const fs_inst *inst, unsigned i) { - if (is_unordered(inst) || inst->is_control_source(i)) + if (is_send(inst) || inst->is_math() || inst->is_control_source(i)) return false; /* Empirical testing shows that Broadwell has a bug affecting half-float @@ -248,7 +248,7 @@ namespace { has_invalid_dst_region(const intel_device_info *devinfo, const fs_inst *inst) { - if (is_unordered(inst)) { + if (is_send(inst) || inst->is_math()) { return false; } else { const brw_reg_type exec_type = get_exec_type(inst); diff --git a/src/intel/compiler/brw_fs_scoreboard.cpp b/src/intel/compiler/brw_fs_scoreboard.cpp index 3937371..34c2f53 100644 --- a/src/intel/compiler/brw_fs_scoreboard.cpp +++ b/src/intel/compiler/brw_fs_scoreboard.cpp @@ -112,7 +112,7 @@ namespace { (inst->opcode == BRW_OPCODE_MAD && MIN2(type_sz(inst->src[1].type), type_sz(inst->src[2].type)) >= 4)); - if (is_unordered(inst)) + if (is_unordered(devinfo, inst)) return TGL_PIPE_NONE; else if (devinfo->verx10 < 125) return TGL_PIPE_FLOAT; @@ -173,8 +173,9 @@ namespace { * (again) don't use virtual instructions if you want optimal * scheduling. */ - if (!is_unordered(inst) && (p == IDX(inferred_exec_pipe(devinfo, inst)) || - p == IDX(TGL_PIPE_ALL))) + if (!is_unordered(devinfo, inst) && + (p == IDX(inferred_exec_pipe(devinfo, inst)) || + p == IDX(TGL_PIPE_ALL))) return 1; else return 0; @@ -623,7 +624,7 @@ namespace { dependency_for_write(const struct intel_device_info *devinfo, const fs_inst *inst, dependency dep) { - if (!is_unordered(inst) && + if (!is_unordered(devinfo, inst) && is_single_pipe(dep.jp, inferred_exec_pipe(devinfo, inst))) dep.ordered &= TGL_REGDIST_DST; return dep; @@ -942,7 +943,7 @@ namespace { if (find_unordered_dependency(deps, TGL_SBID_SET, exec_all)) return find_unordered_dependency(deps, TGL_SBID_SET, exec_all); - else if (has_ordered && is_unordered(inst)) + else if (has_ordered && is_unordered(devinfo, inst)) return TGL_SBID_NULL; else if (find_unordered_dependency(deps, TGL_SBID_DST, exec_all) && (!has_ordered || ordered_pipe == inferred_sync_pipe(devinfo, inst))) @@ -977,7 +978,7 @@ namespace { return true; else return ordered_pipe == inferred_sync_pipe(devinfo, inst) && - unordered_mode == (is_unordered(inst) ? TGL_SBID_SET : + unordered_mode == (is_unordered(devinfo, inst) ? TGL_SBID_SET : TGL_SBID_DST); } @@ -1032,7 +1033,7 @@ namespace { /* Track any destination registers of this instruction. */ const dependency wr_dep = - is_unordered(inst) ? dependency(TGL_SBID_DST, ip, exec_all) : + is_unordered(devinfo, inst) ? dependency(TGL_SBID_DST, ip, exec_all) : is_ordered ? dependency(TGL_REGDIST_DST, jp, exec_all) : dependency(); @@ -1158,7 +1159,7 @@ namespace { sb.get(brw_uvec_mrf(8, inst->base_mrf + j, 0)))); } - if (is_unordered(inst) && !inst->eot) + if (is_unordered(devinfo, inst) && !inst->eot) add_dependency(ids, deps[ip], dependency(TGL_SBID_SET, ip, exec_all)); diff --git a/src/intel/compiler/brw_ir_fs.h b/src/intel/compiler/brw_ir_fs.h index 06d9705..525e591 100644 --- a/src/intel/compiler/brw_ir_fs.h +++ b/src/intel/compiler/brw_ir_fs.h @@ -546,7 +546,7 @@ is_send(const fs_inst *inst) * assumed to complete in-order. */ static inline bool -is_unordered(const fs_inst *inst) +is_unordered(const intel_device_info *devinfo, const fs_inst *inst) { return is_send(inst) || inst->is_math(); } -- 2.7.4