<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Mon, Oct 15, 2018 at 3:13 PM Connor Abbott <<a href="mailto:cwabbott0@gmail.com">cwabbott0@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Mon, Oct 15, 2018 at 8:41 PM Jason Ekstrand <<a href="mailto:jason@jlekstrand.net" target="_blank">jason@jlekstrand.net</a>> wrote:<br>
><br>
> On Mon, Oct 15, 2018 at 1:39 PM Ian Romanick <<a href="mailto:idr@freedesktop.org" target="_blank">idr@freedesktop.org</a>> wrote:<br>
>><br>
>> On 10/14/2018 03:58 PM, Jason Ekstrand wrote:<br>
>> > On October 14, 2018 17:12:34 Matt Turner <<a href="mailto:mattst88@gmail.com" target="_blank">mattst88@gmail.com</a>> wrote:<br>
>> >> +static nir_ssa_def *<br>
>> >> +lower_iabs64(nir_builder *b, nir_ssa_def *x)<br>
>> >> +{<br>
>> >> +   nir_ssa_def *x_hi = nir_unpack_64_2x32_split_y(b, x);<br>
>> >> +   nir_ssa_def *x_is_neg = nir_ilt(b, x_hi, nir_imm_int(b, 0));<br>
>> >> +   return nir_bcsel(b, x_is_neg, lower_ineg64(b, x), x);<br>
>> ><br>
>> > lower_bcsel?  Or, since we're depending on this running multiple times,<br>
>> > just nir_ineg?  I go back and forth on whether a pass like this should<br>
>> > run in a loop or be smart enough to lower intermediate bits on the fly.<br>
>> > We should probably pick one.<br>
>><br>
>> In principle, I agree.  I've been bitten a couple times by lowering<br>
>> passes that generate other things that need to be lowered on some<br>
>> platforms (that I didn't test).  In this case, I think the loop is the<br>
>> right answer since each operation is lowered by a separate flag.<br>
><br>
><br>
> That's the easy answer, certainly.  The other option is to have every lowered thing builder check the flag and conditionally do the lowering.  That's annoying and hard to get right so a loop is probably best for now.<br>
<br>
Couldn't you just have the builder be right after the instruction,<br>
instead of before it, and make the outer loop use a non-safe iterator<br>
so that it will immediately run over the instructions generated? Doing<br>
another pass over the whole shader is usually a little expensive.<br></blockquote><div><br></div><div>That's sneaky and also a really good idea!  We should totally just do that.</div><div><br></div><div>--Jason<br></div></div></div>