ir3: Improve printing of array parallelcopies/phis

Normally something with IR3_REG_ARRAY doesn't have a register assigned,
but we keep IR3_REG_ARRAY for parallel copies after RA because we need
to know the appropriate size. We want to see the register assigned for
these when printing the RA result before parallel copies are lowered.
The register is in ->array.base in this case, so initialize it to
INVALID_REG and print ->array.base if it's been assigned to something,
similar to ->num in the normal case.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11422>
This commit is contained in:
Connor Abbott 2021-06-16 15:50:56 +02:00 committed by Marge Bot
parent d0d2108425
commit 2c21dab36e
2 changed files with 8 additions and 2 deletions

View File

@ -592,6 +592,7 @@ ir3_create_array_load(struct ir3_context *ctx, struct ir3_array *arr, int n,
src->size = arr->length;
src->array.id = arr->id;
src->array.offset = n;
src->array.base = INVALID_REG;
if (address)
ir3_instr_set_address(mov, address);
@ -626,6 +627,7 @@ ir3_create_array_store(struct ir3_context *ctx, struct ir3_array *arr, int n,
dst->size = arr->length;
dst->array.id = arr->id;
dst->array.offset = n;
dst->array.base = INVALID_REG;
arr->last_write = dst;
@ -653,6 +655,7 @@ ir3_create_array_store(struct ir3_context *ctx, struct ir3_array *arr, int n,
dst->size = arr->length;
dst->array.id = arr->id;
dst->array.offset = n;
dst->array.base = INVALID_REG;
ir3_reg_create(mov, 0, IR3_REG_SSA | flags)->def = src->regs[0];
if (address)

View File

@ -180,8 +180,8 @@ static void print_ssa_name(struct ir3_register *reg, bool dst)
print_ssa_def_name(reg);
}
if (reg->num != INVALID_REG)
printf("("SYN_REG("r%u.%c")")", reg_num(reg), "xyzw"[reg_comp(reg)]);
if (reg->num != INVALID_REG && !(reg->flags & IR3_REG_ARRAY))
printf("("SYN_REG("r%u.%c")")", reg_num(reg), "xyzw"[reg_comp(reg)]);
}
static void print_reg_name(struct ir3_instruction *instr, struct ir3_register *reg)
@ -221,6 +221,9 @@ static void print_reg_name(struct ir3_instruction *instr, struct ir3_register *r
print_ssa_name(reg, false);
}
printf(SYN_ARRAY("]"));
if (reg->array.base != INVALID_REG)
printf("("SYN_REG("r%u.%c")")", reg->array.base >> 2,
"xyzw"[reg->array.base & 0x3]);
} else if (reg->flags & IR3_REG_SSA) {
print_ssa_name(reg, reg->flags & IR3_REG_DEST);
} else if (reg->flags & IR3_REG_RELATIV) {