[Mesa-dev] [PATCH 04/20] nir: make use of new nir_cf_list_clone_and_reinsert() helper

Jason Ekstrand jason at jlekstrand.net
Fri Dec 7 23:14:40 UTC 2018


3 and 4 are

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

On Thu, Dec 6, 2018 at 9:08 PM Timothy Arceri <tarceri at itsqueeze.com> wrote:

> Reviewed-by: Thomas Helland <thomashelland90 at gmail.com>
> ---
>  src/compiler/nir/nir_opt_loop_unroll.c | 76 ++++++++++----------------
>  1 file changed, 28 insertions(+), 48 deletions(-)
>
> diff --git a/src/compiler/nir/nir_opt_loop_unroll.c
> b/src/compiler/nir/nir_opt_loop_unroll.c
> index 0e9966320b..c267c185b6 100644
> --- a/src/compiler/nir/nir_opt_loop_unroll.c
> +++ b/src/compiler/nir/nir_opt_loop_unroll.c
> @@ -169,32 +169,21 @@ simple_unroll(nir_loop *loop)
>        _mesa_hash_table_create(NULL, _mesa_hash_pointer,
>                                _mesa_key_pointer_equal);
>
> -   /* Clone the loop header */
> -   nir_cf_list cloned_header;
> -   nir_cf_list_clone(&cloned_header, &lp_header, loop->cf_node.parent,
> -                     remap_table);
> +   /* Clone the loop header and insert before the loop */
> +   nir_cf_list_clone_and_reinsert(&lp_header, loop->cf_node.parent,
> +                                  nir_before_cf_node(&loop->cf_node),
> +                                  remap_table);
>
> -   /* Insert cloned loop header before the loop */
> -   nir_cf_reinsert(&cloned_header, nir_before_cf_node(&loop->cf_node));
> -
> -   /* Temp list to store the cloned loop body as we unroll */
> -   nir_cf_list unrolled_lp_body;
> -
> -   /* Clone loop header and append to the loop body */
>     for (unsigned i = 0; i < loop->info->max_trip_count; i++) {
> -      /* Clone loop body */
> -      nir_cf_list_clone(&unrolled_lp_body, &loop_body,
> loop->cf_node.parent,
> -                        remap_table);
> -
> -      /* Insert unrolled loop body before the loop */
> -      nir_cf_reinsert(&unrolled_lp_body,
> nir_before_cf_node(&loop->cf_node));
> -
> -      /* Clone loop header */
> -      nir_cf_list_clone(&cloned_header, &lp_header, loop->cf_node.parent,
> -                        remap_table);
> -
> -      /* Insert loop header after loop body */
> -      nir_cf_reinsert(&cloned_header, nir_before_cf_node(&loop->cf_node));
> +      /* Clone loop body and insert before the loop */
> +      nir_cf_list_clone_and_reinsert(&loop_body, loop->cf_node.parent,
> +                                     nir_before_cf_node(&loop->cf_node),
> +                                     remap_table);
> +
> +      /* Clone loop header and insert after loop body */
> +      nir_cf_list_clone_and_reinsert(&lp_header, loop->cf_node.parent,
> +                                     nir_before_cf_node(&loop->cf_node),
> +                                     remap_table);
>     }
>
>     /* Remove the break from the loop terminator and add instructions from
> @@ -207,11 +196,9 @@ simple_unroll(nir_loop *loop)
>                    nir_after_block(limiting_term->break_block));
>
>     /* Clone so things get properly remapped */
> -   nir_cf_list cloned_break_list;
> -   nir_cf_list_clone(&cloned_break_list, &break_list,
> loop->cf_node.parent,
> -                     remap_table);
> -
> -   nir_cf_reinsert(&cloned_break_list,
> nir_before_cf_node(&loop->cf_node));
> +   nir_cf_list_clone_and_reinsert(&break_list, loop->cf_node.parent,
> +                                  nir_before_cf_node(&loop->cf_node),
> +                                  remap_table);
>
>     /* Remove the loop */
>     nir_cf_node_remove(&loop->cf_node);
> @@ -394,19 +381,16 @@ complex_unroll(nir_loop *loop, nir_loop_terminator
> *unlimit_term,
>
>     /* Temp lists to store the cloned loop as we unroll */
>     nir_cf_list unrolled_lp_body;
> -   nir_cf_list cloned_header;
>
>     for (unsigned i = 0; i < num_times_to_clone; i++) {
> -      /* Clone loop header */
> -      nir_cf_list_clone(&cloned_header, &lp_header, loop->cf_node.parent,
> -                        remap_table);
>
>        nir_cursor cursor =
>           get_complex_unroll_insert_location(unroll_loc,
>
>  unlimit_term->continue_from_then);
>
> -      /* Insert cloned loop header */
> -      nir_cf_reinsert(&cloned_header, cursor);
> +      /* Clone loop header and insert in if branch */
> +      nir_cf_list_clone_and_reinsert(&lp_header, loop->cf_node.parent,
> +                                     cursor, remap_table);
>
>        cursor =
>           get_complex_unroll_insert_location(unroll_loc,
> @@ -432,28 +416,24 @@ complex_unroll(nir_loop *loop, nir_loop_terminator
> *unlimit_term,
>     if (!limiting_term_second) {
>        assert(unroll_loc->type == nir_cf_node_if);
>
> -      nir_cf_list_clone(&cloned_header, &lp_header, loop->cf_node.parent,
> -                        remap_table);
> -
>        nir_cursor cursor =
>           get_complex_unroll_insert_location(unroll_loc,
>
>  unlimit_term->continue_from_then);
>
> -      /* Insert cloned loop header */
> -      nir_cf_reinsert(&cloned_header, cursor);
> -
> -      /* Clone so things get properly remapped, and insert break block
> from
> -       * the limiting terminator.
> -       */
> -      nir_cf_list cloned_break_blk;
> -      nir_cf_list_clone(&cloned_break_blk, &limit_break_list,
> -                        loop->cf_node.parent, remap_table);
> +      /* Clone loop header and insert in if branch */
> +      nir_cf_list_clone_and_reinsert(&lp_header, loop->cf_node.parent,
> +                                     cursor, remap_table);
>
>        cursor =
>           get_complex_unroll_insert_location(unroll_loc,
>
>  unlimit_term->continue_from_then);
>
> -      nir_cf_reinsert(&cloned_break_blk, cursor);
> +      /* Clone so things get properly remapped, and insert break block
> from
> +       * the limiting terminator.
> +       */
> +      nir_cf_list_clone_and_reinsert(&limit_break_list,
> loop->cf_node.parent,
> +                                     cursor, remap_table);
> +
>        nir_cf_delete(&limit_break_list);
>     }
>
> --
> 2.19.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20181207/916f2d8c/attachment-0001.html>


More information about the mesa-dev mailing list