summaryrefslogtreecommitdiff
path: root/chapter02/docs
diff options
context:
space:
mode:
authorDibyendu Majumdar <dibyendumajumdar@users.noreply.github.com>2023-09-26 17:43:36 +0100
committerGitHub <noreply@github.com>2023-09-26 09:43:36 -0700
commit29def92f2ddbfca64ba827f116172fe98b2df491 (patch)
treea49affb27d57e908429beafe300756d5e4c0c273 /chapter02/docs
parent62bfd0d619b28892152a7d89639f3437bc9df573 (diff)
downloadSimple-29def92f2ddbfca64ba827f116172fe98b2df491.tar.gz
Simple-29def92f2ddbfca64ba827f116172fe98b2df491.zip
Chapter 2 (#4)
* Start on Chapter 2. * Start on Chapter 2. * Refactor * Refactor * Initial attempt at peephole opt for add operation * cleanup unused import * Start on graph visualizer * Start on graph visualizer * Rework chapter 2 Add a short discourse on the Types, and provide a Bottom type. Make a final toString; require each Node to specify its special printing via label(). Add a recursing printer called print(); toString is used by default in the debugger and so cannot be recursive. Make the peephole rules based on a proper Type and idealize calls. Big comments about the Type computations. Every node picks up a _print, compute and idealize() call. Rename long arith ops Divide, UnaryMinus, Multiply, Subtract into shorter uniform-length names. Cleans up the parser where he does the precedence op parsing. Rework Parser: - Drop Token class, its all Strings except in the one place we know a number is coming - Embed the Lexer as a field in the Parser, instead of trying to pass it around everywhere in the Parser - StartNode becomes a read-only global, so we don't have to pass it around everywhere in the Parser AND optimizer. - Lexer matches on strings and returns strings. Match and consume *at the moment* instead of carrying around a current token/string and forcing the next-token after consuming the current one. - All parse subexpressions shrink by 1/2 after these changes. * Initial writeup of Chapter 2 * Initial writeup of Chapter 2 * Initial writeup of Chapter 2 * Initial writeup of Chapter 2 * Remove range * progress Chapter 2 Drop integer ranges. Broader lattice pic. Lots of prose changes in the readme. Fixed title in gviz dot generation. Fixed bug with peephole making redundant constants. * Implement compute for all the arithmetic node types Add a flag to switch off peephole so we can see the full graph Add post peephole graph to writeup * Implement compute for all the arithmetic node types Add a flag to switch off peephole so we can see the full graph Add post peephole graph to writeup * Fix bad path to the svg * Update pre-peephole diagram * Add dead code elimination ...and a set_def to proper update graph edges. * Update README.md * Cleanup the GraphVisualizer a bit. Update the graphs. Update the chapter list as chapter 3 deleted, and chapter 4 is now chapter 3. --------- Co-authored-by: Cliff Click <cliffc@acm.org>
Diffstat (limited to 'chapter02/docs')
-rw-r--r--chapter02/docs/02-grammar.md39
-rw-r--r--chapter02/docs/02-lattice.gv35
-rw-r--r--chapter02/docs/02-lattice.svg143
-rw-r--r--chapter02/docs/02-post-peephole-ex1.gv10
-rw-r--r--chapter02/docs/02-post-peephole-ex1.svg51
-rw-r--r--chapter02/docs/02-pre-peephole-ex1.gv27
-rw-r--r--chapter02/docs/02-pre-peephole-ex1.svg156
7 files changed, 461 insertions, 0 deletions
diff --git a/chapter02/docs/02-grammar.md b/chapter02/docs/02-grammar.md
new file mode 100644
index 00000000..a4a79cea
--- /dev/null
+++ b/chapter02/docs/02-grammar.md
@@ -0,0 +1,39 @@
+# Grammar for Chapter 1
+
+```antlrv4
+grammar SimpleLanguage;
+
+program
+ : statement EOF
+ ;
+
+statement
+ : 'return' expression ';'
+ ;
+
+expression
+ : additiveExpression
+ ;
+
+additiveExpression
+ : multiplicativeExpression (('+' | '-') multiplicativeExpression)*
+ ;
+
+multiplicativeExpression
+ : unaryExpression (('*' | '/') unaryExpression)*
+ ;
+
+unaryExpression
+ : ('-') unaryExpression
+ | primaryExpression
+ ;
+
+primaryExpression
+ : INTEGER_LITERAL
+ ;
+
+INTEGER_LITERAL
+ : [1-9][0-9]*
+ | [0]
+ ;
+``` \ No newline at end of file
diff --git a/chapter02/docs/02-lattice.gv b/chapter02/docs/02-lattice.gv
new file mode 100644
index 00000000..57f14d77
--- /dev/null
+++ b/chapter02/docs/02-lattice.gv
@@ -0,0 +1,35 @@
+digraph Lattice {
+ // Define nodes
+ node [shape=circle, style=filled, fillcolor=lightblue];
+ Top [label="⊤"];
+ Bottom [label="⊥"];
+
+ A [label="MIN_INT"];
+ B [label="..." shape=none style=none];
+ C [label="-1"];
+ D [label="0"];
+ E [label="1"];
+ F [label="..." shape=none style=none];
+ G [label="MAX_INT"];
+
+
+ // Define edges
+ Top -> A [arrowhead=none];
+ Top -> B [arrowhead=none];
+ Top -> C [arrowhead=none];
+ Top -> D [arrowhead=none];
+ Top -> E [arrowhead=none];
+ Top -> F [arrowhead=none];
+ Top -> G [arrowhead=none];
+ A -> Bottom [arrowhead=none];
+ B -> Bottom [arrowhead=none];
+ C -> Bottom [arrowhead=none];
+ D -> Bottom [arrowhead=none];
+ E -> Bottom [arrowhead=none];
+ F -> Bottom [arrowhead=none];
+ G -> Bottom [arrowhead=none];
+
+ // Additional customization
+ {rank=same; A; B; C; D; E; F; G; }
+ {rank=same; Bottom;}
+}
diff --git a/chapter02/docs/02-lattice.svg b/chapter02/docs/02-lattice.svg
new file mode 100644
index 00000000..218acc6a
--- /dev/null
+++ b/chapter02/docs/02-lattice.svg
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.43.0 (0)
+ -->
+<!-- Title: Lattice Pages: 1 -->
+<svg width="548pt" height="266pt"
+ viewBox="0.00 0.00 547.59 265.88" xmlns="http://www.w3.org/2000/svg">
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 261.88)">
+ <title>Lattice</title>
+ <polygon fill="white" stroke="transparent" points="-4,4 -4,-261.88 543.59,-261.88 543.59,4 -4,4"/>
+ <!-- Top -->
+ <g id="node1" class="node">
+ <title>Top</title>
+ <ellipse fill="lightblue" stroke="black" cx="269.65" cy="-238.39" rx="19.5" ry="19.5"/>
+ <text text-anchor="middle" x="269.65" y="-234.69" font-family="Times,serif" font-size="14.00">⊤</text>
+ </g>
+ <!-- A -->
+ <g id="node3" class="node">
+ <title>A</title>
+ <ellipse fill="lightblue" stroke="black" cx="52.65" cy="-128.94" rx="52.79" ry="52.79"/>
+ <text text-anchor="middle" x="52.65" y="-125.24" font-family="Times,serif" font-size="14.00">MIN_INT</text>
+ </g>
+ <!-- Top&#45;&gt;A -->
+ <g id="edge1" class="edge">
+ <title>Top&#45;&gt;A</title>
+ <path fill="none" stroke="black"
+ d="M250.55,-233.09C220.3,-225.77 160.13,-209.08 114.65,-182.89 106.3,-178.08 98.02,-172.1 90.35,-165.89"/>
+ </g>
+ <!-- B -->
+ <g id="node4" class="node">
+ <title>B</title>
+ <text text-anchor="middle" x="150.65" y="-125.24" font-family="Times,serif" font-size="14.00">...</text>
+ </g>
+ <!-- Top&#45;&gt;B -->
+ <g id="edge2" class="edge">
+ <title>Top&#45;&gt;B</title>
+ <path fill="none" stroke="black"
+ d="M252.34,-228.66C234.5,-219.09 206.55,-202.47 186.65,-182.89 175.87,-172.28 166.38,-158 159.86,-146.95"/>
+ </g>
+ <!-- C -->
+ <g id="node5" class="node">
+ <title>C</title>
+ <ellipse fill="lightblue" stroke="black" cx="214.65" cy="-128.94" rx="19.5" ry="19.5"/>
+ <text text-anchor="middle" x="214.65" y="-125.24" font-family="Times,serif" font-size="14.00">&#45;1</text>
+ </g>
+ <!-- Top&#45;&gt;C -->
+ <g id="edge3" class="edge">
+ <title>Top&#45;&gt;C</title>
+ <path fill="none" stroke="black" d="M261.05,-220.6C250.72,-200.41 233.48,-166.74 223.18,-146.61"/>
+ </g>
+ <!-- D -->
+ <g id="node6" class="node">
+ <title>D</title>
+ <ellipse fill="lightblue" stroke="black" cx="269.65" cy="-128.94" rx="18" ry="18"/>
+ <text text-anchor="middle" x="269.65" y="-125.24" font-family="Times,serif" font-size="14.00">0</text>
+ </g>
+ <!-- Top&#45;&gt;D -->
+ <g id="edge4" class="edge">
+ <title>Top&#45;&gt;D</title>
+ <path fill="none" stroke="black" d="M269.65,-218.67C269.65,-198.47 269.65,-166.57 269.65,-147.03"/>
+ </g>
+ <!-- E -->
+ <g id="node7" class="node">
+ <title>E</title>
+ <ellipse fill="lightblue" stroke="black" cx="323.65" cy="-128.94" rx="18" ry="18"/>
+ <text text-anchor="middle" x="323.65" y="-125.24" font-family="Times,serif" font-size="14.00">1</text>
+ </g>
+ <!-- Top&#45;&gt;E -->
+ <g id="edge5" class="edge">
+ <title>Top&#45;&gt;E</title>
+ <path fill="none" stroke="black" d="M278.08,-220.6C288.46,-199.94 305.94,-165.16 315.97,-145.22"/>
+ </g>
+ <!-- F -->
+ <g id="node8" class="node">
+ <title>F</title>
+ <text text-anchor="middle" x="386.65" y="-125.24" font-family="Times,serif" font-size="14.00">...</text>
+ </g>
+ <!-- Top&#45;&gt;F -->
+ <g id="edge6" class="edge">
+ <title>Top&#45;&gt;F</title>
+ <path fill="none" stroke="black"
+ d="M286.52,-228.57C303.92,-218.93 331.18,-202.25 350.65,-182.89 361.2,-172.38 370.57,-158.37 377.1,-147.4"/>
+ </g>
+ <!-- G -->
+ <g id="node9" class="node">
+ <title>G</title>
+ <ellipse fill="lightblue" stroke="black" cx="485.65" cy="-128.94" rx="53.89" ry="53.89"/>
+ <text text-anchor="middle" x="485.65" y="-125.24" font-family="Times,serif" font-size="14.00">MAX_INT</text>
+ </g>
+ <!-- Top&#45;&gt;G -->
+ <g id="edge7" class="edge">
+ <title>Top&#45;&gt;G</title>
+ <path fill="none" stroke="black"
+ d="M288.46,-233C318.29,-225.56 377.63,-208.69 422.65,-182.89 430.83,-178.2 438.98,-172.41 446.57,-166.39"/>
+ </g>
+ <!-- Bottom -->
+ <g id="node2" class="node">
+ <title>Bottom</title>
+ <ellipse fill="lightblue" stroke="black" cx="269.65" cy="-19.5" rx="19.5" ry="19.5"/>
+ <text text-anchor="middle" x="269.65" y="-15.8" font-family="Times,serif" font-size="14.00">⊥</text>
+ </g>
+ <!-- A&#45;&gt;Bottom -->
+ <g id="edge8" class="edge">
+ <title>A&#45;&gt;Bottom</title>
+ <path fill="none" stroke="black"
+ d="M90.35,-91.99C98.02,-85.79 106.3,-79.8 114.65,-75 160.13,-48.81 220.3,-32.11 250.55,-24.79"/>
+ </g>
+ <!-- B&#45;&gt;Bottom -->
+ <g id="edge9" class="edge">
+ <title>B&#45;&gt;Bottom</title>
+ <path fill="none" stroke="black"
+ d="M159.86,-110.94C166.38,-99.88 175.87,-85.6 186.65,-75 206.55,-55.41 234.5,-38.79 252.34,-29.22"/>
+ </g>
+ <!-- C&#45;&gt;Bottom -->
+ <g id="edge10" class="edge">
+ <title>C&#45;&gt;Bottom</title>
+ <path fill="none" stroke="black" d="M223.24,-111.15C233.57,-90.97 250.81,-57.3 261.11,-37.17"/>
+ </g>
+ <!-- D&#45;&gt;Bottom -->
+ <g id="edge11" class="edge">
+ <title>D&#45;&gt;Bottom</title>
+ <path fill="none" stroke="black" d="M269.65,-110.68C269.65,-91.1 269.65,-59.3 269.65,-39.16"/>
+ </g>
+ <!-- E&#45;&gt;Bottom -->
+ <g id="edge12" class="edge">
+ <title>E&#45;&gt;Bottom</title>
+ <path fill="none" stroke="black" d="M315.91,-112.55C305.88,-92.59 288.44,-57.9 278.08,-37.28"/>
+ </g>
+ <!-- F&#45;&gt;Bottom -->
+ <g id="edge13" class="edge">
+ <title>F&#45;&gt;Bottom</title>
+ <path fill="none" stroke="black"
+ d="M377.1,-110.49C370.57,-99.52 361.2,-85.5 350.65,-75 331.18,-55.63 303.92,-38.95 286.52,-29.31"/>
+ </g>
+ <!-- G&#45;&gt;Bottom -->
+ <g id="edge14" class="edge">
+ <title>G&#45;&gt;Bottom</title>
+ <path fill="none" stroke="black"
+ d="M446.57,-91.49C438.98,-85.48 430.83,-79.69 422.65,-75 377.63,-49.19 318.29,-32.33 288.46,-24.88"/>
+ </g>
+ </g>
+</svg>
diff --git a/chapter02/docs/02-post-peephole-ex1.gv b/chapter02/docs/02-post-peephole-ex1.gv
new file mode 100644
index 00000000..a39d602b
--- /dev/null
+++ b/chapter02/docs/02-post-peephole-ex1.gv
@@ -0,0 +1,10 @@
+digraph chapter02
+{
+ Start1 [shape=box, label="Start"];
+ Con213 [ label="Con2"];
+ Start1 -> Con213 [style=dotted];
+ Return14 [shape=box, label="Return"];
+ Con213 -> Return14;
+ edge [color=red];
+ Start1 -> Return14;
+} \ No newline at end of file
diff --git a/chapter02/docs/02-post-peephole-ex1.svg b/chapter02/docs/02-post-peephole-ex1.svg
new file mode 100644
index 00000000..33aa5a95
--- /dev/null
+++ b/chapter02/docs/02-post-peephole-ex1.svg
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.43.0 (0)
+ -->
+<!-- Title: chapter02 Pages: 1 -->
+<svg width="106pt" height="188pt"
+ viewBox="0.00 0.00 106.45 188.00" xmlns="http://www.w3.org/2000/svg">
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 184)">
+ <title>chapter02</title>
+ <polygon fill="white" stroke="transparent" points="-4,4 -4,-184 102.45,-184 102.45,4 -4,4"/>
+ <!-- Start1 -->
+ <g id="node1" class="node">
+ <title>Start1</title>
+ <polygon fill="none" stroke="black" points="92.45,-180 38.45,-180 38.45,-144 92.45,-144 92.45,-180"/>
+ <text text-anchor="middle" x="65.45" y="-158.3" font-family="Times,serif" font-size="14.00">Start</text>
+ </g>
+ <!-- Con213 -->
+ <g id="node2" class="node">
+ <title>Con213</title>
+ <ellipse fill="none" stroke="black" cx="34.45" cy="-90" rx="34.39" ry="18"/>
+ <text text-anchor="middle" x="34.45" y="-86.3" font-family="Times,serif" font-size="14.00">Con2</text>
+ </g>
+ <!-- Start1&#45;&gt;Con213 -->
+ <g id="edge1" class="edge">
+ <title>Start1&#45;&gt;Con213</title>
+ <path fill="none" stroke="black" stroke-dasharray="1,5"
+ d="M57.78,-143.7C54.2,-135.61 49.86,-125.81 45.9,-116.87"/>
+ <polygon fill="black" stroke="black" points="49.06,-115.35 41.81,-107.62 42.66,-118.18 49.06,-115.35"/>
+ </g>
+ <!-- Return14 -->
+ <g id="node3" class="node">
+ <title>Return14</title>
+ <polygon fill="none" stroke="black" points="98.45,-36 32.45,-36 32.45,0 98.45,0 98.45,-36"/>
+ <text text-anchor="middle" x="65.45" y="-14.3" font-family="Times,serif" font-size="14.00">Return</text>
+ </g>
+ <!-- Start1&#45;&gt;Return14 -->
+ <g id="edge3" class="edge">
+ <title>Start1&#45;&gt;Return14</title>
+ <path fill="none" stroke="red"
+ d="M70.32,-143.98C73.01,-133.67 76.08,-120.19 77.45,-108 79.22,-92.1 79.22,-87.9 77.45,-72 76.49,-63.43 74.69,-54.22 72.76,-45.93"/>
+ <polygon fill="red" stroke="red" points="76.11,-44.89 70.32,-36.02 69.32,-46.57 76.11,-44.89"/>
+ </g>
+ <!-- Con213&#45;&gt;Return14 -->
+ <g id="edge2" class="edge">
+ <title>Con213&#45;&gt;Return14</title>
+ <path fill="none" stroke="black" d="M41.79,-72.41C45.32,-64.45 49.63,-54.72 53.6,-45.76"/>
+ <polygon fill="black" stroke="black" points="56.87,-47.01 57.72,-36.45 50.47,-44.17 56.87,-47.01"/>
+ </g>
+ </g>
+</svg>
diff --git a/chapter02/docs/02-pre-peephole-ex1.gv b/chapter02/docs/02-pre-peephole-ex1.gv
new file mode 100644
index 00000000..d5a16616
--- /dev/null
+++ b/chapter02/docs/02-pre-peephole-ex1.gv
@@ -0,0 +1,27 @@
+digraph chapter02
+{
+ Start1 [shape=box, label="Start"];
+ Con12 [ label="Con1"];
+ Start1 -> Con12 [style=dotted];
+ Con23 [ label="Con2"];
+ Start1 -> Con23 [style=dotted];
+ Con34 [ label="Con3"];
+ Start1 -> Con34 [style=dotted];
+ Mul5 [ label="Mul"];
+ Con23 -> Mul5;
+ Con34 -> Mul5;
+ Con56 [ label="Con5"];
+ Start1 -> Con56 [style=dotted];
+ Minus7 [ label="Minus"];
+ Con56 -> Minus7;
+ Add8 [ label="Add"];
+ Mul5 -> Add8;
+ Minus7 -> Add8;
+ Add9 [ label="Add"];
+ Con12 -> Add9;
+ Add8 -> Add9;
+ Return10 [shape=box, label="Return"];
+ Add9 -> Return10;
+ edge [color=red];
+ Start1 -> Return10;
+} \ No newline at end of file
diff --git a/chapter02/docs/02-pre-peephole-ex1.svg b/chapter02/docs/02-pre-peephole-ex1.svg
new file mode 100644
index 00000000..dc33c7f5
--- /dev/null
+++ b/chapter02/docs/02-pre-peephole-ex1.svg
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.43.0 (0)
+ -->
+<!-- Title: chapter02 Pages: 1 -->
+<svg width="301pt" height="404pt"
+ viewBox="0.00 0.00 301.08 404.00" xmlns="http://www.w3.org/2000/svg">
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 400)">
+ <title>chapter02</title>
+ <polygon fill="white" stroke="transparent" points="-4,4 -4,-400 297.08,-400 297.08,4 -4,4"/>
+ <!-- Start1 -->
+ <g id="node1" class="node">
+ <title>Start1</title>
+ <polygon fill="none" stroke="black" points="169.34,-396 115.34,-396 115.34,-360 169.34,-360 169.34,-396"/>
+ <text text-anchor="middle" x="142.34" y="-374.3" font-family="Times,serif" font-size="14.00">Start</text>
+ </g>
+ <!-- Con12 -->
+ <g id="node2" class="node">
+ <title>Con12</title>
+ <ellipse fill="none" stroke="black" cx="46.34" cy="-162" rx="34.39" ry="18"/>
+ <text text-anchor="middle" x="46.34" y="-158.3" font-family="Times,serif" font-size="14.00">Con1</text>
+ </g>
+ <!-- Start1&#45;&gt;Con12 -->
+ <g id="edge1" class="edge">
+ <title>Start1&#45;&gt;Con12</title>
+ <path fill="none" stroke="black" stroke-dasharray="1,5"
+ d="M115.19,-374.6C84.32,-370.26 35.25,-358.08 12.34,-324 -15.78,-282.17 11,-221.54 30.37,-187.88"/>
+ <polygon fill="black" stroke="black" points="33.47,-189.52 35.59,-179.14 27.46,-185.93 33.47,-189.52"/>
+ </g>
+ <!-- Con23 -->
+ <g id="node3" class="node">
+ <title>Con23</title>
+ <ellipse fill="none" stroke="black" cx="55.34" cy="-306" rx="34.39" ry="18"/>
+ <text text-anchor="middle" x="55.34" y="-302.3" font-family="Times,serif" font-size="14.00">Con2</text>
+ </g>
+ <!-- Start1&#45;&gt;Con23 -->
+ <g id="edge2" class="edge">
+ <title>Start1&#45;&gt;Con23</title>
+ <path fill="none" stroke="black" stroke-dasharray="1,5"
+ d="M120.83,-359.7C108.86,-350.07 93.88,-338.01 81.26,-327.86"/>
+ <polygon fill="black" stroke="black" points="83.35,-325.05 73.37,-321.51 78.97,-330.5 83.35,-325.05"/>
+ </g>
+ <!-- Con34 -->
+ <g id="node4" class="node">
+ <title>Con34</title>
+ <ellipse fill="none" stroke="black" cx="142.34" cy="-306" rx="34.39" ry="18"/>
+ <text text-anchor="middle" x="142.34" y="-302.3" font-family="Times,serif" font-size="14.00">Con3</text>
+ </g>
+ <!-- Start1&#45;&gt;Con34 -->
+ <g id="edge3" class="edge">
+ <title>Start1&#45;&gt;Con34</title>
+ <path fill="none" stroke="black" stroke-dasharray="1,5"
+ d="M142.34,-359.7C142.34,-351.98 142.34,-342.71 142.34,-334.11"/>
+ <polygon fill="black" stroke="black" points="145.84,-334.1 142.34,-324.1 138.84,-334.1 145.84,-334.1"/>
+ </g>
+ <!-- Con56 -->
+ <g id="node6" class="node">
+ <title>Con56</title>
+ <ellipse fill="none" stroke="black" cx="229.34" cy="-306" rx="34.39" ry="18"/>
+ <text text-anchor="middle" x="229.34" y="-302.3" font-family="Times,serif" font-size="14.00">Con5</text>
+ </g>
+ <!-- Start1&#45;&gt;Con56 -->
+ <g id="edge6" class="edge">
+ <title>Start1&#45;&gt;Con56</title>
+ <path fill="none" stroke="black" stroke-dasharray="1,5"
+ d="M163.84,-359.7C175.81,-350.07 190.8,-338.01 203.41,-327.86"/>
+ <polygon fill="black" stroke="black" points="205.71,-330.5 211.31,-321.51 201.32,-325.05 205.71,-330.5"/>
+ </g>
+ <!-- Return10 -->
+ <g id="node10" class="node">
+ <title>Return10</title>
+ <polygon fill="none" stroke="black" points="268.34,-36 202.34,-36 202.34,0 268.34,0 268.34,-36"/>
+ <text text-anchor="middle" x="235.34" y="-14.3" font-family="Times,serif" font-size="14.00">Return</text>
+ </g>
+ <!-- Start1&#45;&gt;Return10 -->
+ <g id="edge13" class="edge">
+ <title>Start1&#45;&gt;Return10</title>
+ <path fill="none" stroke="red"
+ d="M169.34,-373.51C199.13,-368.18 246.29,-355.12 272.34,-324 298.3,-292.99 291.34,-275.45 291.34,-235 291.34,-235 291.34,-235 291.34,-161 291.34,-117.91 268.74,-72.26 252.26,-44.7"/>
+ <polygon fill="red" stroke="red" points="255.17,-42.75 246.94,-36.07 249.21,-46.42 255.17,-42.75"/>
+ </g>
+ <!-- Add9 -->
+ <g id="node9" class="node">
+ <title>Add9</title>
+ <ellipse fill="none" stroke="black" cx="180.34" cy="-90" rx="28.7" ry="18"/>
+ <text text-anchor="middle" x="180.34" y="-86.3" font-family="Times,serif" font-size="14.00">Add</text>
+ </g>
+ <!-- Con12&#45;&gt;Add9 -->
+ <g id="edge10" class="edge">
+ <title>Con12&#45;&gt;Add9</title>
+ <path fill="none" stroke="black" d="M69.99,-148.65C92.27,-137 125.77,-119.5 150.02,-106.84"/>
+ <polygon fill="black" stroke="black" points="151.89,-109.81 159.13,-102.08 148.65,-103.61 151.89,-109.81"/>
+ </g>
+ <!-- Mul5 -->
+ <g id="node5" class="node">
+ <title>Mul5</title>
+ <ellipse fill="none" stroke="black" cx="137.34" cy="-234" rx="28.7" ry="18"/>
+ <text text-anchor="middle" x="137.34" y="-230.3" font-family="Times,serif" font-size="14.00">Mul</text>
+ </g>
+ <!-- Con23&#45;&gt;Mul5 -->
+ <g id="edge4" class="edge">
+ <title>Con23&#45;&gt;Mul5</title>
+ <path fill="none" stroke="black" d="M72.73,-290.15C84.56,-280.05 100.38,-266.55 113.4,-255.43"/>
+ <polygon fill="black" stroke="black" points="115.76,-258.03 121.09,-248.87 111.21,-252.7 115.76,-258.03"/>
+ </g>
+ <!-- Con34&#45;&gt;Mul5 -->
+ <g id="edge5" class="edge">
+ <title>Con34&#45;&gt;Mul5</title>
+ <path fill="none" stroke="black" d="M141.1,-287.7C140.55,-279.98 139.89,-270.71 139.27,-262.11"/>
+ <polygon fill="black" stroke="black" points="142.76,-261.83 138.56,-252.1 135.78,-262.33 142.76,-261.83"/>
+ </g>
+ <!-- Add8 -->
+ <g id="node8" class="node">
+ <title>Add8</title>
+ <ellipse fill="none" stroke="black" cx="180.34" cy="-162" rx="28.7" ry="18"/>
+ <text text-anchor="middle" x="180.34" y="-158.3" font-family="Times,serif" font-size="14.00">Add</text>
+ </g>
+ <!-- Mul5&#45;&gt;Add8 -->
+ <g id="edge8" class="edge">
+ <title>Mul5&#45;&gt;Add8</title>
+ <path fill="none" stroke="black" d="M147.31,-216.76C152.58,-208.19 159.15,-197.49 165.04,-187.9"/>
+ <polygon fill="black" stroke="black" points="168.17,-189.5 170.42,-179.15 162.2,-185.84 168.17,-189.5"/>
+ </g>
+ <!-- Minus7 -->
+ <g id="node7" class="node">
+ <title>Minus7</title>
+ <ellipse fill="none" stroke="black" cx="223.34" cy="-234" rx="39.79" ry="18"/>
+ <text text-anchor="middle" x="223.34" y="-230.3" font-family="Times,serif" font-size="14.00">Minus</text>
+ </g>
+ <!-- Con56&#45;&gt;Minus7 -->
+ <g id="edge7" class="edge">
+ <title>Con56&#45;&gt;Minus7</title>
+ <path fill="none" stroke="black" d="M227.85,-287.7C227.19,-279.98 226.4,-270.71 225.66,-262.11"/>
+ <polygon fill="black" stroke="black" points="229.15,-261.77 224.8,-252.1 222.17,-262.37 229.15,-261.77"/>
+ </g>
+ <!-- Minus7&#45;&gt;Add8 -->
+ <g id="edge9" class="edge">
+ <title>Minus7&#45;&gt;Add8</title>
+ <path fill="none" stroke="black" d="M213.15,-216.41C207.88,-207.83 201.34,-197.19 195.49,-187.67"/>
+ <polygon fill="black" stroke="black" points="198.38,-185.68 190.16,-178.99 192.41,-189.34 198.38,-185.68"/>
+ </g>
+ <!-- Add8&#45;&gt;Add9 -->
+ <g id="edge11" class="edge">
+ <title>Add8&#45;&gt;Add9</title>
+ <path fill="none" stroke="black" d="M180.34,-143.7C180.34,-135.98 180.34,-126.71 180.34,-118.11"/>
+ <polygon fill="black" stroke="black" points="183.84,-118.1 180.34,-108.1 176.84,-118.1 183.84,-118.1"/>
+ </g>
+ <!-- Add9&#45;&gt;Return10 -->
+ <g id="edge12" class="edge">
+ <title>Add9&#45;&gt;Return10</title>
+ <path fill="none" stroke="black" d="M192.54,-73.46C199.2,-64.99 207.61,-54.29 215.21,-44.61"/>
+ <polygon fill="black" stroke="black" points="218.19,-46.49 221.62,-36.46 212.69,-42.16 218.19,-46.49"/>
+ </g>
+ </g>
+</svg>