diff options
| author | Dibyendu Majumdar <dibyendumajumdar@users.noreply.github.com> | 2023-09-26 17:43:36 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-26 09:43:36 -0700 |
| commit | 29def92f2ddbfca64ba827f116172fe98b2df491 (patch) | |
| tree | a49affb27d57e908429beafe300756d5e4c0c273 /chapter02/docs | |
| parent | 62bfd0d619b28892152a7d89639f3437bc9df573 (diff) | |
| download | Simple-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.md | 39 | ||||
| -rw-r--r-- | chapter02/docs/02-lattice.gv | 35 | ||||
| -rw-r--r-- | chapter02/docs/02-lattice.svg | 143 | ||||
| -rw-r--r-- | chapter02/docs/02-post-peephole-ex1.gv | 10 | ||||
| -rw-r--r-- | chapter02/docs/02-post-peephole-ex1.svg | 51 | ||||
| -rw-r--r-- | chapter02/docs/02-pre-peephole-ex1.gv | 27 | ||||
| -rw-r--r-- | chapter02/docs/02-pre-peephole-ex1.svg | 156 |
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->A --> + <g id="edge1" class="edge"> + <title>Top->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->B --> + <g id="edge2" class="edge"> + <title>Top->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">-1</text> + </g> + <!-- Top->C --> + <g id="edge3" class="edge"> + <title>Top->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->D --> + <g id="edge4" class="edge"> + <title>Top->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->E --> + <g id="edge5" class="edge"> + <title>Top->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->F --> + <g id="edge6" class="edge"> + <title>Top->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->G --> + <g id="edge7" class="edge"> + <title>Top->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->Bottom --> + <g id="edge8" class="edge"> + <title>A->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->Bottom --> + <g id="edge9" class="edge"> + <title>B->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->Bottom --> + <g id="edge10" class="edge"> + <title>C->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->Bottom --> + <g id="edge11" class="edge"> + <title>D->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->Bottom --> + <g id="edge12" class="edge"> + <title>E->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->Bottom --> + <g id="edge13" class="edge"> + <title>F->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->Bottom --> + <g id="edge14" class="edge"> + <title>G->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->Con213 --> + <g id="edge1" class="edge"> + <title>Start1->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->Return14 --> + <g id="edge3" class="edge"> + <title>Start1->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->Return14 --> + <g id="edge2" class="edge"> + <title>Con213->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->Con12 --> + <g id="edge1" class="edge"> + <title>Start1->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->Con23 --> + <g id="edge2" class="edge"> + <title>Start1->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->Con34 --> + <g id="edge3" class="edge"> + <title>Start1->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->Con56 --> + <g id="edge6" class="edge"> + <title>Start1->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->Return10 --> + <g id="edge13" class="edge"> + <title>Start1->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->Add9 --> + <g id="edge10" class="edge"> + <title>Con12->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->Mul5 --> + <g id="edge4" class="edge"> + <title>Con23->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->Mul5 --> + <g id="edge5" class="edge"> + <title>Con34->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->Add8 --> + <g id="edge8" class="edge"> + <title>Mul5->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->Minus7 --> + <g id="edge7" class="edge"> + <title>Con56->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->Add8 --> + <g id="edge9" class="edge"> + <title>Minus7->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->Add9 --> + <g id="edge11" class="edge"> + <title>Add8->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->Return10 --> + <g id="edge12" class="edge"> + <title>Add9->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> |
