Skip to content

Commit c474ce5

Browse files
committed
Update irbuild-tuple.test
1 parent 529abf2 commit c474ce5

File tree

2 files changed

+77
-36
lines changed

2 files changed

+77
-36
lines changed

mypyc/irbuild/for_helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
TypeAlias,
3030
Var,
3131
)
32-
from mypy.types import LiteralType, TupleType, get_proper_type, get_proper_types
32+
from mypy.types import LiteralType, TupleType, get_proper_type
3333
from mypyc.ir.ops import (
3434
ERR_NEVER,
3535
BasicBlock,

mypyc/test-data/irbuild-tuple.test

Lines changed: 76 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -744,73 +744,114 @@ L4:
744744
[case testTupleBuiltFromFinalFixedLengthTuple]
745745
from typing import Final
746746

747-
source: Final = (1, 2, 3)
747+
def varint() -> int:
748+
# this helper lets us break constant folding for this test
749+
return 2
750+
751+
source_final: Final = (1, varint(), 3)
752+
source_var = (1, varint(), 3)
748753

749754
def f(val: int) -> bool:
750755
return val % 2 == 0
751756

752-
def test() -> None:
753-
a = tuple(f(x) for x in source)
757+
def test_final_can_fold() -> None:
758+
a = tuple(f(x) for x in source_final)
759+
def test_var_can_not_fold() -> None:
760+
a = tuple(f(x) for x in source_var)
754761
[out]
762+
def varint():
763+
L0:
764+
return 4
755765
def f(val):
756766
val, r0 :: int
757767
r1 :: bit
758768
L0:
759769
r0 = CPyTagged_Remainder(val, 4)
760770
r1 = int_eq r0, 0
761771
return r1
762-
def test():
772+
def test_final_can_fold():
763773
r0 :: tuple[int, int, int]
764774
r1 :: bool
765775
r2 :: object
766776
r3 :: native_int
767777
r4 :: bit
768-
r5, r6, r7 :: int
769-
r8, r9, r10 :: object
770-
r11, r12 :: tuple
771-
r13 :: native_int
772-
r14 :: bit
773-
r15 :: object
774-
r16, x :: int
775-
r17 :: bool
776-
r18 :: object
777-
r19 :: native_int
778+
r5 :: object
779+
r6 :: int
780+
r7, r8 :: object
781+
r9, r10 :: tuple
782+
r11 :: native_int
783+
r12 :: bit
784+
r13 :: object
785+
r14, x :: int
786+
r15 :: bool
787+
r16 :: object
788+
r17 :: native_int
778789
a :: tuple
779790
L0:
780-
r0 = __main__.source :: static
791+
r0 = __main__.source_final :: static
781792
if is_error(r0) goto L1 else goto L2
782793
L1:
783-
r1 = raise NameError('value for final name "source" was not set')
794+
r1 = raise NameError('value for final name "source_final" was not set')
784795
unreachable
785796
L2:
786797
r2 = box(tuple[int, int, int], r0)
787798
r3 = PyObject_Size(r2)
788799
r4 = r3 >= 0 :: signed
789-
r5 = r0[0]
800+
r5 = object 1
790801
r6 = r0[1]
791-
r7 = r0[2]
792-
r8 = box(int, r5)
793-
r9 = box(int, r6)
794-
r10 = box(int, r7)
795-
r11 = PyTuple_Pack(3, r8, r9, r10)
796-
r12 = PyTuple_New(r3)
797-
r13 = 0
802+
r7 = object 3
803+
r8 = box(int, r6)
804+
r9 = PyTuple_Pack(3, r5, r8, r7)
805+
r10 = PyTuple_New(r3)
806+
r11 = 0
798807
L3:
799-
r14 = r13 < r3 :: signed
800-
if r14 goto L4 else goto L6 :: bool
808+
r12 = r11 < r3 :: signed
809+
if r12 goto L4 else goto L6 :: bool
801810
L4:
802-
r15 = CPySequenceTuple_GetItemUnsafe(r11, r13)
803-
r16 = unbox(int, r15)
804-
x = r16
805-
r17 = f(x)
806-
r18 = box(bool, r17)
807-
CPySequenceTuple_SetItemUnsafe(r12, r13, r18)
811+
r13 = CPySequenceTuple_GetItemUnsafe(r9, r11)
812+
r14 = unbox(int, r13)
813+
x = r14
814+
r15 = f(x)
815+
r16 = box(bool, r15)
816+
CPySequenceTuple_SetItemUnsafe(r10, r11, r16)
808817
L5:
809-
r19 = r13 + 1
810-
r13 = r19
818+
r17 = r11 + 1
819+
r11 = r17
811820
goto L3
812821
L6:
813-
a = r12
822+
a = r10
823+
return 1
824+
def test_var_can_not_fold():
825+
source :: tuple
826+
r0 :: native_int
827+
r1 :: tuple
828+
r2 :: native_int
829+
r3 :: bit
830+
r4 :: object
831+
r5, x, r6 :: bool
832+
r7 :: object
833+
r8 :: native_int
834+
a :: tuple
835+
L0:
836+
r0 = var_object_size source
837+
r1 = PyTuple_New(r0)
838+
r2 = 0
839+
L1:
840+
r3 = r2 < r0 :: signed
841+
if r3 goto L2 else goto L4 :: bool
842+
L2:
843+
r4 = CPySequenceTuple_GetItemUnsafe(source, r2)
844+
r5 = unbox(bool, r4)
845+
x = r5
846+
r6 = f(x)
847+
r7 = box(bool, r6)
848+
CPySequenceTuple_SetItemUnsafe(r1, r2, r7)
849+
L3:
850+
r8 = r2 + 1
851+
r2 = r8
852+
goto L1
853+
L4:
854+
a = r1
814855
return 1
815856

816857
[case testTupleBuiltFromVariableLengthTuple]

0 commit comments

Comments
 (0)