summaryrefslogtreecommitdiff
path: root/chapter08/docs/08-graph3.gv
diff options
context:
space:
mode:
authorDibyendu Majumdar <dibyendumajumdar@users.noreply.github.com>2024-01-15 00:13:44 +0000
committerGitHub <noreply@github.com>2024-01-14 16:13:44 -0800
commit399bb146cc0bb0c548cd0b50e51fb9aa29a7900c (patch)
treeeab8cdd62af2d874a9bc88260447cef3718b2186 /chapter08/docs/08-graph3.gv
parent0671df6c0b76f160ec8c29c219a4af5249569aea (diff)
downloadSimple-399bb146cc0bb0c548cd0b50e51fb9aa29a7900c.tar.gz
Simple-399bb146cc0bb0c548cd0b50e51fb9aa29a7900c.zip
Implement break and continue (#55)
* #52 Update chapter8 to align with chapter7 * #52 Update chapter8 to align with chapter7 * #52 Fix spacing * #51 get started on break and continue * #51 get started on break and continue * #51 more on break and continue * #51 more on break and continue * #51 more on break and continue * #51 more on break and continue * #51 more on break and continue * #51 more on break and continue * break & continue scopes are made lazily, and merged into as discovered Drop ContBreak. Drop ScopeNode.addScope. Add a simple mergeScopes. Simplify Region.inProgress; drop from child classes, use in Region. Add a ConstantNode.XCONTROL shortcut. * Fix some regressions * Error on dead code after break/continue * A more robust dead-def check * Fix for dead loop-back path * Fix scope shadowing bug with continue/break Turn on LAZY phis by default; fix minor golden test results * Fix a case with both break & continue * #51 more on break and continue * #51 more on break and continue * #51 more on break and continue * #51 fix erroneous push of scope * #51 fix import * #51 update test expected results * #51 Start Chapter8 writeup * #51 Start Chapter8 writeup * #51 _scope needs killing after continue * Add graph evaluator (#56) * #51 wip writeup * #51 wip writeup * #51 wip writeup * #51 wip writeup * #51 wip writeup * #51 update code comments / add assertion * #51 revert assertion * #51 evaluate graph to verify test outcome * #51 add code snippets * #51 add examples * Cleanup README Comment for usefullness of true Loops. Try to distiguish `PhiNode` as the programming construct from `phi` as the mathematically SSA notation. Flow long lines. Remove LAZY flag, set as `true`. Fold up true tests. * minor comment * #51 Check _breakScope is not null when parsing break or continue to detect use outside of loop * #51 in parseComparison we need to move the op= version above the op version, since at this time using <= and >= does not work since they are parsed as > and < with a preceeding = which causes an error * #51 Update main README to link to chapter 8 * Remove useless test --------- Co-authored-by: Cliff Click <cliffc@acm.org> Co-authored-by: XmiliaH <45106915+XmiliaH@users.noreply.github.com>
Diffstat (limited to 'chapter08/docs/08-graph3.gv')
-rw-r--r--chapter08/docs/08-graph3.gv111
1 files changed, 111 insertions, 0 deletions
diff --git a/chapter08/docs/08-graph3.gv b/chapter08/docs/08-graph3.gv
new file mode 100644
index 00000000..72ac10a8
--- /dev/null
+++ b/chapter08/docs/08-graph3.gv
@@ -0,0 +1,111 @@
+digraph chapter08 {
+/*
+while(arg < 10) {
+ arg = arg + 1;
+ if (arg == 5)
+ break;
+ if (arg == 6)
+ break;
+}
+return arg;
+
+*/
+ rankdir=BT;
+ ordering="in";
+ concentrate="true";
+ compound="true";
+ subgraph cluster_Nodes {
+ Start2 [ shape=plaintext label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
+ <TR><TD BGCOLOR="yellow">Start</TD></TR>
+ <TR><TD>
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="p0" BGCOLOR="yellow">$ctrl</TD><TD PORT="p1">arg</TD></TR>
+ </TABLE>
+ </TD></TR>
+ </TABLE>>
+ ];
+ Stop3 [ shape=box style=filled fillcolor=yellow label="Stop" ];
+ Loop6 [ shape=box style=filled fillcolor=yellow label="Loop" ];
+ Phi_arg8 [ style=filled fillcolor=lightyellow label="&phi;_arg" ];
+ Con_9 [ label="10" ];
+ LT10 [ label="<" ];
+ If11 [ shape=plaintext label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
+ <TR><TD BGCOLOR="yellow">If</TD></TR>
+ <TR><TD>
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="p0" BGCOLOR="yellow">True</TD><TD PORT="p1" BGCOLOR="yellow">False</TD></TR>
+ </TABLE>
+ </TD></TR>
+ </TABLE>>
+ ];
+ Con_15 [ label="1" ];
+ Add16 [ label="+" ];
+ Con_17 [ label="5" ];
+ EQ18 [ label="==" ];
+ If19 [ shape=plaintext label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
+ <TR><TD BGCOLOR="yellow">If</TD></TR>
+ <TR><TD>
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="p0" BGCOLOR="yellow">True</TD><TD PORT="p1" BGCOLOR="yellow">False</TD></TR>
+ </TABLE>
+ </TD></TR>
+ </TABLE>>
+ ];
+ Region25 [ shape=box style=filled fillcolor=yellow label="Region" ];
+ Phi_arg26 [ style=filled fillcolor=lightyellow label="&phi;_arg" ];
+ Con_28 [ label="6" ];
+ EQ29 [ label="==" ];
+ If30 [ shape=plaintext label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
+ <TR><TD BGCOLOR="yellow">If</TD></TR>
+ <TR><TD>
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="p0" BGCOLOR="yellow">True</TD><TD PORT="p1" BGCOLOR="yellow">False</TD></TR>
+ </TABLE>
+ </TD></TR>
+ </TABLE>>
+ ];
+ Region36 [ shape=box style=filled fillcolor=yellow label="Region" ];
+ Phi_arg37 [ style=filled fillcolor=lightyellow label="&phi;_arg" ];
+ Return39 [ shape=box style=filled fillcolor=yellow label="Return" ];
+ { rank=same; Loop6;Phi_arg8;}
+ { rank=same; Region25;Phi_arg26;}
+ { rank=same; Region36;Phi_arg37;}
+ }
+ edge [ fontname=Helvetica, fontsize=8 ];
+ Stop3 -> Return39[taillabel=0 color=red];
+ Loop6 -> Start2:p0[taillabel=1 color=red];
+ Loop6 -> If30:p1[taillabel=2 color=red constraint=false];
+ Phi_arg8 -> Loop6 [style=dotted taillabel=0];
+ Phi_arg8 -> Start2:p1[taillabel=1];
+ Phi_arg8 -> Add16[taillabel=2 constraint=false];
+ LT10 -> Phi_arg8[taillabel=1];
+ LT10 -> Con_9[taillabel=2];
+ If11 -> Loop6[taillabel=0 color=red];
+ If11 -> LT10[taillabel=1];
+ Add16 -> Phi_arg8[taillabel=1];
+ Add16 -> Con_15[taillabel=2];
+ EQ18 -> Add16[taillabel=1];
+ EQ18 -> Con_17[taillabel=2];
+ If19 -> If11:p0[taillabel=0 color=red];
+ If19 -> EQ18[taillabel=1];
+ Region25 -> If11:p1[taillabel=1 color=red];
+ Region25 -> If19:p0[taillabel=2 color=red];
+ Phi_arg26 -> Region25 [style=dotted taillabel=0];
+ Phi_arg26 -> Phi_arg8[taillabel=1];
+ Phi_arg26 -> Add16[taillabel=2 constraint=false];
+ EQ29 -> Add16[taillabel=1];
+ EQ29 -> Con_28[taillabel=2];
+ If30 -> If19:p1[taillabel=0 color=red];
+ If30 -> EQ29[taillabel=1];
+ Region36 -> Region25[taillabel=1 color=red];
+ Region36 -> If30:p0[taillabel=2 color=red];
+ Phi_arg37 -> Region36 [style=dotted taillabel=0];
+ Phi_arg37 -> Phi_arg26[taillabel=1];
+ Phi_arg37 -> Add16[taillabel=2 constraint=false];
+ Return39 -> Region36[taillabel=0 color=red];
+ Return39 -> Phi_arg37[taillabel=1];
+} \ No newline at end of file