summaryrefslogtreecommitdiff
path: root/vaporize/LIRVisitor.java
diff options
context:
space:
mode:
Diffstat (limited to 'vaporize/LIRVisitor.java')
-rw-r--r--vaporize/LIRVisitor.java7
1 files changed, 5 insertions, 2 deletions
diff --git a/vaporize/LIRVisitor.java b/vaporize/LIRVisitor.java
index 821573c..21f632d 100644
--- a/vaporize/LIRVisitor.java
+++ b/vaporize/LIRVisitor.java
@@ -15,6 +15,7 @@ public class LIRVisitor extends VInstr.VisitorPR<ControlFlowGraph, String, Runti
private Kettle kettle;
private ArrayList<LIRDict> lirs;
private CFGNode curr; // the current node being processed
+ private int curr_out_num;
private String dot_format; // a list of edges to be processed by graphviz
public LIRVisitor(VaporProgram vp, ArrayList<String> vapor) {
@@ -26,6 +27,7 @@ public class LIRVisitor extends VInstr.VisitorPR<ControlFlowGraph, String, Runti
for (VFunction f : vp.functions) {
ControlFlowGraph cfg = new ControlFlowGraph(f);
this.dot_format = "";
+ this.curr_out_num = 0;
MinimalLogger.info(String.format("LIRVisitor is collecting nodes for %s",
this.kettle.parseFuncName(f)));
@@ -86,7 +88,7 @@ public class LIRVisitor extends VInstr.VisitorPR<ControlFlowGraph, String, Runti
MinimalLogger.info(String.format("Gathering intervals for %s",
this.kettle.parseFuncName(f)));
- LIRDict lir = new LIRDict(f, cfg);
+ LIRDict lir = new LIRDict(f, cfg, this.curr_out_num);
this.lirs.add(lir);
MinimalLogger.info(String.format("Found intervals: %s",
lir.getIntervals().toString()));
@@ -222,8 +224,9 @@ public class LIRVisitor extends VInstr.VisitorPR<ControlFlowGraph, String, Runti
n.sourcePos.toString()));
///////////////////////////////////////////////////////////////
CFGNode curr = cfg.getNode(n);
+ this.curr_out_num = Math.max(this.curr_out_num, n.args.length-4);
if (n.dest != null)
- cfg.addReference(curr, n.dest.toString());
+ cfg.addDefinition(curr, n.dest.toString());
for (VOperand a : n.args) {
cfg.addReference(curr, a.toString());
}