Skip to content

Commit bdc5afb

Browse files
authored
[mypyc] Fix to_lines to show same type registers on the same line (python#9300)
This PR fixes Environment.to_lines so that continuous registers with the same type are shown on the same line.
1 parent 049a879 commit bdc5afb

15 files changed

+80
-172
lines changed

mypyc/ir/ops.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -243,18 +243,13 @@ def to_lines(self, const_regs: Optional[Dict[str, int]] = None) -> List[str]:
243243
regs = list(self.regs())
244244
if const_regs is None:
245245
const_regs = {}
246+
regs = [reg for reg in regs if reg.name not in const_regs]
246247
while i < len(regs):
247248
i0 = i
248-
if regs[i0].name not in const_regs:
249-
group = [regs[i0].name]
250-
else:
251-
group = []
252-
i += 1
253-
continue
249+
group = [regs[i0].name]
254250
while i + 1 < len(regs) and regs[i + 1].type == regs[i0].type:
255251
i += 1
256-
if regs[i].name not in const_regs:
257-
group.append(regs[i].name)
252+
group.append(regs[i].name)
258253
i += 1
259254
result.append('%s :: %s' % (', '.join(group), regs[i0].type))
260255
return result

mypyc/test-data/analysis.test

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,11 @@ def f(a: int) -> None:
99
z = 1
1010
[out]
1111
def f(a):
12-
a :: int
13-
x :: int
12+
a, x :: int
1413
r0 :: bool
1514
r1 :: native_int
1615
r2, r3, r4 :: bool
17-
y :: int
18-
z :: int
16+
y, z :: int
1917
L0:
2018
x = 2
2119
r1 = x & 1
@@ -69,8 +67,7 @@ def f(a: int) -> int:
6967
return x
7068
[out]
7169
def f(a):
72-
a :: int
73-
x :: int
70+
a, x :: int
7471
r0 :: bool
7572
r1 :: native_int
7673
r2, r3, r4 :: bool
@@ -121,8 +118,7 @@ def f() -> int:
121118
return x
122119
[out]
123120
def f():
124-
x :: int
125-
y :: int
121+
x, y :: int
126122
L0:
127123
x = 2
128124
y = 2
@@ -171,8 +167,7 @@ def f(a):
171167
r0 :: bool
172168
r1 :: native_int
173169
r2, r3, r4 :: bool
174-
y :: int
175-
x :: int
170+
y, x :: int
176171
L0:
177172
r1 = a & 1
178173
r2 = r1 == 0
@@ -304,15 +299,12 @@ def f(n: int) -> None:
304299
n = x
305300
[out]
306301
def f(n):
307-
n :: int
308-
x :: int
309-
y :: int
302+
n, x, y :: int
310303
r0 :: bool
311304
r1 :: native_int
312305
r2 :: bool
313306
r3 :: native_int
314-
r4, r5, r6, r7 :: bool
315-
r8 :: bool
307+
r4, r5, r6, r7, r8 :: bool
316308
r9 :: native_int
317309
r10 :: bool
318310
r11 :: native_int
@@ -419,8 +411,7 @@ def f(x: int) -> int:
419411
return f(a) + a
420412
[out]
421413
def f(x):
422-
x :: int
423-
r0, a, r1, r2, r3 :: int
414+
x, r0, a, r1, r2, r3 :: int
424415
L0:
425416
r0 = f(2)
426417
if is_error(r0) goto L3 (error at f:2) else goto L1
@@ -644,16 +635,13 @@ def f(a: int) -> int:
644635
return sum
645636
[out]
646637
def f(a):
647-
a :: int
648-
sum :: int
649-
i :: int
638+
a, sum, i :: int
650639
r0 :: bool
651640
r1 :: native_int
652641
r2 :: bool
653642
r3 :: native_int
654643
r4, r5, r6, r7, r8 :: bool
655-
r9 :: int
656-
r10 :: int
644+
r9, r10 :: int
657645
L0:
658646
sum = 0
659647
i = 0

mypyc/test-data/exceptions.test

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,17 +111,14 @@ def sum(a: List[int], l: int) -> int:
111111
[out]
112112
def sum(a, l):
113113
a :: list
114-
l :: int
115-
sum :: int
116-
i :: int
114+
l, sum, i :: int
117115
r0 :: bool
118116
r1 :: native_int
119117
r2 :: bool
120118
r3 :: native_int
121119
r4, r5, r6, r7 :: bool
122120
r8 :: object
123-
r9, r10 :: int
124-
r11, r12 :: int
121+
r9, r10, r11, r12 :: int
125122
L0:
126123
sum = 0
127124
i = 0

mypyc/test-data/irbuild-basic.test

Lines changed: 20 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ def f(x: int) -> None:
5151
return
5252
[out]
5353
def f(x):
54-
x :: int
55-
y :: int
54+
x, y :: int
5655
L0:
5756
y = 2
5857
y = x
@@ -63,8 +62,7 @@ def f(x: int, y: int) -> int:
6362
return x * (y + 1)
6463
[out]
6564
def f(x, y):
66-
x, y :: int
67-
r0, r1 :: int
65+
x, y, r0, r1 :: int
6866
L0:
6967
r0 = CPyTagged_Add(y, 2)
7068
r1 = CPyTagged_Multiply(x, r0)
@@ -541,8 +539,7 @@ def f(n):
541539
r2 :: bool
542540
r3 :: native_int
543541
r4, r5, r6, r7, r8 :: bool
544-
r9, r10 :: int
545-
r11, r12, r13 :: int
542+
r9, r10, r11, r12, r13 :: int
546543
L0:
547544
r1 = n & 1
548545
r2 = r1 == 0
@@ -651,8 +648,7 @@ def f(n: int) -> int:
651648
return -1
652649
[out]
653650
def f(n):
654-
n :: int
655-
r0 :: int
651+
n, r0 :: int
656652
L0:
657653
r0 = CPyTagged_Negate(2)
658654
return r0
@@ -695,8 +691,7 @@ def f() -> int:
695691
return x
696692
[out]
697693
def f():
698-
x :: int
699-
r0 :: int
694+
x, r0 :: int
700695
L0:
701696
x = 0
702697
r0 = CPyTagged_Add(x, 2)
@@ -796,8 +791,7 @@ def f(x):
796791
x :: int
797792
r0 :: object
798793
r1 :: str
799-
r2 :: object
800-
r3, r4 :: object
794+
r2, r3, r4 :: object
801795
L0:
802796
r0 = builtins :: module
803797
r1 = unicode_1 :: static ('print')
@@ -906,14 +900,12 @@ def g(y: object) -> object:
906900
return 3
907901
[out]
908902
def g(y):
909-
y :: object
910-
r0, r1 :: object
903+
y, r0, r1 :: object
911904
r2, a :: list
912905
r3 :: tuple[int, int]
913906
r4 :: object
914907
r5 :: bool
915-
r6 :: object
916-
r7 :: object
908+
r6, r7 :: object
917909
L0:
918910
r0 = box(short_int, 2)
919911
r1 = g(r0)
@@ -937,8 +929,7 @@ def f(a: A, o: object) -> None:
937929
[out]
938930
def f(a, o):
939931
a :: __main__.A
940-
o :: object
941-
r0 :: object
932+
o, r0 :: object
942933
r1 :: bool
943934
r2 :: int
944935
r3 :: object
@@ -1122,8 +1113,7 @@ def big_int() -> None:
11221113
max_31_bit = 1073741823
11231114
[out]
11241115
def big_int():
1125-
r0, a_62_bit, r1, max_62_bit, r2, b_63_bit, r3, c_63_bit, r4, max_63_bit, r5, d_64_bit, r6, max_32_bit :: int
1126-
max_31_bit :: int
1116+
r0, a_62_bit, r1, max_62_bit, r2, b_63_bit, r3, c_63_bit, r4, max_63_bit, r5, d_64_bit, r6, max_32_bit, max_31_bit :: int
11271117
L0:
11281118
r0 = int_1 :: static (4611686018427387902)
11291119
a_62_bit = r0
@@ -1580,8 +1570,7 @@ def f(x: str) -> int: ...
15801570
def f():
15811571
r0 :: object
15821572
r1 :: str
1583-
r2 :: object
1584-
r3, r4 :: object
1573+
r2, r3, r4 :: object
15851574
r5 :: str
15861575
L0:
15871576
r0 = m :: module
@@ -1805,9 +1794,7 @@ L0:
18051794
r0 = (a, b, c)
18061795
return r0
18071796
def g():
1808-
r0 :: str
1809-
r1 :: str
1810-
r2 :: str
1797+
r0, r1, r2 :: str
18111798
r3, r4, r5 :: object
18121799
r6, r7 :: dict
18131800
r8 :: str
@@ -1835,13 +1822,11 @@ L0:
18351822
r14 = unbox(tuple[int, int, int], r13)
18361823
return r14
18371824
def h():
1838-
r0 :: str
1839-
r1 :: str
1825+
r0, r1 :: str
18401826
r2, r3 :: object
18411827
r4, r5 :: dict
18421828
r6 :: str
1843-
r7 :: object
1844-
r8 :: object
1829+
r7, r8 :: object
18451830
r9 :: tuple
18461831
r10 :: dict
18471832
r11 :: int32
@@ -1874,8 +1859,7 @@ def g() -> None:
18741859
[out]
18751860
def f(x, y, z):
18761861
x, y :: int
1877-
z :: str
1878-
r0 :: str
1862+
z, r0 :: str
18791863
L0:
18801864
if is_error(y) goto L1 else goto L2
18811865
L1:
@@ -1914,8 +1898,7 @@ def g() -> None:
19141898
def A.f(self, x, y, z):
19151899
self :: __main__.A
19161900
x, y :: int
1917-
z :: str
1918-
r0 :: str
1901+
z, r0 :: str
19191902
L0:
19201903
if is_error(y) goto L1 else goto L2
19211904
L1:
@@ -1963,8 +1946,7 @@ def f():
19631946
x, r11 :: int
19641947
r12 :: bool
19651948
r13 :: native_int
1966-
r14, r15, r16, r17 :: bool
1967-
r18 :: bool
1949+
r14, r15, r16, r17, r18 :: bool
19681950
r19 :: native_int
19691951
r20, r21, r22, r23 :: bool
19701952
r24 :: int
@@ -2048,8 +2030,7 @@ def f():
20482030
x, r11 :: int
20492031
r12 :: bool
20502032
r13 :: native_int
2051-
r14, r15, r16, r17 :: bool
2052-
r18 :: bool
2033+
r14, r15, r16, r17, r18 :: bool
20532034
r19 :: native_int
20542035
r20, r21, r22, r23 :: bool
20552036
r24 :: int
@@ -2310,8 +2291,7 @@ L0:
23102291
return r1
23112292
def BaseProperty.next(self):
23122293
self :: __main__.BaseProperty
2313-
r0 :: int
2314-
r1 :: int
2294+
r0, r1 :: int
23152295
r2 :: __main__.BaseProperty
23162296
L0:
23172297
r0 = self._incrementer
@@ -3354,8 +3334,7 @@ def f(a: bool) -> int:
33543334
[out]
33553335
def C.__mypyc_defaults_setup(__mypyc_self__):
33563336
__mypyc_self__ :: __main__.C
3357-
r0 :: bool
3358-
r1 :: bool
3337+
r0, r1 :: bool
33593338
L0:
33603339
__mypyc_self__.x = 2; r0 = is_error
33613340
__mypyc_self__.y = 4; r1 = is_error

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy