This is an automated email from the ASF dual-hosted git repository.

junrushao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git


The following commit(s) were added to refs/heads/main by this push:
     new 6b4e3d08ea [TEST] Fix division by 0 in llvm codegen test (#14232)
6b4e3d08ea is described below

commit 6b4e3d08ea0155dad5a04272e196b18b3725150b
Author: Luke Hutton <[email protected]>
AuthorDate: Thu Mar 9 05:33:39 2023 +0000

    [TEST] Fix division by 0 in llvm codegen test (#14232)
    
    In the test `test_llvm_div`, some cases can lead to a division by 0.
    Consider the case when `start=-12, end=-12, dstart=-2 and dend=0`, the
    range of values input to clipb() will be: [-12, ..., -1, 1] (with 1
    being specially selected to prevent division by 0). For the input 1,
    clipb evaluates to: min(/*dend=*/0, max(/*dstart=*/-12, /*i=*/1)) = 0,
    thus leading to a division by 0.
    
    LLVM11, which runs in CI, doesn't seem to throw any kind of error, while
    using LLVM15 leads to a "floating point exception". Regardless, since
    division by 0 is undefined behaviour and the compiler can do anything,
    the solution here is to fix the test so division by 0 doesn't occur.
    
    Change-Id: Ib82776e9e0aff443dacc101a579d382059bb9826
---
 tests/python/unittest/test_target_codegen_llvm.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/python/unittest/test_target_codegen_llvm.py 
b/tests/python/unittest/test_target_codegen_llvm.py
index d8a853ff5d..bef682435e 100644
--- a/tests/python/unittest/test_target_codegen_llvm.py
+++ b/tests/python/unittest/test_target_codegen_llvm.py
@@ -525,7 +525,7 @@ def test_llvm_div():
     ]:
         for dstart, dend in [
             (-11, -1),
-            (-11, 0),
+            (-11, 1),
             (-4, -4),
             (-2, -2),
             (1, 11),
@@ -534,7 +534,7 @@ def test_llvm_div():
             (2, 2),
             (-11, 11),
         ]:
-            if end < start or dend < dstart or (dend == 0 and dstart == 0):
+            if end < start or dend < dstart or (dend == 0 and dstart == 0) or 
dend == 0:
                 continue
             check(start, end, dstart, dend, "int32", floor_div=False)
             check(start, end, dstart, dend, "int32", floor_div=True)

Reply via email to