diff options
author | bd-912 <bdunahu@colostate.edu> | 2024-04-27 21:31:11 -0600 |
---|---|---|
committer | bd-912 <bdunahu@colostate.edu> | 2024-04-27 21:31:11 -0600 |
commit | dfcf11cb8d7f28acad505c2785831424c38554b8 (patch) | |
tree | 0597a6f912d81ca5881df46a9bd52bebb6bfbc6f /vaporize/LIRDict.java | |
parent | 008d0de42fdabb54dc43de5cfa33f4c15bd1d7ba (diff) |
LIRVisitor Correct Liveness Analysis!
Diffstat (limited to 'vaporize/LIRDict.java')
-rw-r--r-- | vaporize/LIRDict.java | 49 |
1 files changed, 30 insertions, 19 deletions
diff --git a/vaporize/LIRDict.java b/vaporize/LIRDict.java index 4f3d3c1..50c79b0 100644 --- a/vaporize/LIRDict.java +++ b/vaporize/LIRDict.java @@ -1,5 +1,6 @@ package vaporize; +import cs132.vapor.ast.VCodeLabel; import cs132.vapor.ast.VFunction; import cs132.vapor.ast.VInstr; @@ -24,29 +25,29 @@ public class LIRDict { CFGNode n = cfg.getNode(s); int line = n.getInstruction().sourcePos.line; + // reaching String info = "L" + line; - for (String var : n.getReaching()) + for (String var : n.getDefinitions()) if (!this.contains(var)) { this.intervals.add(new LIRVar(var, line, line)); - MinimalLogger.info(String.format("Reaching on %s --- New var %s", - info, - var)); - } else { - this.getInterval(var).trySetLastUse(line); - MinimalLogger.info(String.format("Reaching on %s --- Updating var %s", - info, - var)); + MinimalLogger.info(String.format("Found def of %s at line %s", + var, + line)); + } + for (String var : n.getReaching()) + if (n.getLiveness().contains(var)) { + if (this.contains(var)) { + this.getInterval(var).trySetLastUse(line); + MinimalLogger.info(String.format("Var %s still live on %s", + var, + line)); + } else { + this.intervals.add(new LIRVar(var, line, line)); + MinimalLogger.info(String.format("Var %s still live on %s", + var, + line)); + } } - for (String var : n.getLiveness()) { - if (!this.contains(var)) - MinimalLogger.severe(String.format("%s was used before defined!", - var)); - MinimalLogger.info(String.format("Liveness on %s --- Updating var %s", - info, - var)); - this.getInterval(var).trySetLastUse(line); - } - } } @@ -83,4 +84,14 @@ public class LIRDict { return this.spilled_num; } + private int subOneLine(int i) { + int ret = i - 1; + + CFGNode n = cfg.getNode(new Integer(ret)); + if (n != null && n.getInstruction() instanceof VCodeLabel) + --ret; + + return ret; + } + } |