From: Timothy Arceri Date: Wed, 28 Feb 2018 03:33:55 +0000 (+1100) Subject: nir: fix interger divide by zero crash during constant folding X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0c1f37cc2d8555223ade73b244a3ee374be8d9cd;p=mesa.git nir: fix interger divide by zero crash during constant folding From the GLSL 4.60 spec Section 5.9 (Expressions): "Dividing by zero does not cause an exception but does result in an unspecified value." Fixes: 89285e4d47a6 "nir: add new constant folding infrastructure" Reviewed-by: Jason Ekstrand Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105271 --- diff --git a/src/compiler/nir/nir_opcodes.py b/src/compiler/nir/nir_opcodes.py index 278562b2bd1..97da4db28f1 100644 --- a/src/compiler/nir/nir_opcodes.py +++ b/src/compiler/nir/nir_opcodes.py @@ -404,8 +404,8 @@ binop("umul_high", tuint32, commutative, "(uint32_t)(((uint64_t) src0 * (uint64_t) src1) >> 32)") binop("fdiv", tfloat, "", "src0 / src1") -binop("idiv", tint, "", "src0 / src1") -binop("udiv", tuint, "", "src0 / src1") +binop("idiv", tint, "", "src1 == 0 ? 0 : (src0 / src1)") +binop("udiv", tuint, "", "src1 == 0 ? 0 : (src0 / src1)") # returns a boolean representing the carry resulting from the addition of # the two unsigned arguments.