nir/lower_idiv: Use ilt instead of bit twiddling

The previous code was creating a boolean by doing an arithmetic right-
shift by 31 which produces a boolean which is true if the argument is
negative.  This is the same as the expression r < 0 which is much
simpler and doesn't depend on NIR's representation of booleans.

Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Jason Ekstrand 2018-12-16 00:42:01 -06:00 committed by Jason Ekstrand
parent 2977c77758
commit e17426058c

View file

@ -101,7 +101,7 @@ convert_instr(nir_builder *bld, nir_alu_instr *alu)
if (is_signed) {
/* fix the sign: */
r = nir_ixor(bld, numer, denom);
r = nir_ishr(bld, r, nir_imm_int(bld, 31));
r = nir_ilt(bld, r, nir_imm_int(bld, 0));
b = nir_ineg(bld, q);
q = nir_bcsel(bld, r, b, q);
}