summaryrefslogtreecommitdiff
path: root/vaporize/LIRDict.java
diff options
context:
space:
mode:
Diffstat (limited to 'vaporize/LIRDict.java')
-rw-r--r--vaporize/LIRDict.java49
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;
+ }
+
}