Mesa (master): aco: Fix crash in insert_wait_states.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Apr 7 10:01:13 UTC 2020
Module: Mesa
Branch: master
Commit: cc8a85d05a9cf47e89c6a8c5e6db98caba79e00d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cc8a85d05a9cf47e89c6a8c5e6db98caba79e00d
Author: Timur Kristóf <timur.kristof at gmail.com>
Date: Mon Apr 6 16:34:45 2020 +0200
aco: Fix crash in insert_wait_states.
Signed-off-by: Timur Kristóf <timur.kristof at gmail.com>
Reviewed-by: Daniel Schürmann <daniel at schuermann.dev>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4465>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4465>
---
src/amd/compiler/aco_insert_waitcnt.cpp | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/src/amd/compiler/aco_insert_waitcnt.cpp b/src/amd/compiler/aco_insert_waitcnt.cpp
index fc874ae793c..e4087e7add5 100644
--- a/src/amd/compiler/aco_insert_waitcnt.cpp
+++ b/src/amd/compiler/aco_insert_waitcnt.cpp
@@ -869,14 +869,14 @@ void handle_block(Program *program, Block& block, wait_ctx& ctx)
} /* end namespace */
-static uint32_t calculate_score(unsigned num_ctx, wait_ctx *ctx, uint32_t event_mask)
+static uint32_t calculate_score(std::vector<wait_ctx> &ctx_vec, uint32_t event_mask)
{
double result = 0.0;
unsigned num_waits = 0;
while (event_mask) {
unsigned event_index = u_bit_scan(&event_mask);
- for (unsigned i = 0; i < num_ctx; i++) {
- for (unsigned dist : ctx[i].wait_distances[event_index]) {
+ for (const wait_ctx &ctx : ctx_vec) {
+ for (unsigned dist : ctx.wait_distances[event_index]) {
double score = dist;
/* for many events, excessive distances provide little benefit, so
* decrease the score in that case. */
@@ -918,11 +918,9 @@ void insert_wait_states(Program* program)
{
/* per BB ctx */
std::vector<bool> done(program->blocks.size());
- wait_ctx in_ctx[program->blocks.size()];
- wait_ctx out_ctx[program->blocks.size()];
+ std::vector<wait_ctx> in_ctx(program->blocks.size(), wait_ctx(program));
+ std::vector<wait_ctx> out_ctx(program->blocks.size(), wait_ctx(program));
- for (unsigned i = 0; i < program->blocks.size(); i++)
- in_ctx[i] = wait_ctx(program);
std::stack<unsigned> loop_header_indices;
unsigned loop_progress = 0;
@@ -972,9 +970,9 @@ void insert_wait_states(Program* program)
if (program->collect_statistics) {
program->statistics[statistic_vmem_score] =
- calculate_score(program->blocks.size(), out_ctx, event_vmem | event_flat | event_vmem_store);
+ calculate_score(out_ctx, event_vmem | event_flat | event_vmem_store);
program->statistics[statistic_smem_score] =
- calculate_score(program->blocks.size(), out_ctx, event_smem);
+ calculate_score(out_ctx, event_smem);
}
}
More information about the mesa-commit
mailing list