diff options
Diffstat (limited to 'vaporize/LIRVisitor.java')
-rw-r--r-- | vaporize/LIRVisitor.java | 7 |
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()); } |