[Mesa-dev] [PATCH] nir: fix divide by zero crash during constant folding
Timothy Arceri
tarceri at itsqueeze.com
Wed Feb 28 03:07:02 UTC 2018
>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"
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105271
---
src/compiler/nir/nir_opcodes.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/compiler/nir/nir_opcodes.py b/src/compiler/nir/nir_opcodes.py
index 278562b2bd..dcc5b07d05 100644
--- a/src/compiler/nir/nir_opcodes.py
+++ b/src/compiler/nir/nir_opcodes.py
@@ -403,9 +403,9 @@ binop("imul_high", tint32, commutative,
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("fdiv", tfloat, "", "src1 == 0 ? 0 : (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.
--
2.14.3
More information about the mesa-dev
mailing list