intel/fs: don't consider fixup_nomask_control_flow SENDs predicate

Those SENDs are still doing a full register write. We just inserted
some predication for a workaround.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: mesa-stable
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21853>
(cherry picked from commit 362a07db3a)
This commit is contained in:
Lionel Landwerlin 2023-03-14 18:22:50 +02:00 committed by Dylan Baker
parent f6a518de2d
commit 600f80c8c2
3 changed files with 10 additions and 2 deletions

View file

@ -175,7 +175,7 @@
"description": "intel/fs: don't consider fixup_nomask_control_flow SENDs predicate",
"nominated": true,
"nomination_type": 0,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": null
},

View file

@ -644,7 +644,8 @@ fs_visitor::limit_dispatch_width(unsigned n, const char *msg)
bool
fs_inst::is_partial_write() const
{
if (this->predicate && this->opcode != BRW_OPCODE_SEL)
if (this->predicate && !this->predicate_trivial &&
this->opcode != BRW_OPCODE_SEL)
return true;
if (this->dst.offset % REG_SIZE != 0)
@ -6579,6 +6580,7 @@ fs_visitor::fixup_nomask_control_flow()
set_predicate(pred, inst);
inst->flag_subreg = 0;
inst->predicate_trivial = true;
if (save_flag)
ubld.group(1, 0).at(block, inst->next).MOV(flag, tmp);

View file

@ -178,6 +178,12 @@ struct backend_instruction {
* the scratch surface offset to build
* extended descriptor
*/
bool predicate_trivial:1; /**< The predication mask applied to this
* instruction is guaranteed to be uniform and
* a superset of the execution mask of the
* present block, no currently enabled channels
* will be disabled by the predicate.
*/
bool eot:1;
/* Chooses which flag subregister (f0.0 to f1.1) is used for conditional