<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 22, 2015 at 7:39 AM, Jason Ekstrand <span dir="ltr"><<a href="mailto:jason@jlekstrand.net" target="_blank">jason@jlekstrand.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><p dir="ltr"><br>
On Jan 22, 2015 3:41 AM, "Kenneth Graunke" <<a href="mailto:kenneth@whitecape.org" target="_blank">kenneth@whitecape.org</a>> wrote:<br>
><br>
> This allows us to count NIR instructions via shader-db.<br>
><br>
> Use "run" as normal.  The results file will contain both NIR and<br>
> assembly.<br>
><br>
> Then, to generate a NIR report:<br>
> ./report.py <(grep    NIR results/foo) <(grep    NIR results/bar)<br>
><br>
> Or, to generate an i965 report:<br>
> ./report.py <(grep -v NIR results/foo) <(grep -v NIR results/bar)<br>
><br>
> Signed-off-by: Kenneth Graunke <<a href="mailto:kenneth@whitecape.org" target="_blank">kenneth@whitecape.org</a>><br>
> ---<br>
>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 32 ++++++++++++++++++++++++++++++++<br>
>  1 file changed, 32 insertions(+)<br>
><br>
> I'm guessing the counting should really go in nir proper.<br>
> This is what I used to generate the statistics, in case people were<br>
> wondering.<br>
><br>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp<br>
> index 2d30321..0eb137f 100644<br>
> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp<br>
> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp<br>
> @@ -49,6 +49,28 @@ nir_optimize(nir_shader *nir)<br>
>     } while (progress);<br>
>  }<br>
><br>
> +static bool<br>
> +count_nir_instrs_in_block(nir_block *block, void *state)<br>
> +{<br>
> +   int *count = (int *) state;<br>
> +   nir_foreach_instr(block, instr) {<br>
> +      *count = *count + 1;</p>
</div></div><p dir="ltr">*count++?  Also, we could get rid of the braces on this if.  Otherwise, I like this.</p></blockquote><div>Reviewed-by: Jason Ekstrand <<a href="mailto:jason.ekstrand@intel.com">jason.ekstrand@intel.com</a>><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">
<p dir="ltr">> +   }<br>
> +   return true;<br>
> +}<br>
> +<br>
> +static int<br>
> +count_nir_instrs(nir_shader *nir)<br>
> +{<br>
> +   int count = 0;<br>
> +   nir_foreach_overload(nir, overload) {<br>
> +      if (!overload->impl)<br>
> +         continue;<br>
> +      nir_foreach_block(overload->impl, count_nir_instrs_in_block, &count);<br>
> +   }<br>
> +   return count;<br>
> +}<br>
> +<br>
>  void<br>
>  fs_visitor::emit_nir_code()<br>
>  {<br>
> @@ -99,6 +121,16 @@ fs_visitor::emit_nir_code()<br>
>        nir_print_shader(nir, stderr);<br>
>     }<br>
><br>
> +   if (dispatch_width == 8) {<br>
> +      static GLuint msg_id = 0;<br>
> +      _mesa_gl_debug(&brw->ctx, &msg_id,<br>
> +                     MESA_DEBUG_SOURCE_SHADER_COMPILER,<br>
> +                     MESA_DEBUG_TYPE_OTHER,<br>
> +                     MESA_DEBUG_SEVERITY_NOTIFICATION,<br>
> +                     "FS NIR shader: %d inst\n",<br>
> +                     count_nir_instrs(nir));<br>
> +   }<br>
> +<br>
>     nir_convert_from_ssa(nir);<br>
>     nir_validate_shader(nir);<br>
>     nir_lower_vec_to_movs(nir);<br>
> --<br>
> 2.2.2<br>
><br>
> _______________________________________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
> <a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</p>
</div></div></blockquote></div><br></div></div>