<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Mon, Oct 15, 2018 at 1:39 PM Ian Romanick <<a href="mailto:idr@freedesktop.org">idr@freedesktop.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">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></blockquote><div><br></div><div>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.</div><div><br></div><div>--Jason<br></div></div></div>