From 84e5c43178a2627e699971bff9e52fa04b8c2d31 Mon Sep 17 00:00:00 2001 From: BobTheBuidler Date: Fri, 26 Sep 2025 10:25:26 +0000 Subject: [PATCH 1/2] feat: optimize out first if-check in `for_loop_helper_with_index` --- mypyc/irbuild/for_helpers.py | 7 ++++++- mypyc/test-data/irbuild-lists.test | 5 +++++ mypyc/test-data/irbuild-tuple.test | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/mypyc/irbuild/for_helpers.py b/mypyc/irbuild/for_helpers.py index 5edee6cb4df4..db986f3fd9a7 100644 --- a/mypyc/irbuild/for_helpers.py +++ b/mypyc/irbuild/for_helpers.py @@ -183,7 +183,12 @@ def for_loop_helper_with_index( builder.push_loop_stack(step_block, exit_block) - builder.goto_and_activate(condition_block) + if isinstance(length, Integer) and length.value > 0: + builder.goto(body_block) + builder.activate_block(condition_block) + else: + builder.goto_and_activate(condition_block) + for_gen.gen_condition() builder.activate_block(body_block) diff --git a/mypyc/test-data/irbuild-lists.test b/mypyc/test-data/irbuild-lists.test index 2f5b3b39319e..1f3c0d409f44 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -645,6 +645,7 @@ L0: r0 = 'abc' r1 = PyList_New(3) r2 = 0 + goto L2 L1: r3 = r2 < 3 :: signed if r3 goto L2 else goto L4 :: bool @@ -690,6 +691,7 @@ L0: r0 = 'abc' r1 = PyList_New(3) r2 = 0 + goto L2 L1: r3 = r2 < 3 :: signed if r3 goto L2 else goto L4 :: bool @@ -798,6 +800,7 @@ L0: r0 = b'abc' r1 = PyList_New(3) r2 = 0 + goto L2 L1: r3 = r2 < 3 :: signed if r3 goto L2 else goto L8 :: bool @@ -952,6 +955,7 @@ L0: r18 = CPyList_Extend(r10, r17) r19 = PyList_New(13) r20 = 0 + goto L2 L1: r21 = var_object_size r10 r22 = r20 < r21 :: signed @@ -968,3 +972,4 @@ L3: L4: a = r19 return 1 + diff --git a/mypyc/test-data/irbuild-tuple.test b/mypyc/test-data/irbuild-tuple.test index 081cc1b174c9..7507b6255740 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -417,6 +417,7 @@ L0: r0 = 'abc' r1 = PyTuple_New(3) r2 = 0 + goto L2 L1: r3 = r2 < 3 :: signed if r3 goto L2 else goto L4 :: bool @@ -462,6 +463,7 @@ L0: r0 = 'abc' r1 = PyTuple_New(3) r2 = 0 + goto L2 L1: r3 = r2 < 3 :: signed if r3 goto L2 else goto L4 :: bool @@ -570,6 +572,7 @@ L0: r0 = b'abc' r1 = PyTuple_New(3) r2 = 0 + goto L2 L1: r3 = r2 < 3 :: signed if r3 goto L2 else goto L8 :: bool @@ -879,6 +882,7 @@ L0: r18 = CPyList_Extend(r10, r17) r19 = PyTuple_New(13) r20 = 0 + goto L2 L1: r21 = var_object_size r10 r22 = r20 < r21 :: signed From e3b3abcf23ff87a0ae723797bc921c1231ef4ebd Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 10:42:20 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- mypyc/test-data/irbuild-lists.test | 1 - 1 file changed, 1 deletion(-) diff --git a/mypyc/test-data/irbuild-lists.test b/mypyc/test-data/irbuild-lists.test index 1f3c0d409f44..d864bfd19df2 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -972,4 +972,3 @@ L3: L4: a = r19 return 1 -