summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2018-12-16 00:42:01 -0600
committerJason Ekstrand <jason@jlekstrand.net>2018-12-16 21:03:02 +0000
commite17426058cd50d8302acd5155846871a2f39b408 (patch)
treee76f364634c8ce1811e7f0800d30c77454d5a001
parent2977c777589e15ff632415ecfd3548f49f56b4d8 (diff)
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>
-rw-r--r--src/compiler/nir/nir_lower_idiv.c2
1 files changed, 1 insertions, 1 deletions
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);
}