Ajout du code pour la Liveness

This commit is contained in:
MysaaJava 2022-11-13 12:47:48 +01:00
parent ec366c8e07
commit 2c50bbaaa0
Signed by: Mysaa
GPG Key ID: DBA23608F23F5A10

View File

@ -48,16 +48,27 @@ class LivenessSSA:
def liveout_at_block(self, block: Block, var: Temporary) -> None:
"""Backward propagation of liveness information at a block."""
raise NotImplementedError("LivenessSSA") # TODO (Lab 5b, Exercise 1)
if(not var in self._seen[block]):
self._seen[block].add(var)
self.liveout_at_instruction(block,len(block.get_body_and_terminator())-1,var)
def liveout_at_instruction(self, block: Block, pos: int, var: Temporary) -> None:
"""Backward propagation of liveness information at a non-phi instruction."""
instr = block.get_body_and_terminator()[pos]
raise NotImplementedError("LivenessSSA") # TODO (Lab 5b, Exercise 1)
self._liveout[instr].add(var)
if (not var in instr.defined()):
self.livein_at_instruction(block,pos,var)
def livein_at_instruction(self, block: Block, pos: int, var: Temporary) -> None:
"""Backward propagation of liveness information at a non-phi instruction."""
raise NotImplementedError("LivenessSSA") # TODO (Lab 5b, Exercise 1)
if(pos==0):
for phiS in block._phis:
self._liveout[phiS].add(var)
for predBlock in self._cfg.get_blocks():
if block in self._cfg.out_blocks(predBlock):
self.liveout_at_block(predBlock,var)
else:
self.liveout_at_instruction(block,pos-1,var)
def gather_uses(self) -> Dict[Temporary, Set[Tuple[Block, int | None, Statement]]]:
"""
@ -85,7 +96,11 @@ class LivenessSSA:
def conflict_on_phis(self) -> None:
"""Ensures that variables defined by phi instructions are in conflict with one-another."""
raise NotImplementedError("LivenessSSA") # TODO (Lab 5b, Exercise 1)
for block in self._cfg.get_blocks():
varSets = set()
for phiS in block._phis:
varSets.add(phiS.defined()[0])
self._liveout[phiS] = self._liveout[phiS].union(varSets)
def print_map_in_out(self) -> None: # pragma: no cover
"""Print live out sets at each instruction, group by block, useful for debugging!"""