nir: Avoid an extra NIR op in integer divide lowering.

NIR bools are ~0 for true, so ((unsigned)a >> 31) != 0 -> ((int)a >> 31).

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Eric Anholt
2016-11-07 10:34:01 -08:00
parent 7f27ad5597
commit 80786a67cf

View File

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