[Mesa-dev] [PATCH] intel/compiler: Reset default flag register in brw_find_live_channel()
Francisco Jerez
currojerez at riseup.net
Tue Jan 22 23:24:55 UTC 2019
Matt Turner <mattst88 at gmail.com> writes:
> emit_uniformize() emits SHADER_OPCODE_FIND_LIVE_CHANNEL with its
> flag_subreg set, so that the IR knows which flag is accessed. However
> the flag is only used on Gen7 in Align1 mode.
>
> To avoid setting unnecessary bits in the instruction words, get the
> information we need and reset the default flag register. This allows
> round-tripping through the assembler/disassembler.
> ---
> src/intel/compiler/brw_eu_emit.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/src/intel/compiler/brw_eu_emit.c b/src/intel/compiler/brw_eu_emit.c
> index 45e2552783b..7c5b40af3ae 100644
> --- a/src/intel/compiler/brw_eu_emit.c
> +++ b/src/intel/compiler/brw_eu_emit.c
> @@ -3312,6 +3312,13 @@ brw_find_live_channel(struct brw_codegen *p, struct brw_reg dst,
>
> brw_push_insn_state(p);
>
> + /* The flag register is only used on Gen7 in align1 mode, so avoid setting
> + * unnecessary bits in the instruction words, get the information we need
> + * and reset the default flag register.
Maybe mention here that this also allows more instructions to be
compacted. Looks good otherwise:
Reviewed-by: Francisco Jerez <currojerez at riseup.net>
> + */
> + const unsigned flag_subreg = p->current->flag_subreg;
> + brw_set_default_flag_reg(p, 0, 0);
> +
> if (brw_get_default_access_mode(p) == BRW_ALIGN_1) {
> brw_set_default_mask_control(p, BRW_MASK_DISABLE);
>
> @@ -3345,8 +3352,7 @@ brw_find_live_channel(struct brw_codegen *p, struct brw_reg dst,
> */
> inst = brw_FBL(p, vec1(dst), exec_mask);
> } else {
> - const struct brw_reg flag = brw_flag_reg(p->current->flag_subreg / 2,
> - p->current->flag_subreg % 2);
> + const struct brw_reg flag = brw_flag_subreg(flag_subreg);
>
> brw_set_default_exec_size(p, BRW_EXECUTE_1);
> brw_MOV(p, retype(flag, BRW_REGISTER_TYPE_UD), brw_imm_ud(0));
> @@ -3366,6 +3372,8 @@ brw_find_live_channel(struct brw_codegen *p, struct brw_reg dst,
> brw_inst_set_group(devinfo, inst, lower_size * i + 8 * qtr_control);
> brw_inst_set_cond_modifier(devinfo, inst, BRW_CONDITIONAL_Z);
> brw_inst_set_exec_size(devinfo, inst, cvt(lower_size) - 1);
> + brw_inst_set_flag_reg_nr(devinfo, inst, flag_subreg / 2);
> + brw_inst_set_flag_subreg_nr(devinfo, inst, flag_subreg % 2);
> }
>
> /* Find the first bit set in the exec_size-wide portion of the flag
> --
> 2.19.2
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 227 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190122/b1b756a6/attachment-0001.sig>
More information about the mesa-dev
mailing list