Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r76600:b9c118ee7033
Date: 2015-03-27 19:51 +0100
http://bitbucket.org/pypy/pypy/changeset/b9c118ee7033/

Log:    Add a comment describing the complex reason for why the two
        int_add_ovf() here cannot overflow

diff --git a/pypy/module/pypyjit/test_pypy_c/test_array.py 
b/pypy/module/pypyjit/test_pypy_c/test_array.py
--- a/pypy/module/pypyjit/test_pypy_c/test_array.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_array.py
@@ -94,13 +94,25 @@
                 guard_not_invalidated(descr=...)
             # the bound check guard on img has been killed (thanks to the 
asserts)
                 i14 = getarrayitem_raw(i10, i8, descr=<ArrayS .>)
+            # advanced: the following int_add cannot overflow, because:
+            # - i14 fits inside 32 bits
+            # - i9 fits inside 33 bits, because:
+            #     - it comes from the previous iteration's i15
+            #     - prev i19 = prev i18 + prev i15
+            #         - prev i18 fits inside 32 bits
+            #         - prev i19 is guarded to fit inside 32 bits
+            #         - so as a consequence, prev i15 fits inside 33 bits
+            # the new i15 thus fits inside "33.5" bits, which is enough to
+            # guarantee that the next int_add(i18, i15) cannot overflow 
either...
                 i15 = int_add(i9, i14)
                 i17 = int_sub(i8, 640)
             # the bound check guard on intimg has been killed (thanks to the 
asserts)
                 i18 = getarrayitem_raw(i11, i17, descr=<ArrayS .>)
                 i19 = int_add(i18, i15)
-            # on 64bit, there is a guard checking that i19 actually fits into 
32bit
-                ...
+            # guard checking that i19 actually fits into 32bit
+                i20 = int_signext(i19, 4)
+                i65 = int_ne(i20, i19)
+                guard_false(i65, descr=...)
                 setarrayitem_raw(i11, i8, _, descr=<ArrayS .>)
                 i28 = int_add(i8, 1)
                 --TICK--
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to