From b7705e83c2026ff3983fc0b83f9b083d3e8be4c5 Mon Sep 17 00:00:00 2001 From: bd-912 Date: Sat, 20 Apr 2024 01:03:23 -0600 Subject: CFG fix create edges only if nodes != (found by graphviz) --- V2VM.java | 4 ++-- graphviz/config.properties | 18 +++--------------- vaporize/library/CFGNode.java | 9 ++++++--- vaporize/library/CFGSimp.java | 28 ++++++++++++++++------------ vaporize/library/ControlFlowGraph.java | 24 ++++++++++++++++-------- 5 files changed, 43 insertions(+), 40 deletions(-) diff --git a/V2VM.java b/V2VM.java index 84a585a..5d78381 100644 --- a/V2VM.java +++ b/V2VM.java @@ -33,8 +33,8 @@ public class V2VM { MinimalLogger.info(String.format("Generating CFGs...")); CFGSimp cfv = new CFGSimp(prog, strProg); ArrayList cfgs = cfv.getCFGs(); - MinimalLogger.info(String.format("Spilling Everywhere...")); - SpillEverywhere spill = new SpillEverywhere(prog, strProg); + // MinimalLogger.info(String.format("Spilling Everywhere...")); + // SpillEverywhere spill = new SpillEverywhere(prog, strProg); } catch (IOException e) { System.out.println(e.toString()); diff --git a/graphviz/config.properties b/graphviz/config.properties index 60901d5..786f977 100644 --- a/graphviz/config.properties +++ b/graphviz/config.properties @@ -1,23 +1,11 @@ -############################################################## -# Linux Configurations # -############################################################## -# The dir. where temporary files will be created. +# Linux Configurations tempDirForLinux = /tmp -# Where is your dot program located? It will be called externally. dotForLinux = /home/bdunahu/.guix-home/profile/bin/dot -############################################################## -# Windows Configurations # -############################################################## -# The dir. where temporary files will be created. +# Windows Configurations tempDirForWindows = c:/temp -# Where is your dot program located? It will be called externally. dotForWindows = "c:/Program Files (x86)/Graphviz 2.28/bin/dot.exe" -############################################################## -# Mac Configurations # -############################################################## -# The dir. where temporary files will be created. +# Mac Configurations tempDirForMacOSX = /tmp -# Where is your dot program located? It will be called externally. dotForMacOSX = /usr/local/bin/dot \ No newline at end of file diff --git a/vaporize/library/CFGNode.java b/vaporize/library/CFGNode.java index 0afce60..b79ee6b 100644 --- a/vaporize/library/CFGNode.java +++ b/vaporize/library/CFGNode.java @@ -33,9 +33,12 @@ class CFGNode { */ // FIXME public boolean equals(Object other) { - return (other instanceof Node && - (((Node) other).sourcePos == - this.instruction.sourcePos)) || + return (other instanceof CFGNode && + (((CFGNode) other).instruction == + this.instruction)) || + (other instanceof Node && + (((Node) other).sourcePos == + this.instruction.sourcePos)) || (other instanceof Integer && (((Integer) other) .equals(this.instruction.sourcePos.line))); diff --git a/vaporize/library/CFGSimp.java b/vaporize/library/CFGSimp.java index f4d63cf..0cefb5a 100644 --- a/vaporize/library/CFGSimp.java +++ b/vaporize/library/CFGSimp.java @@ -9,6 +9,8 @@ import java.util.*; public class CFGSimp extends VInstr.VisitorPR { + private boolean use_graphviz = true; // if true, generates svg files of the edges in each function + private VaporProgram vp; private Kettle kettle; private ArrayList cfgs; @@ -44,13 +46,13 @@ public class CFGSimp extends VInstr.VisitorPR %d", - source.getInstruction().sourcePos.line, - dest.getInstruction().sourcePos.line); - MinimalLogger.info(String.format("Edge %s", - ret)); + /** + * Iff the CFGNodes are different, construct an edge between them. + * Returns a string capable of being manipulated by graphviz. + */ + String ret = ""; + if (!source.equals(dest)) { + ret = String.format("%d -> %d", + source.getInstruction().sourcePos.line, + dest.getInstruction().sourcePos.line); + MinimalLogger.info(String.format("Edge %s", + ret)); - source.addDest(dest); - dest.addSource(source); + source.addDest(dest); + dest.addSource(source); + ret += ";"; + } - return ret +";"; + return ret; } protected void setStart(CFGNode start) { -- cgit v1.2.3