mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-29 05:10:23 +01:00
aco: limit VALUPartialForwardingHazard search
Complicated CFG and lots of SALU can cause this to take an extremely long time to finish. Fixes dEQP-VK.graphicsfuzz.cov-value-tracking-selection-dag-negation-clamp-loop and Monster Hunter Rise demo compile times. fossil-db (gfx1100): Totals from 57 (0.04% of 134574) affected shaders: Instrs: 170919 -> 171165 (+0.14%) CodeSize: 860144 -> 861128 (+0.11%) Latency: 961466 -> 961505 (+0.00%) InvThroughput: 127598 -> 127608 (+0.01%) Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/8153 Fixes:5806f0246f("aco/gfx11: workaround VALUPartialForwardingHazard") Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20941> (cherry picked from commitbfd4ac4581)
This commit is contained in:
parent
bdeb93fb0f
commit
c954ea7b3d
2 changed files with 13 additions and 1 deletions
|
|
@ -76,7 +76,7 @@
|
|||
"description": "aco: limit VALUPartialForwardingHazard search",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "5806f0246fdeba22eba4fcf2d1b4cfa03b33e886"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1127,6 +1127,9 @@ struct VALUPartialForwardingHazardBlockState {
|
|||
enum VALUPartialForwardingHazardState state = nothing_written;
|
||||
unsigned num_valu_since_read = 0;
|
||||
unsigned num_valu_since_write = 0;
|
||||
|
||||
unsigned num_instrs = 0;
|
||||
unsigned num_blocks = 0;
|
||||
};
|
||||
|
||||
bool
|
||||
|
|
@ -1189,6 +1192,13 @@ handle_valu_partial_forwarding_hazard_instr(VALUPartialForwardingHazardGlobalSta
|
|||
if (block_state.num_vgprs_read == 0)
|
||||
return true; /* All VGPRs have been written and a hazard was never found. */
|
||||
|
||||
block_state.num_instrs++;
|
||||
if (block_state.num_instrs > 256 || block_state.num_blocks > 32) {
|
||||
/* Exit to limit compile times and set hazard_found=true to be safe. */
|
||||
global_state.hazard_found = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -1203,6 +1213,8 @@ handle_valu_partial_forwarding_hazard_block(VALUPartialForwardingHazardGlobalSta
|
|||
global_state.loop_headers_visited.insert(block->index);
|
||||
}
|
||||
|
||||
block_state.num_blocks++;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue