diff options
Diffstat (limited to 'vaporize/library/LIRDict.java')
-rw-r--r-- | vaporize/library/LIRDict.java | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/vaporize/library/LIRDict.java b/vaporize/library/LIRDict.java index b32647c..0725a76 100644 --- a/vaporize/library/LIRDict.java +++ b/vaporize/library/LIRDict.java @@ -1,5 +1,8 @@ package vaporize.library; +import cs132.vapor.ast.VFunction; +import cs132.vapor.ast.VInstr; + import misc.*; import cfg.*; import java.util.*; @@ -7,22 +10,42 @@ import java.util.*; public class LIRDict { private TreeSet<LIRVar> intervals; + private ControlFlowGraph cfg; + + public LIRDict(VFunction f, ControlFlowGraph cfg) { - public LIRDict(ControlFlowGraph cfg) { - this.intervals = new TreeSet<LIRVar>(); + this.intervals = new TreeSet<LIRVar>((v1, v2) -> { + return (v1.compareTo(v2) != 0) ? v1.compareTo(v2) : v1.equals(v2) ? 0 : 1; + }); + this.cfg = cfg; - for (CFGNode n : cfg.getNodes()) { + for (VInstr s : f.body) { + CFGNode n = cfg.getNode(s); int line = n.getInstruction().sourcePos.line; + String info = "L" + line; for (String var : n.getReaching()) - if (!this.contains(var)) + 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)); + } 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); } + } } @@ -46,4 +69,5 @@ public class LIRDict { return Collections.unmodifiableSortedSet(this.intervals); } + } |