diff --git a/src/freedreno/ir3/ir3.h b/src/freedreno/ir3/ir3.h index ea49efd2655..25556052fef 100644 --- a/src/freedreno/ir3/ir3.h +++ b/src/freedreno/ir3/ir3.h @@ -3352,10 +3352,9 @@ regmask_get(regmask_t *regmask, struct ir3_register *reg) } static inline bool -regmask_get_any_gpr(regmask_t *regmask) +regmask_get_any_shared(regmask_t *regmask) { - return BITSET_TEST_RANGE(regmask->full, 0, GPR_REG_SIZE * 2) || - BITSET_TEST_RANGE(regmask->half, 0, GPR_REG_SIZE); + return BITSET_TEST_RANGE(regmask->shared, 0, 2 * SHARED_REG_SIZE); } /* ************************************************************************* */ diff --git a/src/freedreno/ir3/ir3_legalize.c b/src/freedreno/ir3/ir3_legalize.c index 7d66662dcbf..b9ef0a418f6 100644 --- a/src/freedreno/ir3/ir3_legalize.c +++ b/src/freedreno/ir3/ir3_legalize.c @@ -754,8 +754,10 @@ legalize_block(struct ir3_legalize_ctx *ctx, struct ir3_block *block) n->flags |= IR3_INSTR_U; } + /* Ensure no pending uGPR writes before EP ends: */ if ((n->opc == OPC_SHPE) && (ctx->compiler->gen >= 8) && - regmask_get_any_gpr(&state->needs_sy)) { + block->in_early_preamble && + regmask_get_any_shared(&state->needs_sy)) { last_n = insert_nop_flags(ctx, state, last_n, &build, IR3_INSTR_SY); }