From e17426058cd50d8302acd5155846871a2f39b408 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Sun, 16 Dec 2018 00:42:01 -0600 Subject: [PATCH] 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 --- src/compiler/nir/nir_lower_idiv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/nir/nir_lower_idiv.c b/src/compiler/nir/nir_lower_idiv.c index b2a0a3c1899..4e7e2408ae8 100644 --- a/src/compiler/nir/nir_lower_idiv.c +++ b/src/compiler/nir/nir_lower_idiv.c @@ -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); } -- 2.30.2