Skip to content
Snippets Groups Projects
Commit e581ddee authored by Faith Ekstrand's avatar Faith Ekstrand :speech_balloon: Committed by Marge Bot
Browse files

intel/fs: Don't delete coalesced MOVs if they have a cmod


Shader-db results on ICL:

    total instructions in shared programs: 17133088 -> 17133287 (<.01%)
    instructions in affected programs: 61300 -> 61499 (0.32%)
    helped: 0
    HURT: 199

This means it's likely fixing 199 bugs. :-)  All the changed shaders are
in Mad Max.  It's surprisingly difficult to get the back-end compiler to
generate a pattern that hits this we don't tend to emit a lot coalescable
MOVs.  The pattern in Mad Max that's able to hit is fsign(fsat(x)) under
the right conditions.

Closes: #2820
Cc: mesa-stable@lists.freedesktop.org
Tested-by: default avatarIan Romanick <ian.d.romanick@intel.com>
Reviewed-by: default avatarIan Romanick <ian.d.romanick@intel.com>
Part-of: <!4773>
parent 6fe7d675
No related branches found
No related tags found
Loading
......@@ -277,13 +277,26 @@ fs_visitor::register_coalesce()
progress = true;
for (int i = 0; i < src_size; i++) {
if (mov[i]) {
if (!mov[i])
continue;
if (mov[i]->conditional_mod == BRW_CONDITIONAL_NONE) {
mov[i]->opcode = BRW_OPCODE_NOP;
mov[i]->conditional_mod = BRW_CONDITIONAL_NONE;
mov[i]->dst = reg_undef;
for (int j = 0; j < mov[i]->sources; j++) {
mov[i]->src[j] = reg_undef;
}
} else {
/* If we have a conditional modifier, rewrite the MOV to be a
* MOV.cmod from the coalesced register. Hopefully, cmod
* propagation will clean this up and move it to the instruction
* that writes the register. If not, this keeps things correct
* while still letting us coalesce.
*/
assert(mov[i]->opcode == BRW_OPCODE_MOV);
assert(mov[i]->sources == 1);
mov[i]->src[0] = mov[i]->dst;
mov[i]->dst = retype(brw_null_reg(), mov[i]->dst.type);
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment