4 and 5 are Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net>
On Mon, Jul 23, 2018 at 3:03 AM Timothy Arceri <tarc...@itsqueeze.com> wrote: > In order to be sure loop_terminator_list is an accurate > representation of all the jumps in the loop we need to be sure we > didn't encounter any other complex behaviour such as continues, > nested breaks, etc during analysis. > > This will be used in the following patch. > --- > src/compiler/nir/nir.h | 6 ++++++ > src/compiler/nir/nir_loop_analyze.c | 8 ++++++-- > 2 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h > index 3bfe7d7f7bf..336a2ca5ac4 100644 > --- a/src/compiler/nir/nir.h > +++ b/src/compiler/nir/nir.h > @@ -1745,6 +1745,12 @@ typedef struct { > /* Unroll the loop regardless of its size */ > bool force_unroll; > > + /* Does the loop contain complex loop terminators, continues or other > + * complex behaviours? If this is true we can't rely on > + * loop_terminator_list to be complete or accurate. > + */ > + bool complex_loop; > + > nir_loop_terminator *limiting_terminator; > > /* A list of loop_terminators terminating this loop. */ > diff --git a/src/compiler/nir/nir_loop_analyze.c > b/src/compiler/nir/nir_loop_analyze.c > index 5454b7691ba..9c3fd2f286f 100644 > --- a/src/compiler/nir/nir_loop_analyze.c > +++ b/src/compiler/nir/nir_loop_analyze.c > @@ -317,15 +317,19 @@ find_loop_terminators(loop_info_state *state) > * not find a loop terminator, but there is a break-statement > then > * we should return false so that we do not try to find > trip-count > */ > - if (!nir_is_trivial_loop_if(nif, break_blk)) > + if (!nir_is_trivial_loop_if(nif, break_blk)) { > + state->loop->info->complex_loop = true; > return false; > + } > > /* Continue if the if contained no jumps at all */ > if (!break_blk) > continue; > > - if (nif->condition.ssa->parent_instr->type == nir_instr_type_phi) > + if (nif->condition.ssa->parent_instr->type == > nir_instr_type_phi) { > + state->loop->info->complex_loop = true; > return false; > + } > > nir_loop_terminator *terminator = > rzalloc(state->loop->info, nir_loop_terminator); > -- > 2.17.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev