mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-25 16:40:30 +01:00
ir3/ra: Sanitize parallel copy flags better
For pcopies we only care about the register's type, i.e. whether its a half-register and whether it's an array (plus its size). Copying over other flags like IR3_REG_RELATIV just leads to sadness and validator assertions. Fixes:0ffcb19b9d("ir3: Rewrite register allocation") Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14107> (cherry picked from commitab0ed4ff3f)
This commit is contained in:
parent
17836a6d64
commit
4656dbee08
2 changed files with 9 additions and 7 deletions
|
|
@ -868,7 +868,7 @@
|
|||
"description": "ir3/ra: Sanitize parallel copy flags better",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "0ffcb19b9d9fbe902224542047c389a661fbf816"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1332,7 +1332,8 @@ insert_parallel_copy_instr(struct ra_ctx *ctx, struct ir3_instruction *instr)
|
|||
struct ra_parallel_copy *entry = &ctx->parallel_copies[i];
|
||||
struct ir3_register *reg =
|
||||
ir3_dst_create(pcopy, INVALID_REG,
|
||||
entry->interval->interval.reg->flags & ~IR3_REG_SSA);
|
||||
entry->interval->interval.reg->flags &
|
||||
(IR3_REG_HALF | IR3_REG_ARRAY));
|
||||
reg->size = entry->interval->interval.reg->size;
|
||||
reg->wrmask = entry->interval->interval.reg->wrmask;
|
||||
assign_reg(pcopy, reg, ra_interval_get_num(entry->interval));
|
||||
|
|
@ -1342,7 +1343,8 @@ insert_parallel_copy_instr(struct ra_ctx *ctx, struct ir3_instruction *instr)
|
|||
struct ra_parallel_copy *entry = &ctx->parallel_copies[i];
|
||||
struct ir3_register *reg =
|
||||
ir3_src_create(pcopy, INVALID_REG,
|
||||
entry->interval->interval.reg->flags & ~IR3_REG_SSA);
|
||||
entry->interval->interval.reg->flags &
|
||||
(IR3_REG_HALF | IR3_REG_ARRAY));
|
||||
reg->size = entry->interval->interval.reg->size;
|
||||
reg->wrmask = entry->interval->interval.reg->wrmask;
|
||||
assign_reg(pcopy, reg, ra_physreg_to_num(entry->src, reg->flags));
|
||||
|
|
@ -1778,8 +1780,9 @@ insert_liveout_copy(struct ir3_block *block, physreg_t dst, physreg_t src,
|
|||
pcopy->dsts[pcopy->dsts_count++] = old_pcopy->dsts[i];
|
||||
}
|
||||
|
||||
struct ir3_register *dst_reg =
|
||||
ir3_dst_create(pcopy, INVALID_REG, reg->flags & ~IR3_REG_SSA);
|
||||
unsigned flags = reg->flags & (IR3_REG_HALF | IR3_REG_ARRAY);
|
||||
|
||||
struct ir3_register *dst_reg = ir3_dst_create(pcopy, INVALID_REG, flags);
|
||||
dst_reg->wrmask = reg->wrmask;
|
||||
dst_reg->size = reg->size;
|
||||
assign_reg(pcopy, dst_reg, ra_physreg_to_num(dst, reg->flags));
|
||||
|
|
@ -1788,8 +1791,7 @@ insert_liveout_copy(struct ir3_block *block, physreg_t dst, physreg_t src,
|
|||
pcopy->srcs[pcopy->srcs_count++] = old_pcopy->srcs[i];
|
||||
}
|
||||
|
||||
struct ir3_register *src_reg =
|
||||
ir3_src_create(pcopy, INVALID_REG, reg->flags & ~IR3_REG_SSA);
|
||||
struct ir3_register *src_reg = ir3_src_create(pcopy, INVALID_REG, flags);
|
||||
src_reg->wrmask = reg->wrmask;
|
||||
src_reg->size = reg->size;
|
||||
assign_reg(pcopy, src_reg, ra_physreg_to_num(src, reg->flags));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue