Skip to content

Commit f90c8f1

Browse files
committed
Just use RPO in to_c
1 parent 9d46e0e commit f90c8f1

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

ir.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,9 @@ def to_c(self) -> str:
415415
f.write("HANDLES();\n")
416416
for param in self.params:
417417
f.write(f"GC_PROTECT({param});\n")
418-
self._to_c(f, self.cfg.entry, InstrId(), self.cfg.doms())
418+
gvn = InstrId()
419+
for block in self.cfg.rpo():
420+
self._to_c(f, block, gvn)
419421
f.write("}")
420422
return f.getvalue()
421423
return
@@ -424,7 +426,7 @@ def c_decl(self) -> str:
424426
params = ", ".join(f"struct object *{param}" for param in self.params)
425427
return f"struct object *fn{self.id}({params})\n"
426428

427-
def _instr_to_c(self, instr: Instr, gvn: InstrId, doms: dict[Block, set[Block]]) -> str:
429+
def _instr_to_c(self, instr: Instr, gvn: InstrId) -> str:
428430
def _handle(rhs: str) -> str:
429431
return f"OBJECT_HANDLE({gvn.name(instr)}, {rhs});\n"
430432

@@ -470,24 +472,21 @@ def op(idx: int) -> str:
470472
return f"if ({op(0)} == NULL) {{ abort(); }}\n" + _handle(op(0))
471473
raise NotImplementedError(type(instr))
472474

473-
def _to_c(self, f: io.StringIO, block: Block, gvn: InstrId, doms: dict[Block, set[Block]]) -> None:
475+
def _to_c(self, f: io.StringIO, block: Block, gvn: InstrId) -> None:
474476
f.write(f"{block.name()}:;\n")
475477
for instr in block.instrs:
476478
if isinstance(instr, Control):
477479
break
478-
f.write(self._instr_to_c(instr.find(), gvn, doms))
480+
f.write(self._instr_to_c(instr.find(), gvn))
479481
assert isinstance(instr, Control)
480482
if isinstance(instr, Return):
481483
f.write(f"return {gvn.name(instr.operands[0])};\n")
482484
elif isinstance(instr, Jump):
483485
f.write(f"goto {instr.target.name()};\n")
484-
self._to_c(f, instr.target, gvn, doms)
485486
elif isinstance(instr, CondBranch):
486487
f.write(
487488
f"if ({gvn.name(instr.operands[0])}) {{ goto {instr.conseq.name()}; }} else {{ goto {instr.alt.name()}; }}\n"
488489
)
489-
self._to_c(f, instr.conseq, gvn, doms)
490-
self._to_c(f, instr.alt, gvn, doms)
491490
elif isinstance(instr, MatchFail):
492491
f.write("""fprintf(stderr, "no matching cases\\n");\n""")
493492
f.write("abort();\n")

0 commit comments

Comments
 (0)