diff --git a/src/freedreno/ir3/ir3.h b/src/freedreno/ir3/ir3.h index 57c50e6ba78..e88a09f1293 100644 --- a/src/freedreno/ir3/ir3.h +++ b/src/freedreno/ir3/ir3.h @@ -1416,6 +1416,12 @@ is_reg_gpr(const struct ir3_register *reg) return true; } +static inline bool +is_reg_a0(const struct ir3_register *reg) +{ + return reg->num == regid(REG_A0, 0); +} + /* is dst a normal temp register: */ static inline bool is_dest_gpr(const struct ir3_register *dst) diff --git a/src/freedreno/ir3/ir3_legalize.c b/src/freedreno/ir3/ir3_legalize.c index fc66882038a..233f9eecdb8 100644 --- a/src/freedreno/ir3/ir3_legalize.c +++ b/src/freedreno/ir3/ir3_legalize.c @@ -647,7 +647,7 @@ legalize_block(struct ir3_legalize_ctx *ctx, struct ir3_block *block) * need to wait for previous ones. */ foreach_src (reg, n) { - if (reg->flags & IR3_REG_SHARED) { + if ((reg->flags & IR3_REG_SHARED) || is_reg_a0(reg)) { regmask_set(&state->needs_ss_scalar_war, reg); } }