[Mesa-dev] [PATCH] nir: fix divide by zero crash during constant folding
Jason Ekstrand
jason at jlekstrand.net
Wed Feb 28 03:13:27 UTC 2018
On February 27, 2018 19:11:49 Jason Ekstrand <jason at jlekstrand.net> wrote:
> On February 27, 2018 19:07:43 Timothy Arceri <tarceri at itsqueeze.com> wrote:
>
>> 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)")
>
> Should this return inf?
Or maybe an unsignaling NaN? I'm not really sure.
>> +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
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
More information about the mesa-dev
mailing list