[Mesa-dev] [PATCH 3/3] i965/fs: Simplify instruction rewrite loop in the register coalesce pass.

Jason Ekstrand jason at jlekstrand.net
Tue Jul 28 13:36:45 PDT 2015


R-B me
On Jul 28, 2015 2:43 AM, "Francisco Jerez" <currojerez at riseup.net> wrote:

> For some reason the loop that rewrites all occurrences of the
> coalesced register was iterating over all possible offsets until it
> would find one that compares equal to the offset of a source or
> destination of any instruction in the program.  Since the mapping
> between old and new offsets is already available in the regs_to_offset
> array and we know that the whole register has been coalesced we can
> just look it up.
> ---
>  .../drivers/dri/i965/brw_fs_register_coalesce.cpp  | 27
> +++++++++++-----------
>  1 file changed, 13 insertions(+), 14 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
> b/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
> index c078318..6c80400 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_register_coalesce.cpp
> @@ -241,20 +241,19 @@ fs_visitor::register_coalesce()
>        }
>
>        foreach_block_and_inst(block, fs_inst, scan_inst, cfg) {
> -         for (int i = 0; i < src_size; i++) {
> -            if (scan_inst->dst.file == GRF &&
> -                scan_inst->dst.reg == reg_from &&
> -                scan_inst->dst.reg_offset == i) {
> -               scan_inst->dst.reg = reg_to;
> -               scan_inst->dst.reg_offset = reg_to_offset[i];
> -            }
> -            for (int j = 0; j < scan_inst->sources; j++) {
> -               if (scan_inst->src[j].file == GRF &&
> -                   scan_inst->src[j].reg == reg_from &&
> -                   scan_inst->src[j].reg_offset == i) {
> -                  scan_inst->src[j].reg = reg_to;
> -                  scan_inst->src[j].reg_offset = reg_to_offset[i];
> -               }
> +         if (scan_inst->dst.file == GRF &&
> +             scan_inst->dst.reg == reg_from) {
> +            scan_inst->dst.reg = reg_to;
> +            scan_inst->dst.reg_offset =
> +               reg_to_offset[scan_inst->dst.reg_offset];
> +         }
> +
> +         for (int j = 0; j < scan_inst->sources; j++) {
> +            if (scan_inst->src[j].file == GRF &&
> +                scan_inst->src[j].reg == reg_from) {
> +               scan_inst->src[j].reg = reg_to;
> +               scan_inst->src[j].reg_offset =
> +                  reg_to_offset[scan_inst->src[j].reg_offset];
>              }
>           }
>        }
> --
> 2.4.6
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150728/18c1b840/attachment-0001.html>


More information about the mesa-dev mailing list