Skip to content

Commit ee1977d

Browse files
committed
Speed up optimization
Remove quadratic calls
1 parent 2b2667d commit ee1977d

2 files changed

Lines changed: 20 additions & 21 deletions

File tree

src/arch/zx48k/backend/__init__.py

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2351,32 +2351,31 @@ def output_join(output: List[str], new_chunk: List[str], optimize: bool = True):
23512351

23522352
if optimize and OPTIONS.optimization > 1:
23532353
# Remove unused labels
2354-
while True:
2355-
to_remove = []
23562354

2357-
for i, ins in enumerate(output):
2358-
ins = ins[:-1]
2359-
if ins not in TMP_LABELS:
2355+
label_used = {}
2356+
label_to_delete = {}
2357+
2358+
for i, ins in enumerate(output):
2359+
try_label = ins[:-1]
2360+
if try_label in TMP_LABELS:
2361+
if label_used.get(try_label):
2362+
label_to_delete.pop(try_label, None)
23602363
continue
23612364

2362-
for j, ins2 in enumerate(output):
2363-
if j == i:
2364-
continue
2365-
if ins in Asm.opers(ins2):
2366-
break
2367-
else:
2368-
to_remove.append(i)
2365+
label_to_delete[try_label] = i
2366+
continue
23692367

2370-
if not to_remove:
2371-
break
2368+
for op in Asm.opers(ins):
2369+
if op in TMP_LABELS:
2370+
label_used[op] = True
2371+
label_to_delete.pop(op, None)
23722372

2373-
to_remove.reverse()
2374-
for i in to_remove:
2375-
output.pop(i)
2373+
for i in sorted(label_to_delete.values(), reverse=True):
2374+
output.pop(i)
23762375

2377-
tmp = output
2378-
output = []
2379-
output_join(output, tmp)
2376+
tmp = output
2377+
output = []
2378+
output_join(output, tmp)
23802379

23812380
for i in sorted(REQUIRES):
23822381
output.append('#include once <%s>' % i)

src/arch/zx48k/optimizer/memcell.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ def used_labels(self) -> List[str]:
353353
break
354354

355355
if token.type == 'ID':
356-
result += [token.value]
356+
result.append(token.value)
357357
except Exception:
358358
pass
359359

0 commit comments

Comments
 (0)