Reviewed-by: Marek Olšák <marek.ol...@amd.com> Marek
On Fri, Sep 22, 2017 at 1:49 AM, Timothy Arceri <tarc...@itsqueeze.com> wrote: > c7affbf6875622a enabled GLSLOptimizeConservatively on some > drivers. The idea was to speed up compile times by running > the GLSL IR passes only once each time do_common_optimization() > is called. However loop unrolling can create a big mess and > with large loops can actually case compile times to increase > significantly due to a bunch of redundant if statements being > propagated to other IRs. > > Here we make sure to clean things up before moving on. > > There was no measureable difference in shader-db compile times, > but it makes compile times of some piglit tests go from a couple > of seconds to basically instant. > > The shader-db results seemed positive also: > > Totals: > SGPRS: 2829456 -> 2828376 (-0.04 %) > VGPRS: 1720793 -> 1721457 (0.04 %) > Spilled SGPRs: 7707 -> 7707 (0.00 %) > Spilled VGPRs: 33 -> 33 (0.00 %) > Private memory VGPRs: 3140 -> 2060 (-34.39 %) > Scratch size: 3308 -> 2180 (-34.10 %) dwords per thread > Code Size: 79441464 -> 79214616 (-0.29 %) bytes > LDS: 436 -> 436 (0.00 %) blocks > Max Waves: 558670 -> 558571 (-0.02 %) > Wait states: 0 -> 0 (0.00 %) > --- > src/compiler/glsl/glsl_parser_extras.cpp | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/src/compiler/glsl/glsl_parser_extras.cpp > b/src/compiler/glsl/glsl_parser_extras.cpp > index 9cbc2355f9..764c05ad80 100644 > --- a/src/compiler/glsl/glsl_parser_extras.cpp > +++ b/src/compiler/glsl/glsl_parser_extras.cpp > @@ -2209,21 +2209,27 @@ do_common_optimization(exec_list *ir, bool linked, > OPT(lower_vector_insert, ir, false); > OPT(do_swizzle_swizzle, ir); > OPT(do_noop_swizzle, ir); > > OPT(optimize_split_arrays, ir, linked); > OPT(optimize_redundant_jumps, ir); > > if (options->MaxUnrollIterations) { > loop_state *ls = analyze_loop_variables(ir); > if (ls->loop_found) { > - OPT(unroll_loops, ir, ls, options); > + bool loop_progress = unroll_loops(ir, ls, options); > + while (loop_progress) { > + loop_progress = false; > + loop_progress |= do_constant_propagation(ir); > + loop_progress |= do_if_simplification(ir); > + } > + progress |= loop_progress; > } > delete ls; > } > > #undef OPT > > return progress; > } > > extern "C" { > -- > 2.13.5 > > _______________________________________________ > 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