summaryrefslogtreecommitdiff
path: root/cfg/ControlFlowGraph.java
diff options
context:
space:
mode:
authorbd-912 <bdunahu@colostate.edu>2024-04-27 21:31:11 -0600
committerbd-912 <bdunahu@colostate.edu>2024-04-27 21:31:11 -0600
commitdfcf11cb8d7f28acad505c2785831424c38554b8 (patch)
tree0597a6f912d81ca5881df46a9bd52bebb6bfbc6f /cfg/ControlFlowGraph.java
parent008d0de42fdabb54dc43de5cfa33f4c15bd1d7ba (diff)
LIRVisitor Correct Liveness Analysis!
Diffstat (limited to 'cfg/ControlFlowGraph.java')
-rw-r--r--cfg/ControlFlowGraph.java23
1 files changed, 14 insertions, 9 deletions
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<CFGNode> getNodes() {