From dfcf11cb8d7f28acad505c2785831424c38554b8 Mon Sep 17 00:00:00 2001 From: bd-912 Date: Sat, 27 Apr 2024 21:31:11 -0600 Subject: LIRVisitor Correct Liveness Analysis! --- cfg/ControlFlowGraph.java | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'cfg/ControlFlowGraph.java') diff --git a/cfg/ControlFlowGraph.java b/cfg/ControlFlowGraph.java index c3943a0..49cd2fc 100644 --- a/cfg/ControlFlowGraph.java +++ b/cfg/ControlFlowGraph.java @@ -80,6 +80,14 @@ public class ControlFlowGraph { source.addDest(dest); dest.addSource(source); + for (String var : source.getReaching()) { + dest.reaching.add(var); + } + for (String var : dest.getLiveness()) { + if (!source.getDefinitions().contains(var)) + source.liveness.add(var); + } + ret += ";"; } else { MinimalLogger.info(String.format("Skipping duplicate edge for %s", @@ -89,22 +97,19 @@ public class ControlFlowGraph { return ret; } - public void addReaching(CFGNode n, String s) { - MinimalLogger.info(String.format("Def \"%s\" at %s", - s, - n.toString())); + public void addDefinition(CFGNode n, String s) { + n.defs.add(s); n.reaching.add(s); } - public void addLiveness(CFGNode n, String s) { + public void addReference(CFGNode n, String s) { if (this.isKnownVar(s)) { - MinimalLogger.info(String.format("Use \"%s\" at %s", + MinimalLogger.info(String.format("\"%s\" referenced at %s", s, n.toString())); + n.reaching.add(s); n.liveness.add(s); - } else - MinimalLogger.info(String.format("Use \"%s\" not a known variable!", - s)); + } } public ArrayList getNodes() { -- cgit v1.2.3