aco: a couple loop handling fixes for GFX10 hazard pass
It was joining from the wrong blocks and block.kind is a bitmask instead of an enum. Reviewed-By: Timur Kristóf <timur.kristof@gmail.com>
This commit is contained in:

committed by
Daniel Schürmann

parent
12d3b11908
commit
d4684a294b
@@ -560,13 +560,13 @@ void mitigate_hazards_gfx10(Program *program)
|
||||
Block& block = program->blocks[i];
|
||||
NOP_ctx_gfx10 &ctx = all_ctx[i];
|
||||
|
||||
if (block.kind == block_kind_loop_header) {
|
||||
if (block.kind & block_kind_loop_header) {
|
||||
loop_header_indices.push(i);
|
||||
} else if (block.kind == block_kind_loop_exit) {
|
||||
} else if (block.kind & block_kind_loop_exit) {
|
||||
/* Go through the whole loop again */
|
||||
for (unsigned idx = loop_header_indices.top(); idx < i; idx++) {
|
||||
NOP_ctx_gfx10 loop_block_ctx;
|
||||
for (unsigned b : block.linear_preds)
|
||||
for (unsigned b : program->blocks[idx].linear_preds)
|
||||
loop_block_ctx.join(all_ctx[b]);
|
||||
|
||||
handle_block_gfx10(loop_block_ctx, program->blocks[idx]);
|
||||
|
Reference in New Issue
Block a user