]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-93554: add test for quickening of code in loops ending with conditional statement...
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>
Wed, 29 May 2024 10:44:04 +0000 (11:44 +0100)
committerGitHub <noreply@github.com>
Wed, 29 May 2024 10:44:04 +0000 (11:44 +0100)
Lib/test/test_dis.py

index 67a630e13461090a14cee05b532c3244cbbf55da..b1a1b77c53e8cb83254a630edad84d41b62f8dc2 100644 (file)
@@ -1207,6 +1207,36 @@ class DisTests(DisTestBase):
         expected = dis_loop_test_quickened_code
         self.do_disassembly_compare(got, expected)
 
+    @cpython_only
+    @requires_specialization
+    def test_loop_with_conditional_at_end_is_quickened(self):
+        def for_loop_true(x):
+            for i in range(10):
+                if x:
+                    pass
+
+        for_loop_true(True)
+        self.assertIn('FOR_ITER_RANGE',
+                      self.get_disassembly(for_loop_true, adaptive=True))
+
+        def for_loop_false(x):
+            for i in range(10):
+                if x:
+                    pass
+
+        for_loop_false(False)
+        self.assertIn('FOR_ITER_RANGE',
+                      self.get_disassembly(for_loop_false, adaptive=True))
+
+        def while_loop():
+            i = 0
+            while i < 10:
+                i += 1
+
+        while_loop()
+        self.assertIn('COMPARE_OP_INT',
+                      self.get_disassembly(while_loop, adaptive=True))
+
     @cpython_only
     def test_extended_arg_quick(self):
         got = self.get_disassembly(extended_arg_quick)