diff options
| author | Cliff Click <cliffc@acm.org> | 2026-09-29 10:10:53 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-09-29 10:10:53 -0700 |
| commit | fa7d56f72455828826d0ab7e1c142ca814e6e2aa (patch) | |
| tree | 28f0c310fdccc0df67678213d87c856e072d53f8 | |
| parent | e1bba17ff54400a34ede0eaacad863420d021119 (diff) | |
| download | Simple-fa7d56f72455828826d0ab7e1c142ca814e6e2aa.tar.gz Simple-fa7d56f72455828826d0ab7e1c142ca814e6e2aa.zip | |
Reverse edges
| -rw-r--r-- | chapter10a/README.md | 4 | ||||
| -rw-r--r-- | chapter10a/docs/example1.gv | 4 | ||||
| -rw-r--r-- | chapter10a/docs/example1.svg | 64 | ||||
| -rw-r--r-- | chapter10a/docs/example2a.gv | 4 | ||||
| -rw-r--r-- | chapter10a/docs/example2a.svg | 92 | ||||
| -rw-r--r-- | chapter10a/docs/example2b.gv | 4 | ||||
| -rw-r--r-- | chapter10a/docs/example2b.svg | 80 | ||||
| -rw-r--r-- | chapter10a/docs/example2c.gv | 4 | ||||
| -rw-r--r-- | chapter10a/docs/example2c.svg | 46 | ||||
| -rw-r--r-- | chapter10b/README.md | 2 | ||||
| -rw-r--r-- | chapter10b/docs/example1.gv | 6 | ||||
| -rw-r--r-- | chapter10b/docs/example1.svg | 84 | ||||
| -rw-r--r-- | chapter10b/docs/example2a.gv | 6 | ||||
| -rw-r--r-- | chapter10b/docs/example2a.svg | 82 | ||||
| -rw-r--r-- | chapter10b/docs/example2b.gv | 8 | ||||
| -rw-r--r-- | chapter10b/docs/example2b.svg | 136 | ||||
| -rw-r--r-- | chapter10b/docs/example2c.gv | 4 | ||||
| -rw-r--r-- | chapter10b/docs/example2c.svg | 50 |
18 files changed, 340 insertions, 340 deletions
diff --git a/chapter10a/README.md b/chapter10a/README.md index 30db40d3..64600fa0 100644 --- a/chapter10a/README.md +++ b/chapter10a/README.md @@ -30,8 +30,8 @@ different fields are independent. Chapter 10b will remove it.  -These diagrams are schematic dependency graphs: arrows run from definitions to -uses. Pointer and value inputs are omitted where they do not explain ordering. +These diagrams are schematic dependency graphs: arrows run from uses to their +definitions. Pointer and value inputs are omitted where they do not explain ordering. | Node | Inputs | Result | |---|---|---| diff --git a/chapter10a/docs/example1.gv b/chapter10a/docs/example1.gv index 38214174..e34c73ed 100644 --- a/chapter10a/docs/example1.gv +++ b/chapter10a/docs/example1.gv @@ -5,6 +5,6 @@ digraph Memory { X [label="Store p.x = 3"]; Y [label="Store p.y = arg"]; L [label="Load p.x"]; - M0 -> X -> Y -> L [color=blue]; - Y -> Return [color=blue]; L -> Return; + L -> Y -> X -> M0 [color=blue]; + Return -> Y [color=blue]; Return -> L; } diff --git a/chapter10a/docs/example1.svg b/chapter10a/docs/example1.svg index 7ae4b560..c0668ce3 100644 --- a/chapter10a/docs/example1.svg +++ b/chapter10a/docs/example1.svg @@ -12,62 +12,62 @@ <!-- M0 --> <g id="node1" class="node"> <title>M0</title> -<polygon fill="none" stroke="black" points="98.5,-36 0,-36 0,0 98.5,0 98.5,-36"/> -<text text-anchor="middle" x="49.25" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Initial memory</text> +<polygon fill="none" stroke="black" points="547.75,-59 449.25,-59 449.25,-23 547.75,-23 547.75,-59"/> +<text text-anchor="middle" x="498.5" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Initial memory</text> </g> <!-- X --> <g id="node2" class="node"> <title>X</title> -<polygon fill="none" stroke="black" points="222.5,-36 134.5,-36 134.5,0 222.5,0 222.5,-36"/> -<text text-anchor="middle" x="178.5" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Store p.x = 3</text> +<polygon fill="none" stroke="black" points="413.25,-59 325.25,-59 325.25,-23 413.25,-23 413.25,-59"/> +<text text-anchor="middle" x="369.25" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Store p.x = 3</text> </g> -<!-- M0->X --> -<g id="edge1" class="edge"> -<title>M0->X</title> -<path fill="none" stroke="blue" d="M98.72,-18C106.55,-18 114.71,-18 122.68,-18"/> -<polygon fill="blue" stroke="blue" points="122.65,-21.5 132.65,-18 122.65,-14.5 122.65,-21.5"/> +<!-- X->M0 --> +<g id="edge3" class="edge"> +<title>X->M0</title> +<path fill="none" stroke="blue" d="M413.69,-41C421.42,-41 429.59,-41 437.69,-41"/> +<polygon fill="blue" stroke="blue" points="437.51,-44.5 447.51,-41 437.51,-37.5 437.51,-44.5"/> </g> <!-- Y --> <g id="node3" class="node"> <title>Y</title> -<polygon fill="none" stroke="black" points="357,-36 258.5,-36 258.5,0 357,0 357,-36"/> -<text text-anchor="middle" x="307.75" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Store p.y = arg</text> +<polygon fill="none" stroke="black" points="289.25,-59 190.75,-59 190.75,-23 289.25,-23 289.25,-59"/> +<text text-anchor="middle" x="240" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Store p.y = arg</text> </g> -<!-- X->Y --> +<!-- Y->X --> <g id="edge2" class="edge"> -<title>X->Y</title> -<path fill="none" stroke="blue" d="M222.94,-18C230.67,-18 238.84,-18 246.94,-18"/> -<polygon fill="blue" stroke="blue" points="246.76,-21.5 256.76,-18 246.76,-14.5 246.76,-21.5"/> +<title>Y->X</title> +<path fill="none" stroke="blue" d="M289.47,-41C297.3,-41 305.46,-41 313.43,-41"/> +<polygon fill="blue" stroke="blue" points="313.4,-44.5 323.4,-41 313.4,-37.5 313.4,-44.5"/> </g> <!-- L --> <g id="node4" class="node"> <title>L</title> -<polygon fill="none" stroke="black" points="457.75,-59 393,-59 393,-23 457.75,-23 457.75,-59"/> -<text text-anchor="middle" x="425.38" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Load p.x</text> +<polygon fill="none" stroke="black" points="154.75,-36 90,-36 90,0 154.75,0 154.75,-36"/> +<text text-anchor="middle" x="122.38" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Load p.x</text> </g> -<!-- Y->L --> -<g id="edge3" class="edge"> -<title>Y->L</title> -<path fill="none" stroke="blue" d="M357.45,-27.69C365.41,-29.27 373.61,-30.9 381.42,-32.46"/> -<polygon fill="blue" stroke="blue" points="380.54,-35.85 391.03,-34.37 381.9,-28.98 380.54,-35.85"/> +<!-- L->Y --> +<g id="edge1" class="edge"> +<title>L->Y</title> +<path fill="none" stroke="blue" d="M154.97,-24.28C162.59,-25.8 170.99,-27.47 179.44,-29.15"/> +<polygon fill="blue" stroke="blue" points="178.53,-32.54 189.02,-31.06 179.9,-25.68 178.53,-32.54"/> </g> <!-- Return --> <g id="node5" class="node"> <title>Return</title> -<polygon fill="none" stroke="black" points="547.75,-36 493.75,-36 493.75,0 547.75,0 547.75,-36"/> -<text text-anchor="middle" x="520.75" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Return</text> +<polygon fill="none" stroke="black" points="54,-59 0,-59 0,-23 54,-23 54,-59"/> +<text text-anchor="middle" x="27" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Return</text> </g> -<!-- Y->Return --> +<!-- Return->Y --> <g id="edge4" class="edge"> -<title>Y->Return</title> -<path fill="none" stroke="blue" d="M357.3,-15.3C368.98,-14.76 381.44,-14.27 393,-14 421.77,-13.32 428.99,-13.07 457.75,-14 465.65,-14.25 474.1,-14.69 482.14,-15.18"/> -<polygon fill="blue" stroke="blue" points="481.8,-18.67 492.01,-15.83 482.26,-11.68 481.8,-18.67"/> +<title>Return->Y</title> +<path fill="none" stroke="blue" d="M54.23,-43.07C65.26,-43.84 78.25,-44.62 90,-45 118.76,-45.93 125.98,-45.68 154.75,-45 162.61,-44.81 170.88,-44.53 179.04,-44.2"/> +<polygon fill="blue" stroke="blue" points="179.1,-47.7 188.94,-43.76 178.8,-40.7 179.1,-47.7"/> </g> -<!-- L->Return --> +<!-- Return->L --> <g id="edge5" class="edge"> -<title>L->Return</title> -<path fill="none" stroke="black" d="M458.25,-33.15C466,-31.24 474.37,-29.18 482.36,-27.21"/> -<polygon fill="black" stroke="black" points="482.95,-30.67 491.82,-24.88 481.28,-23.87 482.95,-30.67"/> +<title>Return->L</title> +<path fill="none" stroke="black" d="M54.01,-34.59C61.58,-32.73 70.06,-30.64 78.37,-28.59"/> +<polygon fill="black" stroke="black" points="79.18,-32 88.05,-26.21 77.51,-25.2 79.18,-32"/> </g> </g> </svg> diff --git a/chapter10a/docs/example2a.gv b/chapter10a/docs/example2a.gv index 13fd75e0..64e774fc 100644 --- a/chapter10a/docs/example2a.gv +++ b/chapter10a/docs/example2a.gv @@ -5,6 +5,6 @@ digraph Memory { A [label="True: Store x"]; B [label="False: Store y"]; P [label="Phi(memory)"]; - M -> A -> P [color=blue]; M -> B -> P [color=blue]; - Region -> P [style=dashed]; P -> Return [color=blue]; + P -> A -> M [color=blue]; P -> B -> M [color=blue]; + P -> Region [style=dashed]; Return -> P [color=blue]; } diff --git a/chapter10a/docs/example2a.svg b/chapter10a/docs/example2a.svg index 1752659e..c6801f59 100644 --- a/chapter10a/docs/example2a.svg +++ b/chapter10a/docs/example2a.svg @@ -12,74 +12,74 @@ <!-- M --> <g id="node1" class="node"> <title>M</title> -<polygon fill="none" stroke="black" points="118.75,-117 0,-117 0,-81 118.75,-81 118.75,-117"/> -<text text-anchor="middle" x="59.38" y="-93.95" font-family="Times New Roman,serif" font-size="14.00">Incoming memory</text> +<polygon fill="none" stroke="black" points="461.25,-117 342.5,-117 342.5,-81 461.25,-81 461.25,-117"/> +<text text-anchor="middle" x="401.88" y="-93.95" font-family="Times New Roman,serif" font-size="14.00">Incoming memory</text> </g> <!-- A --> <g id="node2" class="node"> <title>A</title> -<polygon fill="none" stroke="black" points="244.25,-144 156.25,-144 156.25,-108 244.25,-108 244.25,-144"/> -<text text-anchor="middle" x="200.25" y="-120.95" font-family="Times New Roman,serif" font-size="14.00">True: Store x</text> +<polygon fill="none" stroke="black" points="305,-144 217,-144 217,-108 305,-108 305,-144"/> +<text text-anchor="middle" x="261" y="-120.95" font-family="Times New Roman,serif" font-size="14.00">True: Store x</text> </g> -<!-- M->A --> -<g id="edge1" class="edge"> -<title>M->A</title> -<path fill="none" stroke="blue" d="M118.87,-110.37C127.53,-112.06 136.42,-113.78 144.99,-115.45"/> -<polygon fill="blue" stroke="blue" points="144.05,-118.83 154.53,-117.31 145.38,-111.96 144.05,-118.83"/> +<!-- A->M --> +<g id="edge2" class="edge"> +<title>A->M</title> +<path fill="none" stroke="blue" d="M305.18,-117.61C313.41,-116.01 322.22,-114.29 331.03,-112.58"/> +<polygon fill="blue" stroke="blue" points="331.53,-116.05 340.67,-110.7 330.19,-109.18 331.53,-116.05"/> </g> <!-- B --> <g id="node3" class="node"> <title>B</title> -<polygon fill="none" stroke="black" points="245.75,-90 154.75,-90 154.75,-54 245.75,-54 245.75,-90"/> -<text text-anchor="middle" x="200.25" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">False: Store y</text> +<polygon fill="none" stroke="black" points="306.5,-90 215.5,-90 215.5,-54 306.5,-54 306.5,-90"/> +<text text-anchor="middle" x="261" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">False: Store y</text> </g> -<!-- M->B --> -<g id="edge3" class="edge"> -<title>M->B</title> -<path fill="none" stroke="blue" d="M118.87,-87.63C126.93,-86.06 135.19,-84.45 143.21,-82.9"/> -<polygon fill="blue" stroke="blue" points="143.7,-86.37 152.84,-81.02 142.36,-79.5 143.7,-86.37"/> +<!-- B->M --> +<g id="edge4" class="edge"> +<title>B->M</title> +<path fill="none" stroke="blue" d="M306.71,-80.69C314.45,-82.2 322.66,-83.79 330.88,-85.39"/> +<polygon fill="blue" stroke="blue" points="330.09,-88.8 340.57,-87.28 331.42,-81.93 330.09,-88.8"/> </g> <!-- P --> <g id="node4" class="node"> <title>P</title> -<polygon fill="none" stroke="black" points="371.25,-90 281.75,-90 281.75,-54 371.25,-54 371.25,-90"/> -<text text-anchor="middle" x="326.5" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Phi(memory)</text> -</g> -<!-- A->P --> -<g id="edge2" class="edge"> -<title>A->P</title> -<path fill="none" stroke="blue" d="M243.66,-107.57C253.06,-103.48 263.13,-99.11 272.87,-94.87"/> -<polygon fill="blue" stroke="blue" points="274.11,-98.15 281.89,-90.95 271.32,-91.73 274.11,-98.15"/> -</g> -<!-- B->P --> -<g id="edge4" class="edge"> -<title>B->P</title> -<path fill="none" stroke="blue" d="M246.11,-72C253.95,-72 262.19,-72 270.28,-72"/> -<polygon fill="blue" stroke="blue" points="270.03,-75.5 280.03,-72 270.03,-68.5 270.03,-75.5"/> +<polygon fill="none" stroke="black" points="179.5,-90 90,-90 90,-54 179.5,-54 179.5,-90"/> +<text text-anchor="middle" x="134.75" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Phi(memory)</text> </g> -<!-- Return --> -<g id="node6" class="node"> -<title>Return</title> -<polygon fill="none" stroke="black" points="461.25,-90 407.25,-90 407.25,-54 461.25,-54 461.25,-90"/> -<text text-anchor="middle" x="434.25" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Return</text> +<!-- P->A --> +<g id="edge1" class="edge"> +<title>P->A</title> +<path fill="none" stroke="blue" d="M178.16,-90.43C187.56,-94.52 197.63,-98.89 207.37,-103.13"/> +<polygon fill="blue" stroke="blue" points="205.82,-106.27 216.39,-107.05 208.61,-99.85 205.82,-106.27"/> </g> -<!-- P->Return --> -<g id="edge6" class="edge"> -<title>P->Return</title> -<path fill="none" stroke="blue" d="M371.73,-72C379.7,-72 387.94,-72 395.7,-72"/> -<polygon fill="blue" stroke="blue" points="395.49,-75.5 405.49,-72 395.49,-68.5 395.49,-75.5"/> +<!-- P->B --> +<g id="edge3" class="edge"> +<title>P->B</title> +<path fill="none" stroke="blue" d="M179.91,-72C187.59,-72 195.68,-72 203.64,-72"/> +<polygon fill="blue" stroke="blue" points="203.63,-75.5 213.63,-72 203.63,-68.5 203.63,-75.5"/> </g> <!-- Region --> <g id="node5" class="node"> <title>Region</title> -<polygon fill="none" stroke="black" points="227.75,-36 172.75,-36 172.75,0 227.75,0 227.75,-36"/> -<text text-anchor="middle" x="200.25" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Region</text> +<polygon fill="none" stroke="black" points="288.5,-36 233.5,-36 233.5,0 288.5,0 288.5,-36"/> +<text text-anchor="middle" x="261" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Region</text> </g> -<!-- Region->P --> +<!-- P->Region --> <g id="edge5" class="edge"> -<title>Region->P</title> -<path fill="none" stroke="black" stroke-dasharray="5,2" d="M228.21,-29.72C241.2,-35.36 257.25,-42.34 272.54,-48.98"/> -<polygon fill="black" stroke="black" points="271,-52.13 281.57,-52.91 273.79,-45.71 271,-52.13"/> +<title>P->Region</title> +<path fill="none" stroke="black" stroke-dasharray="5,2" d="M178.16,-53.57C192.73,-47.24 208.91,-40.21 223.01,-34.08"/> +<polygon fill="black" stroke="black" points="224.16,-37.39 231.94,-30.2 221.37,-30.97 224.16,-37.39"/> +</g> +<!-- Return --> +<g id="node6" class="node"> +<title>Return</title> +<polygon fill="none" stroke="black" points="54,-90 0,-90 0,-54 54,-54 54,-90"/> +<text text-anchor="middle" x="27" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Return</text> +</g> +<!-- Return->P --> +<g id="edge6" class="edge"> +<title>Return->P</title> +<path fill="none" stroke="blue" d="M54.41,-72C61.73,-72 69.96,-72 78.28,-72"/> +<polygon fill="blue" stroke="blue" points="78.08,-75.5 88.08,-72 78.08,-68.5 78.08,-75.5"/> </g> </g> </svg> diff --git a/chapter10a/docs/example2b.gv b/chapter10a/docs/example2b.gv index 9db0f5fb..7ccbcc99 100644 --- a/chapter10a/docs/example2b.gv +++ b/chapter10a/docs/example2b.gv @@ -3,6 +3,6 @@ digraph Memory { node [shape=box]; P [label="Phi(memory)"]; S [label="Loop-body Store"]; - Entry -> P [color=blue]; P -> S -> P [color=blue]; - Loop -> P [style=dashed]; P -> Return [color=blue]; + P -> Entry [color=blue]; P -> S -> P [color=blue]; + P -> Loop [style=dashed]; Return -> P [color=blue]; } diff --git a/chapter10a/docs/example2b.svg b/chapter10a/docs/example2b.svg index 1f106d63..063a6f21 100644 --- a/chapter10a/docs/example2b.svg +++ b/chapter10a/docs/example2b.svg @@ -4,70 +4,70 @@ <!-- Generated by graphviz version 12.2.0 (20241103.1931) --> <!-- Title: Memory Pages: 1 --> -<svg width="332pt" height="125pt" - viewBox="0.00 0.00 331.75 125.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 121)"> +<svg width="332pt" height="152pt" + viewBox="0.00 0.00 331.75 152.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 148)"> <title>Memory</title> -<polygon fill="white" stroke="none" points="-4,4 -4,-121 327.75,-121 327.75,4 -4,4"/> +<polygon fill="white" stroke="none" points="-4,4 -4,-148 327.75,-148 327.75,4 -4,4"/> <!-- P --> <g id="node1" class="node"> <title>P</title> -<polygon fill="none" stroke="black" points="179.5,-90 90,-90 90,-54 179.5,-54 179.5,-90"/> -<text text-anchor="middle" x="134.75" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Phi(memory)</text> +<polygon fill="none" stroke="black" points="179.5,-117 90,-117 90,-81 179.5,-81 179.5,-117"/> +<text text-anchor="middle" x="134.75" y="-93.95" font-family="Times New Roman,serif" font-size="14.00">Phi(memory)</text> </g> <!-- S --> <g id="node2" class="node"> <title>S</title> -<polygon fill="none" stroke="black" points="323.75,-90 215.5,-90 215.5,-54 323.75,-54 323.75,-90"/> -<text text-anchor="middle" x="269.62" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Loop-body Store</text> +<polygon fill="none" stroke="black" points="323.75,-144 215.5,-144 215.5,-108 323.75,-108 323.75,-144"/> +<text text-anchor="middle" x="269.62" y="-120.95" font-family="Times New Roman,serif" font-size="14.00">Loop-body Store</text> </g> <!-- P->S --> <g id="edge2" class="edge"> <title>P->S</title> -<path fill="none" stroke="blue" d="M180,-65.6C187.69,-65.35 195.84,-65.23 203.95,-65.25"/> -<polygon fill="blue" stroke="blue" points="203.79,-68.75 213.83,-65.35 203.87,-61.75 203.79,-68.75"/> -</g> -<!-- Return --> -<g id="node5" class="node"> -<title>Return</title> -<polygon fill="none" stroke="black" points="296.62,-36 242.62,-36 242.62,0 296.62,0 296.62,-36"/> -<text text-anchor="middle" x="269.62" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Return</text> -</g> -<!-- P->Return --> -<g id="edge5" class="edge"> -<title>P->Return</title> -<path fill="none" stroke="blue" d="M180,-54.02C196.8,-47.19 215.75,-39.49 231.8,-32.97"/> -<polygon fill="blue" stroke="blue" points="233.04,-36.24 240.98,-29.23 230.4,-29.76 233.04,-36.24"/> -</g> -<!-- S->P --> -<g id="edge3" class="edge"> -<title>S->P</title> -<path fill="none" stroke="blue" d="M215.34,-78.63C207.46,-78.78 199.33,-78.79 191.4,-78.67"/> -<polygon fill="blue" stroke="blue" points="191.59,-75.17 181.51,-78.44 191.42,-82.17 191.59,-75.17"/> +<path fill="none" stroke="blue" d="M180,-101.59C187.78,-102.92 196.03,-104.48 204.23,-106.17"/> +<polygon fill="blue" stroke="blue" points="203.35,-109.56 213.86,-108.23 204.81,-102.71 203.35,-109.56"/> </g> <!-- Entry --> <g id="node3" class="node"> <title>Entry</title> -<polygon fill="none" stroke="black" points="54,-117 0,-117 0,-81 54,-81 54,-117"/> -<text text-anchor="middle" x="27" y="-93.95" font-family="Times New Roman,serif" font-size="14.00">Entry</text> +<polygon fill="none" stroke="black" points="296.62,-90 242.62,-90 242.62,-54 296.62,-54 296.62,-90"/> +<text text-anchor="middle" x="269.62" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Entry</text> </g> -<!-- Entry->P --> +<!-- P->Entry --> <g id="edge1" class="edge"> -<title>Entry->P</title> -<path fill="none" stroke="blue" d="M54.41,-92.26C61.81,-90.37 70.15,-88.24 78.56,-86.09"/> -<polygon fill="blue" stroke="blue" points="79.3,-89.51 88.12,-83.65 77.57,-82.73 79.3,-89.51"/> +<title>P->Entry</title> +<path fill="none" stroke="blue" d="M180,-90.01C196.64,-86.63 215.39,-82.82 231.34,-79.58"/> +<polygon fill="blue" stroke="blue" points="231.8,-83.05 240.9,-77.63 230.41,-76.19 231.8,-83.05"/> </g> <!-- Loop --> <g id="node4" class="node"> <title>Loop</title> -<polygon fill="none" stroke="black" points="54,-63 0,-63 0,-27 54,-27 54,-63"/> -<text text-anchor="middle" x="27" y="-39.95" font-family="Times New Roman,serif" font-size="14.00">Loop</text> +<polygon fill="none" stroke="black" points="296.62,-36 242.62,-36 242.62,0 296.62,0 296.62,-36"/> +<text text-anchor="middle" x="269.62" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Loop</text> </g> -<!-- Loop->P --> +<!-- P->Loop --> <g id="edge4" class="edge"> -<title>Loop->P</title> -<path fill="none" stroke="black" stroke-dasharray="5,2" d="M54.41,-51.74C61.81,-53.63 70.15,-55.76 78.56,-57.91"/> -<polygon fill="black" stroke="black" points="77.57,-61.27 88.12,-60.35 79.3,-54.49 77.57,-61.27"/> +<title>P->Loop</title> +<path fill="none" stroke="black" stroke-dasharray="5,2" d="M161.08,-80.66C176.5,-69.79 196.77,-56.04 215.5,-45 220.85,-41.85 226.61,-38.69 232.29,-35.7"/> +<polygon fill="black" stroke="black" points="233.69,-38.92 240.99,-31.24 230.49,-32.69 233.69,-38.92"/> +</g> +<!-- S->P --> +<g id="edge3" class="edge"> +<title>S->P</title> +<path fill="none" stroke="blue" d="M215.34,-121.8C207.37,-120.33 199.14,-118.67 191.13,-116.92"/> +<polygon fill="blue" stroke="blue" points="192,-113.53 181.47,-114.73 190.45,-120.35 192,-113.53"/> +</g> +<!-- Return --> +<g id="node5" class="node"> +<title>Return</title> +<polygon fill="none" stroke="black" points="54,-117 0,-117 0,-81 54,-81 54,-117"/> +<text text-anchor="middle" x="27" y="-93.95" font-family="Times New Roman,serif" font-size="14.00">Return</text> +</g> +<!-- Return->P --> +<g id="edge5" class="edge"> +<title>Return->P</title> +<path fill="none" stroke="blue" d="M54.41,-99C61.73,-99 69.96,-99 78.28,-99"/> +<polygon fill="blue" stroke="blue" points="78.08,-102.5 88.08,-99 78.08,-95.5 78.08,-102.5"/> </g> </g> </svg> diff --git a/chapter10a/docs/example2c.gv b/chapter10a/docs/example2c.gv index 0a9f0462..0c7cf67d 100644 --- a/chapter10a/docs/example2c.gv +++ b/chapter10a/docs/example2c.gv @@ -4,6 +4,6 @@ digraph Memory { M [label="Prior memory"]; L [label="Load p.x"]; S [label="Store p.x"]; - M -> L [color=blue]; M -> S [color=blue]; - L -> S [style=dashed,label="execute load first"]; + L -> M [color=blue]; S -> M [color=blue]; + S -> L [style=dashed,label="execute load first"]; } diff --git a/chapter10a/docs/example2c.svg b/chapter10a/docs/example2c.svg index 90f90920..a4d2f53e 100644 --- a/chapter10a/docs/example2c.svg +++ b/chapter10a/docs/example2c.svg @@ -4,47 +4,47 @@ <!-- Generated by graphviz version 12.2.0 (20241103.1931) --> <!-- Title: Memory Pages: 1 --> -<svg width="398pt" height="78pt" - viewBox="0.00 0.00 398.25 78.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 74)"> +<svg width="398pt" height="67pt" + viewBox="0.00 0.00 398.25 67.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 63)"> <title>Memory</title> -<polygon fill="white" stroke="none" points="-4,4 -4,-74 394.25,-74 394.25,4 -4,4"/> +<polygon fill="white" stroke="none" points="-4,4 -4,-63 394.25,-63 394.25,4 -4,4"/> <!-- M --> <g id="node1" class="node"> <title>M</title> -<polygon fill="none" stroke="black" points="93.25,-36 0,-36 0,0 93.25,0 93.25,-36"/> -<text text-anchor="middle" x="46.62" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Prior memory</text> +<polygon fill="none" stroke="black" points="390.25,-59 297,-59 297,-23 390.25,-23 390.25,-59"/> +<text text-anchor="middle" x="343.62" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Prior memory</text> </g> <!-- L --> <g id="node2" class="node"> <title>L</title> -<polygon fill="none" stroke="black" points="195,-70 130.25,-70 130.25,-34 195,-34 195,-70"/> -<text text-anchor="middle" x="162.62" y="-46.95" font-family="Times New Roman,serif" font-size="14.00">Load p.x</text> +<polygon fill="none" stroke="black" points="260,-36 195.25,-36 195.25,0 260,0 260,-36"/> +<text text-anchor="middle" x="227.62" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Load p.x</text> </g> -<!-- M->L --> +<!-- L->M --> <g id="edge1" class="edge"> -<title>M->L</title> -<path fill="none" stroke="blue" d="M93.66,-31.73C101.99,-34.21 110.64,-36.79 118.87,-39.25"/> -<polygon fill="blue" stroke="blue" points="117.72,-42.56 128.31,-42.06 119.73,-35.85 117.72,-42.56"/> +<title>L->M</title> +<path fill="none" stroke="blue" d="M260.38,-24.41C268.17,-25.98 276.74,-27.71 285.33,-29.44"/> +<polygon fill="blue" stroke="blue" points="284.57,-32.86 295.07,-31.41 285.96,-26 284.57,-32.86"/> </g> <!-- S --> <g id="node3" class="node"> <title>S</title> -<polygon fill="none" stroke="black" points="390.25,-40 324.75,-40 324.75,-4 390.25,-4 390.25,-40"/> -<text text-anchor="middle" x="357.5" y="-16.95" font-family="Times New Roman,serif" font-size="14.00">Store p.x</text> +<polygon fill="none" stroke="black" points="65.5,-59 0,-59 0,-23 65.5,-23 65.5,-59"/> +<text text-anchor="middle" x="32.75" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Store p.x</text> </g> -<!-- M->S --> +<!-- S->M --> <g id="edge2" class="edge"> -<title>M->S</title> -<path fill="none" stroke="blue" d="M93.53,-18.59C152.81,-19.36 255.2,-20.69 313.19,-21.44"/> -<polygon fill="blue" stroke="blue" points="312.95,-24.94 323,-21.57 313.04,-17.94 312.95,-24.94"/> +<title>S->M</title> +<path fill="none" stroke="blue" d="M65.75,-47.66C71.63,-48.63 77.73,-49.48 83.5,-50 152.69,-56.21 232.63,-51.66 285.21,-47.07"/> +<polygon fill="blue" stroke="blue" points="285.51,-50.56 295.15,-46.17 284.88,-43.59 285.51,-50.56"/> </g> -<!-- L->S --> +<!-- S->L --> <g id="edge3" class="edge"> -<title>L->S</title> -<path fill="none" stroke="black" stroke-dasharray="5,2" d="M195.47,-47.05C227.62,-42.05 277.5,-34.29 313.22,-28.73"/> -<polygon fill="black" stroke="black" points="313.44,-32.24 322.79,-27.24 312.37,-25.32 313.44,-32.24"/> -<text text-anchor="middle" x="259.88" y="-47.15" font-family="Times New Roman,serif" font-size="14.00">execute load first</text> +<title>S->L</title> +<path fill="none" stroke="black" stroke-dasharray="5,2" d="M65.84,-35.96C71.71,-35.1 77.78,-34.24 83.5,-33.5 117.16,-29.14 155.38,-25.05 183.85,-22.16"/> +<polygon fill="black" stroke="black" points="183.92,-25.67 193.52,-21.19 183.22,-18.71 183.92,-25.67"/> +<text text-anchor="middle" x="130.38" y="-36.7" font-family="Times New Roman,serif" font-size="14.00">execute load first</text> </g> </g> </svg> diff --git a/chapter10b/README.md b/chapter10b/README.md index d90a9da7..1779be50 100644 --- a/chapter10b/README.md +++ b/chapter10b/README.md @@ -27,7 +27,7 @@ load-after-store forwarding turn the return value into 42.  -These are schematic dependency graphs, with arrows from definitions to uses. +These are schematic dependency graphs, with arrows from uses to their definitions. Control, pointer, and value edges are omitted when they do not explain memory. ## Equivalence-class aliasing diff --git a/chapter10b/docs/example1.gv b/chapter10b/docs/example1.gv index d1b2d456..2194ae8f 100644 --- a/chapter10b/docs/example1.gv +++ b/chapter10b/docs/example1.gv @@ -5,7 +5,7 @@ digraph Memory { X [label="Store x = 42"]; Y [label="Loop: Store y"]; L [label="Load x -> 42"]; - M -> X -> L [color=blue]; M -> Y [color=green]; - X -> MemMerge [color=blue]; Y -> MemMerge [color=green]; - MemMerge -> Return; L -> Return; + L -> X -> M [color=blue]; Y -> M [color=green]; + MemMerge -> X [color=blue]; MemMerge -> Y [color=green]; + Return -> MemMerge; Return -> L; } diff --git a/chapter10b/docs/example1.svg b/chapter10b/docs/example1.svg index bcd2a221..c441bc7b 100644 --- a/chapter10b/docs/example1.svg +++ b/chapter10b/docs/example1.svg @@ -12,80 +12,80 @@ <!-- M --> <g id="node1" class="node"> <title>M</title> -<polygon fill="none" stroke="black" points="98.5,-63 0,-63 0,-27 98.5,-27 98.5,-63"/> -<text text-anchor="middle" x="49.25" y="-39.95" font-family="Times New Roman,serif" font-size="14.00">Initial memory</text> +<polygon fill="none" stroke="black" points="439.5,-63 341,-63 341,-27 439.5,-27 439.5,-63"/> +<text text-anchor="middle" x="390.25" y="-39.95" font-family="Times New Roman,serif" font-size="14.00">Initial memory</text> </g> <!-- X --> <g id="node2" class="node"> <title>X</title> -<polygon fill="none" stroke="black" points="222.12,-90 137.88,-90 137.88,-54 222.12,-54 222.12,-90"/> -<text text-anchor="middle" x="180" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Store x = 42</text> +<polygon fill="none" stroke="black" points="301.62,-90 217.38,-90 217.38,-54 301.62,-54 301.62,-90"/> +<text text-anchor="middle" x="259.5" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Store x = 42</text> </g> -<!-- M->X --> -<g id="edge1" class="edge"> -<title>M->X</title> -<path fill="none" stroke="blue" d="M98.92,-55.21C107.84,-57.08 117.18,-59.04 126.2,-60.93"/> -<polygon fill="blue" stroke="blue" points="125.43,-64.34 135.93,-62.97 126.86,-57.49 125.43,-64.34"/> +<!-- X->M --> +<g id="edge2" class="edge"> +<title>X->M</title> +<path fill="none" stroke="blue" d="M301.95,-63.31C310.73,-61.47 320.16,-59.49 329.47,-57.54"/> +<polygon fill="blue" stroke="blue" points="330.15,-60.97 339.22,-55.49 328.71,-54.12 330.15,-60.97"/> </g> <!-- Y --> <g id="node3" class="node"> <title>Y</title> -<polygon fill="none" stroke="black" points="225.5,-36 134.5,-36 134.5,0 225.5,0 225.5,-36"/> -<text text-anchor="middle" x="180" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Loop: Store y</text> +<polygon fill="none" stroke="black" points="305,-36 214,-36 214,0 305,0 305,-36"/> +<text text-anchor="middle" x="259.5" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Loop: Store y</text> </g> -<!-- M->Y --> +<!-- Y->M --> <g id="edge3" class="edge"> -<title>M->Y</title> -<path fill="none" stroke="green" d="M98.92,-34.79C106.77,-33.15 114.94,-31.43 122.94,-29.76"/> -<polygon fill="green" stroke="green" points="123.52,-33.21 132.59,-27.73 122.09,-26.36 123.52,-33.21"/> +<title>Y->M</title> +<path fill="none" stroke="green" d="M305.17,-27.37C313.06,-29.02 321.38,-30.77 329.61,-32.49"/> +<polygon fill="green" stroke="green" points="328.72,-35.88 339.22,-34.51 330.16,-29.03 328.72,-35.88"/> </g> <!-- L --> <g id="node4" class="node"> <title>L</title> -<polygon fill="none" stroke="black" points="349.5,-90 261.5,-90 261.5,-54 349.5,-54 349.5,-90"/> -<text text-anchor="middle" x="305.5" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Load x -> 42</text> +<polygon fill="none" stroke="black" points="178,-90 90,-90 90,-54 178,-54 178,-90"/> +<text text-anchor="middle" x="134" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Load x -> 42</text> </g> -<!-- X->L --> -<g id="edge2" class="edge"> -<title>X->L</title> -<path fill="none" stroke="blue" d="M222.47,-72C231.24,-72 240.62,-72 249.8,-72"/> -<polygon fill="blue" stroke="blue" points="249.73,-75.5 259.73,-72 249.73,-68.5 249.73,-75.5"/> +<!-- L->X --> +<g id="edge1" class="edge"> +<title>L->X</title> +<path fill="none" stroke="blue" d="M178.19,-72C187.1,-72 196.56,-72 205.76,-72"/> +<polygon fill="blue" stroke="blue" points="205.69,-75.5 215.69,-72 205.69,-68.5 205.69,-75.5"/> </g> <!-- MemMerge --> <g id="node5" class="node"> <title>MemMerge</title> -<polygon fill="none" stroke="black" points="346.5,-36 264.5,-36 264.5,0 346.5,0 346.5,-36"/> -<text text-anchor="middle" x="305.5" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text> +<polygon fill="none" stroke="black" points="175,-36 93,-36 93,0 175,0 175,-36"/> +<text text-anchor="middle" x="134" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text> </g> -<!-- X->MemMerge --> +<!-- MemMerge->X --> <g id="edge4" class="edge"> -<title>X->MemMerge</title> -<path fill="none" stroke="blue" d="M222.47,-53.87C232.56,-49.46 243.46,-44.69 253.92,-40.11"/> -<polygon fill="blue" stroke="blue" points="255.04,-43.45 262.8,-36.23 252.24,-37.03 255.04,-43.45"/> +<title>MemMerge->X</title> +<path fill="none" stroke="blue" d="M175.44,-35.68C185.46,-40.06 196.34,-44.82 206.82,-49.4"/> +<polygon fill="blue" stroke="blue" points="205.17,-52.5 215.74,-53.3 207.98,-46.09 205.17,-52.5"/> </g> -<!-- Y->MemMerge --> +<!-- MemMerge->Y --> <g id="edge5" class="edge"> -<title>Y->MemMerge</title> -<path fill="none" stroke="green" d="M225.94,-18C234.66,-18 243.88,-18 252.8,-18"/> -<polygon fill="green" stroke="green" points="252.79,-21.5 262.79,-18 252.79,-14.5 252.79,-21.5"/> +<title>MemMerge->Y</title> +<path fill="none" stroke="green" d="M175.44,-18C184.05,-18 193.28,-18 202.35,-18"/> +<polygon fill="green" stroke="green" points="202.19,-21.5 212.19,-18 202.19,-14.5 202.19,-21.5"/> </g> <!-- Return --> <g id="node6" class="node"> <title>Return</title> -<polygon fill="none" stroke="black" points="439.5,-63 385.5,-63 385.5,-27 439.5,-27 439.5,-63"/> -<text text-anchor="middle" x="412.5" y="-39.95" font-family="Times New Roman,serif" font-size="14.00">Return</text> +<polygon fill="none" stroke="black" points="54,-63 0,-63 0,-27 54,-27 54,-63"/> +<text text-anchor="middle" x="27" y="-39.95" font-family="Times New Roman,serif" font-size="14.00">Return</text> </g> -<!-- L->Return --> +<!-- Return->L --> <g id="edge7" class="edge"> -<title>L->Return</title> -<path fill="none" stroke="black" d="M349.81,-60.86C357.86,-58.79 366.2,-56.65 374.06,-54.63"/> -<polygon fill="black" stroke="black" points="374.84,-58.04 383.65,-52.16 373.1,-51.26 374.84,-58.04"/> +<title>Return->L</title> +<path fill="none" stroke="black" d="M54.5,-51.81C61.93,-53.72 70.3,-55.88 78.72,-58.04"/> +<polygon fill="black" stroke="black" points="77.74,-61.4 88.3,-60.5 79.48,-54.62 77.74,-61.4"/> </g> -<!-- MemMerge->Return --> +<!-- Return->MemMerge --> <g id="edge6" class="edge"> -<title>MemMerge->Return</title> -<path fill="none" stroke="black" d="M346.8,-28.36C355.72,-30.66 365.15,-33.08 373.96,-35.35"/> -<polygon fill="black" stroke="black" points="373.07,-38.73 383.63,-37.83 374.82,-31.95 373.07,-38.73"/> +<title>Return->MemMerge</title> +<path fill="none" stroke="black" d="M54.5,-38.19C62.79,-36.05 72.25,-33.62 81.65,-31.2"/> +<polygon fill="black" stroke="black" points="82.32,-34.65 91.14,-28.77 80.58,-27.87 82.32,-34.65"/> </g> </g> </svg> diff --git a/chapter10b/docs/example2a.gv b/chapter10b/docs/example2a.gv index 50f7ec80..c2db6771 100644 --- a/chapter10b/docs/example2a.gv +++ b/chapter10b/docs/example2a.gv @@ -4,7 +4,7 @@ digraph Memory { M [label="Default memory"]; X [label="Store x"]; Y [label="Store y"]; - M -> X [color=blue]; M -> Y [color=green]; - M -> MemMerge [label="default"]; X -> MemMerge [label="x",color=blue]; - Y -> MemMerge [label="y",color=green]; MemMerge -> Return; + X -> M [color=blue]; Y -> M [color=green]; + MemMerge -> M [label="default"]; MemMerge -> X [label="x",color=blue]; + MemMerge -> Y [label="y",color=green]; Return -> MemMerge; } diff --git a/chapter10b/docs/example2a.svg b/chapter10b/docs/example2a.svg index 74cb48e0..fc95e08c 100644 --- a/chapter10b/docs/example2a.svg +++ b/chapter10b/docs/example2a.svg @@ -4,79 +4,79 @@ <!-- Generated by graphviz version 12.2.0 (20241103.1931) --> <!-- Title: Memory Pages: 1 --> -<svg width="423pt" height="128pt" - viewBox="0.00 0.00 422.50 127.80" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 123.8)"> +<svg width="423pt" height="126pt" + viewBox="0.00 0.00 422.50 125.93" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 121.93)"> <title>Memory</title> -<polygon fill="white" stroke="none" points="-4,4 -4,-123.8 418.5,-123.8 418.5,4 -4,4"/> +<polygon fill="white" stroke="none" points="-4,4 -4,-121.93 418.5,-121.93 418.5,4 -4,4"/> <!-- M --> <g id="node1" class="node"> <title>M</title> -<polygon fill="none" stroke="black" points="106.75,-65.8 0,-65.8 0,-29.8 106.75,-29.8 106.75,-65.8"/> -<text text-anchor="middle" x="53.38" y="-42.75" font-family="Times New Roman,serif" font-size="14.00">Default memory</text> +<polygon fill="none" stroke="black" points="414.5,-90 307.75,-90 307.75,-54 414.5,-54 414.5,-90"/> +<text text-anchor="middle" x="361.12" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Default memory</text> </g> <!-- X --> <g id="node2" class="node"> <title>X</title> -<polygon fill="none" stroke="black" points="198.75,-119.8 143.75,-119.8 143.75,-83.8 198.75,-83.8 198.75,-119.8"/> -<text text-anchor="middle" x="171.25" y="-96.75" font-family="Times New Roman,serif" font-size="14.00">Store x</text> +<polygon fill="none" stroke="black" points="270.75,-90 215.75,-90 215.75,-54 270.75,-54 270.75,-90"/> +<text text-anchor="middle" x="243.25" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Store x</text> </g> -<!-- M->X --> +<!-- X->M --> <g id="edge1" class="edge"> -<title>M->X</title> -<path fill="none" stroke="blue" d="M93.93,-66.23C106.63,-72.15 120.65,-78.69 133.17,-84.52"/> -<polygon fill="blue" stroke="blue" points="131.36,-87.54 141.9,-88.59 134.31,-81.19 131.36,-87.54"/> +<title>X->M</title> +<path fill="none" stroke="blue" d="M271.13,-72C278.66,-72 287.18,-72 295.9,-72"/> +<polygon fill="blue" stroke="blue" points="295.89,-75.5 305.89,-72 295.89,-68.5 295.89,-75.5"/> </g> <!-- Y --> <g id="node3" class="node"> <title>Y</title> -<polygon fill="none" stroke="black" points="198.75,-65.8 143.75,-65.8 143.75,-29.8 198.75,-29.8 198.75,-65.8"/> -<text text-anchor="middle" x="171.25" y="-42.75" font-family="Times New Roman,serif" font-size="14.00">Store y</text> +<polygon fill="none" stroke="black" points="270.75,-36 215.75,-36 215.75,0 270.75,0 270.75,-36"/> +<text text-anchor="middle" x="243.25" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Store y</text> </g> -<!-- M->Y --> +<!-- Y->M --> <g id="edge2" class="edge"> -<title>M->Y</title> -<path fill="none" stroke="green" d="M107.23,-47.8C115.55,-47.8 124.01,-47.8 131.93,-47.8"/> -<polygon fill="green" stroke="green" points="131.91,-51.3 141.91,-47.8 131.91,-44.3 131.91,-51.3"/> +<title>Y->M</title> +<path fill="none" stroke="green" d="M271.13,-30.52C282.85,-35.99 296.97,-42.57 310.49,-48.87"/> +<polygon fill="green" stroke="green" points="308.74,-51.91 319.28,-52.97 311.69,-45.57 308.74,-51.91"/> </g> <!-- MemMerge --> <g id="node4" class="node"> <title>MemMerge</title> -<polygon fill="none" stroke="black" points="323.5,-65.8 241.5,-65.8 241.5,-29.8 323.5,-29.8 323.5,-65.8"/> -<text text-anchor="middle" x="282.5" y="-42.75" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text> +<polygon fill="none" stroke="black" points="173,-90 91,-90 91,-54 173,-54 173,-90"/> +<text text-anchor="middle" x="132" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text> </g> -<!-- M->MemMerge --> +<!-- MemMerge->M --> <g id="edge3" class="edge"> -<title>M->MemMerge</title> -<path fill="none" stroke="black" d="M83.72,-29.32C100.58,-19.8 122.56,-9.18 143.75,-4.3 167.57,1.19 175.02,1.56 198.75,-4.3 214.73,-8.24 231.03,-15.89 244.89,-23.68"/> -<polygon fill="black" stroke="black" points="242.81,-26.52 253.21,-28.57 246.36,-20.48 242.81,-26.52"/> -<text text-anchor="middle" x="171.25" y="-7.5" font-family="Times New Roman,serif" font-size="14.00">default</text> +<title>MemMerge->M</title> +<path fill="none" stroke="black" d="M173.11,-88.58C186.42,-93.14 201.5,-97.3 215.75,-99 240.02,-101.9 246.57,-102.57 270.75,-99 279.43,-97.72 288.44,-95.77 297.24,-93.5"/> +<polygon fill="black" stroke="black" points="298.08,-96.9 306.79,-90.87 296.22,-90.15 298.08,-96.9"/> +<text text-anchor="middle" x="243.25" y="-104.63" font-family="Times New Roman,serif" font-size="14.00">default</text> </g> -<!-- X->MemMerge --> +<!-- MemMerge->X --> <g id="edge4" class="edge"> -<title>X->MemMerge</title> -<path fill="none" stroke="blue" d="M198.98,-88.59C209.64,-83.32 222.23,-77.1 234.33,-71.11"/> -<polygon fill="blue" stroke="blue" points="235.56,-74.41 242.97,-66.85 232.45,-68.14 235.56,-74.41"/> -<text text-anchor="middle" x="220.12" y="-82.84" font-family="Times New Roman,serif" font-size="14.00">x</text> +<title>MemMerge->X</title> +<path fill="none" stroke="blue" d="M173.37,-72C183.42,-72 194.16,-72 204.1,-72"/> +<polygon fill="blue" stroke="blue" points="203.79,-75.5 213.79,-72 203.79,-68.5 203.79,-75.5"/> +<text text-anchor="middle" x="194.38" y="-75.2" font-family="Times New Roman,serif" font-size="14.00">x</text> </g> -<!-- Y->MemMerge --> +<!-- MemMerge->Y --> <g id="edge5" class="edge"> -<title>Y->MemMerge</title> -<path fill="none" stroke="green" d="M198.98,-47.8C208.35,-47.8 219.21,-47.8 229.93,-47.8"/> -<polygon fill="green" stroke="green" points="229.9,-51.3 239.9,-47.8 229.9,-44.3 229.9,-51.3"/> -<text text-anchor="middle" x="220.12" y="-51" font-family="Times New Roman,serif" font-size="14.00">y</text> +<title>MemMerge->Y</title> +<path fill="none" stroke="green" d="M170.29,-53.57C181.65,-47.95 194.12,-41.79 205.45,-36.19"/> +<polygon fill="green" stroke="green" points="206.69,-39.48 214.11,-31.91 203.59,-33.2 206.69,-39.48"/> +<text text-anchor="middle" x="194.38" y="-44.97" font-family="Times New Roman,serif" font-size="14.00">y</text> </g> <!-- Return --> <g id="node5" class="node"> <title>Return</title> -<polygon fill="none" stroke="black" points="414.5,-65.8 360.5,-65.8 360.5,-29.8 414.5,-29.8 414.5,-65.8"/> -<text text-anchor="middle" x="387.5" y="-42.75" font-family="Times New Roman,serif" font-size="14.00">Return</text> +<polygon fill="none" stroke="black" points="54,-90 0,-90 0,-54 54,-54 54,-90"/> +<text text-anchor="middle" x="27" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Return</text> </g> -<!-- MemMerge->Return --> +<!-- Return->MemMerge --> <g id="edge6" class="edge"> -<title>MemMerge->Return</title> -<path fill="none" stroke="black" d="M323.91,-47.8C332.09,-47.8 340.66,-47.8 348.75,-47.8"/> -<polygon fill="black" stroke="black" points="348.62,-51.3 358.62,-47.8 348.62,-44.3 348.62,-51.3"/> +<title>Return->MemMerge</title> +<path fill="none" stroke="black" d="M54.26,-72C61.97,-72 70.68,-72 79.39,-72"/> +<polygon fill="black" stroke="black" points="79.25,-75.5 89.25,-72 79.25,-68.5 79.25,-75.5"/> </g> </g> </svg> diff --git a/chapter10b/docs/example2b.gv b/chapter10b/docs/example2b.gv index 7ef10ec8..17b35910 100644 --- a/chapter10b/docs/example2b.gv +++ b/chapter10b/docs/example2b.gv @@ -3,8 +3,8 @@ digraph Memory { node [shape=box]; P [label="MemPhi(x)"]; B [label="BulkMemPhi(All except x)"]; - Left -> P [label="slice x",color=blue]; Right -> P [label="slice x",color=blue]; - Left -> B; Right -> B; - Region -> P [style=dashed]; Region -> B [style=dashed]; - P -> MemMerge [label="x",color=blue]; B -> MemMerge [label="default"]; + P -> Left [label="slice x",color=blue]; P -> Right [label="slice x",color=blue]; + B -> Left; B -> Right; + P -> Region [style=dashed]; B -> Region [style=dashed]; + MemMerge -> P [label="x",color=blue]; MemMerge -> B [label="default"]; } diff --git a/chapter10b/docs/example2b.svg b/chapter10b/docs/example2b.svg index fae583e6..67d74ea8 100644 --- a/chapter10b/docs/example2b.svg +++ b/chapter10b/docs/example2b.svg @@ -4,98 +4,98 @@ <!-- Generated by graphviz version 12.2.0 (20241103.1931) --> <!-- Title: Memory Pages: 1 --> -<svg width="456pt" height="163pt" - viewBox="0.00 0.00 455.75 163.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 159)"> +<svg width="456pt" height="170pt" + viewBox="0.00 0.00 455.75 170.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 166)"> <title>Memory</title> -<polygon fill="white" stroke="none" points="-4,4 -4,-159 451.75,-159 451.75,4 -4,4"/> +<polygon fill="white" stroke="none" points="-4,4 -4,-166 451.75,-166 451.75,4 -4,4"/> <!-- P --> <g id="node1" class="node"> <title>P</title> -<polygon fill="none" stroke="black" points="249.12,-54 169.38,-54 169.38,-18 249.12,-18 249.12,-54"/> -<text text-anchor="middle" x="209.25" y="-30.95" font-family="Times New Roman,serif" font-size="14.00">MemPhi(x)</text> -</g> -<!-- MemMerge --> -<g id="node6" class="node"> -<title>MemMerge</title> -<polygon fill="none" stroke="black" points="447.75,-81 365.75,-81 365.75,-45 447.75,-45 447.75,-81"/> -<text text-anchor="middle" x="406.75" y="-57.95" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text> -</g> -<!-- P->MemMerge --> -<g id="edge7" class="edge"> -<title>P->MemMerge</title> -<path fill="none" stroke="blue" d="M249.6,-37.43C277.23,-38.89 314.95,-41.79 347.75,-47.5 349.91,-47.88 352.1,-48.29 354.31,-48.74"/> -<polygon fill="blue" stroke="blue" points="353.39,-52.13 363.91,-50.9 354.92,-45.3 353.39,-52.13"/> -<text text-anchor="middle" x="329" y="-50.7" font-family="Times New Roman,serif" font-size="14.00">x</text> -</g> -<!-- B --> -<g id="node2" class="node"> -<title>B</title> -<polygon fill="none" stroke="black" points="292.25,-109 126.25,-109 126.25,-73 292.25,-73 292.25,-109"/> -<text text-anchor="middle" x="209.25" y="-85.95" font-family="Times New Roman,serif" font-size="14.00">BulkMemPhi(All except x)</text> -</g> -<!-- B->MemMerge --> -<g id="edge8" class="edge"> -<title>B->MemMerge</title> -<path fill="none" stroke="black" d="M292.59,-79.21C313.42,-76.22 335.2,-73.1 354.03,-70.41"/> -<polygon fill="black" stroke="black" points="354.44,-73.88 363.84,-69 353.45,-66.96 354.44,-73.88"/> -<text text-anchor="middle" x="329" y="-79.36" font-family="Times New Roman,serif" font-size="14.00">default</text> +<polygon fill="none" stroke="black" points="278.38,-67 198.62,-67 198.62,-31 278.38,-31 278.38,-67"/> +<text text-anchor="middle" x="238.5" y="-43.95" font-family="Times New Roman,serif" font-size="14.00">MemPhi(x)</text> </g> <!-- Left --> <g id="node3" class="node"> <title>Left</title> -<polygon fill="none" stroke="black" points="54.5,-97 0.5,-97 0.5,-61 54.5,-61 54.5,-97"/> -<text text-anchor="middle" x="27.5" y="-73.95" font-family="Times New Roman,serif" font-size="14.00">Left</text> +<polygon fill="none" stroke="black" points="447.25,-102 393.25,-102 393.25,-66 447.25,-66 447.25,-102"/> +<text text-anchor="middle" x="420.25" y="-78.95" font-family="Times New Roman,serif" font-size="14.00">Left</text> </g> -<!-- Left->P --> +<!-- P->Left --> <g id="edge1" class="edge"> -<title>Left->P</title> -<path fill="none" stroke="blue" d="M54.57,-67.8C60.55,-65.5 66.94,-63.25 73,-61.5 100.58,-53.55 132.05,-47.45 157.69,-43.21"/> -<polygon fill="blue" stroke="blue" points="158.21,-46.67 167.53,-41.63 157.1,-39.76 158.21,-46.67"/> -<text text-anchor="middle" x="90.62" y="-64.7" font-family="Times New Roman,serif" font-size="14.00">slice x</text> -</g> -<!-- Left->B --> -<g id="edge3" class="edge"> -<title>Left->B</title> -<path fill="none" stroke="black" d="M54.64,-80.74C70.8,-81.82 92.62,-83.28 114.74,-84.76"/> -<polygon fill="black" stroke="black" points="114.23,-88.23 124.44,-85.4 114.69,-81.25 114.23,-88.23"/> +<title>P->Left</title> +<path fill="none" stroke="blue" d="M278.66,-45.11C306.2,-43.68 343.56,-44.4 374.75,-54.5 378.99,-55.87 383.21,-57.77 387.27,-59.95"/> +<polygon fill="blue" stroke="blue" points="385.27,-62.84 395.64,-65.02 388.9,-56.85 385.27,-62.84"/> +<text text-anchor="middle" x="357.12" y="-57.7" font-family="Times New Roman,serif" font-size="14.00">slice x</text> </g> <!-- Right --> <g id="node4" class="node"> <title>Right</title> -<polygon fill="none" stroke="black" points="54.5,-155 0.5,-155 0.5,-119 54.5,-119 54.5,-155"/> -<text text-anchor="middle" x="27.5" y="-131.95" font-family="Times New Roman,serif" font-size="14.00">Right</text> +<polygon fill="none" stroke="black" points="447.25,-162 393.25,-162 393.25,-126 447.25,-126 447.25,-162"/> +<text text-anchor="middle" x="420.25" y="-138.95" font-family="Times New Roman,serif" font-size="14.00">Right</text> </g> -<!-- Right->P --> +<!-- P->Right --> <g id="edge2" class="edge"> -<title>Right->P</title> -<path fill="none" stroke="blue" d="M54.87,-120.55C70.84,-110.17 91.32,-96.1 108.25,-82 116.94,-74.76 116.65,-69.98 126.25,-64 136.02,-57.91 147.27,-52.97 158.25,-49.02"/> -<polygon fill="blue" stroke="blue" points="159.26,-52.37 167.63,-45.88 157.04,-45.73 159.26,-52.37"/> -<text text-anchor="middle" x="90.62" y="-110.72" font-family="Times New Roman,serif" font-size="14.00">slice x</text> -</g> -<!-- Right->B --> -<g id="edge4" class="edge"> -<title>Right->B</title> -<path fill="none" stroke="black" d="M54.7,-143.04C70.42,-145.67 90.72,-147.29 108.25,-143 130.7,-137.51 153.73,-126.02 172.01,-115.23"/> -<polygon fill="black" stroke="black" points="173.65,-118.33 180.36,-110.14 170,-112.35 173.65,-118.33"/> +<title>P->Right</title> +<path fill="none" stroke="blue" d="M278.82,-64.2C306.43,-75.51 343.81,-92.12 374.75,-110.5 379.08,-113.07 383.48,-115.98 387.76,-118.98"/> +<polygon fill="blue" stroke="blue" points="385.46,-121.64 395.6,-124.72 389.6,-115.99 385.46,-121.64"/> +<text text-anchor="middle" x="357.12" y="-113.7" font-family="Times New Roman,serif" font-size="14.00">slice x</text> </g> <!-- Region --> <g id="node5" class="node"> <title>Region</title> -<polygon fill="none" stroke="black" points="55,-36 0,-36 0,0 55,0 55,-36"/> -<text text-anchor="middle" x="27.5" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Region</text> +<polygon fill="none" stroke="black" points="447.75,-36 392.75,-36 392.75,0 447.75,0 447.75,-36"/> +<text text-anchor="middle" x="420.25" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Region</text> </g> -<!-- Region->P --> +<!-- P->Region --> <g id="edge5" class="edge"> -<title>Region->P</title> -<path fill="none" stroke="black" stroke-dasharray="5,2" d="M55.32,-16.6C61.15,-16.35 67.28,-16.13 73,-16 88.66,-15.65 92.66,-14.46 108.25,-16 124.55,-17.61 142.14,-20.68 157.95,-23.93"/> -<polygon fill="black" stroke="black" points="157.11,-27.33 167.62,-25.99 158.57,-20.48 157.11,-27.33"/> +<title>P->Region</title> +<path fill="none" stroke="black" stroke-dasharray="5,2" d="M275.99,-30.51C294.51,-22.15 317.65,-13.21 339.5,-9 353.05,-6.39 368.04,-7.15 381.34,-9.05"/> +<polygon fill="black" stroke="black" points="380.57,-12.47 391.02,-10.71 381.75,-5.57 380.57,-12.47"/> </g> -<!-- Region->B --> +<!-- B --> +<g id="node2" class="node"> +<title>B</title> +<polygon fill="none" stroke="black" points="321.5,-132 155.5,-132 155.5,-96 321.5,-96 321.5,-132"/> +<text text-anchor="middle" x="238.5" y="-108.95" font-family="Times New Roman,serif" font-size="14.00">BulkMemPhi(All except x)</text> +</g> +<!-- B->Left --> +<g id="edge3" class="edge"> +<title>B->Left</title> +<path fill="none" stroke="black" d="M321.72,-119C339.48,-118.2 357.95,-115.9 374.75,-111 377.84,-110.1 380.93,-108.93 383.97,-107.57"/> +<polygon fill="black" stroke="black" points="385.33,-110.81 392.62,-103.12 382.13,-104.58 385.33,-110.81"/> +</g> +<!-- B->Right --> +<g id="edge4" class="edge"> +<title>B->Right</title> +<path fill="none" stroke="black" d="M321.75,-127.73C342.83,-131.25 364.47,-134.86 382,-137.78"/> +<polygon fill="black" stroke="black" points="380.94,-141.15 391.38,-139.35 382.09,-134.25 380.94,-141.15"/> +</g> +<!-- B->Region --> <g id="edge6" class="edge"> -<title>Region->B</title> -<path fill="none" stroke="black" stroke-dasharray="5,2" d="M48.17,-36.19C55.53,-42.23 64.24,-48.55 73,-53 86.08,-59.65 100.48,-65.27 114.87,-69.98"/> -<polygon fill="black" stroke="black" points="113.8,-73.32 124.39,-72.96 115.89,-66.63 113.8,-73.32"/> +<title>B->Region</title> +<path fill="none" stroke="black" stroke-dasharray="5,2" d="M280.68,-95.69C293.83,-89.64 308.37,-82.73 321.5,-76 345.68,-63.61 351.41,-59.9 374.75,-46 377.38,-44.43 380.08,-42.8 382.8,-41.14"/> +<polygon fill="black" stroke="black" points="384.61,-44.13 391.27,-35.89 380.92,-38.18 384.61,-44.13"/> +</g> +<!-- MemMerge --> +<g id="node6" class="node"> +<title>MemMerge</title> +<polygon fill="none" stroke="black" points="82,-94 0,-94 0,-58 82,-58 82,-94"/> +<text text-anchor="middle" x="41" y="-70.95" font-family="Times New Roman,serif" font-size="14.00">MemMerge</text> +</g> +<!-- MemMerge->P --> +<g id="edge7" class="edge"> +<title>MemMerge->P</title> +<path fill="none" stroke="blue" d="M82.36,-64.23C88.24,-62.81 94.25,-61.5 100,-60.5 128.58,-55.53 160.88,-52.69 186.99,-51.07"/> +<polygon fill="blue" stroke="blue" points="186.85,-54.59 196.64,-50.52 186.45,-47.6 186.85,-54.59"/> +<text text-anchor="middle" x="118.75" y="-63.7" font-family="Times New Roman,serif" font-size="14.00">x</text> +</g> +<!-- MemMerge->B --> +<g id="edge8" class="edge"> +<title>MemMerge->B</title> +<path fill="none" stroke="black" d="M82.03,-83.78C100.1,-87.29 122.25,-91.6 144.12,-95.85"/> +<polygon fill="black" stroke="black" points="143.19,-99.23 153.67,-97.71 144.52,-92.36 143.19,-99.23"/> +<text text-anchor="middle" x="118.75" y="-97.06" font-family="Times New Roman,serif" font-size="14.00">default</text> </g> </g> </svg> diff --git a/chapter10b/docs/example2c.gv b/chapter10b/docs/example2c.gv index fb827b3e..7a0562ee 100644 --- a/chapter10b/docs/example2c.gv +++ b/chapter10b/docs/example2c.gv @@ -4,7 +4,7 @@ digraph Memory { M [label="Prior x memory"]; L [label="Load p.x"]; S [label="Store p.x"]; - M -> L [color=blue]; M -> S [color=blue]; - L -> S [style=dashed,label="execute load first"]; + L -> M [color=blue]; S -> M [color=blue]; + S -> L [style=dashed,label="execute load first"]; Y [label="Store p.y: independent"]; } diff --git a/chapter10b/docs/example2c.svg b/chapter10b/docs/example2c.svg index d8e5cf96..1d51ccca 100644 --- a/chapter10b/docs/example2c.svg +++ b/chapter10b/docs/example2c.svg @@ -4,53 +4,53 @@ <!-- Generated by graphviz version 12.2.0 (20241103.1931) --> <!-- Title: Memory Pages: 1 --> -<svg width="444pt" height="98pt" - viewBox="0.00 0.00 444.00 98.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 94)"> +<svg width="482pt" height="121pt" + viewBox="0.00 0.00 482.25 121.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 117)"> <title>Memory</title> -<polygon fill="white" stroke="none" points="-4,4 -4,-94 440,-94 440,4 -4,4"/> +<polygon fill="white" stroke="none" points="-4,4 -4,-117 478.25,-117 478.25,4 -4,4"/> <!-- M --> <g id="node1" class="node"> <title>M</title> -<polygon fill="none" stroke="black" points="121.38,-36 17.62,-36 17.62,0 121.38,0 121.38,-36"/> -<text text-anchor="middle" x="69.5" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Prior x memory</text> +<polygon fill="none" stroke="black" points="474.25,-59 370.5,-59 370.5,-23 474.25,-23 474.25,-59"/> +<text text-anchor="middle" x="422.38" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Prior x memory</text> </g> <!-- L --> <g id="node2" class="node"> <title>L</title> -<polygon fill="none" stroke="black" points="240.75,-70 176,-70 176,-34 240.75,-34 240.75,-70"/> -<text text-anchor="middle" x="208.38" y="-46.95" font-family="Times New Roman,serif" font-size="14.00">Load p.x</text> +<polygon fill="none" stroke="black" points="333.5,-36 268.75,-36 268.75,0 333.5,0 333.5,-36"/> +<text text-anchor="middle" x="301.12" y="-12.95" font-family="Times New Roman,serif" font-size="14.00">Load p.x</text> </g> -<!-- M->L --> +<!-- L->M --> <g id="edge1" class="edge"> -<title>M->L</title> -<path fill="none" stroke="blue" d="M121.86,-30.76C135.96,-34.26 151.1,-38.02 164.66,-41.39"/> -<polygon fill="blue" stroke="blue" points="163.61,-44.73 174.16,-43.75 165.29,-37.94 163.61,-44.73"/> +<title>L->M</title> +<path fill="none" stroke="blue" d="M333.77,-24.1C341.63,-25.62 350.33,-27.3 359.1,-28.99"/> +<polygon fill="blue" stroke="blue" points="358.23,-32.39 368.71,-30.84 359.56,-25.51 358.23,-32.39"/> </g> <!-- S --> <g id="node3" class="node"> <title>S</title> -<polygon fill="none" stroke="black" points="436,-40 370.5,-40 370.5,-4 436,-4 436,-40"/> -<text text-anchor="middle" x="403.25" y="-16.95" font-family="Times New Roman,serif" font-size="14.00">Store p.x</text> +<polygon fill="none" stroke="black" points="102.25,-59 36.75,-59 36.75,-23 102.25,-23 102.25,-59"/> +<text text-anchor="middle" x="69.5" y="-35.95" font-family="Times New Roman,serif" font-size="14.00">Store p.x</text> </g> -<!-- M->S --> +<!-- S->M --> <g id="edge2" class="edge"> -<title>M->S</title> -<path fill="none" stroke="blue" d="M121.61,-18.62C186.66,-19.4 297.92,-20.74 358.98,-21.48"/> -<polygon fill="blue" stroke="blue" points="358.58,-24.97 368.62,-21.59 358.66,-17.97 358.58,-24.97"/> +<title>S->M</title> +<path fill="none" stroke="blue" d="M102.48,-45.13C118.77,-47.03 138.91,-49.06 157,-50 226.01,-53.58 305.22,-49.84 358.81,-46.15"/> +<polygon fill="blue" stroke="blue" points="358.94,-49.65 368.67,-45.45 358.44,-42.67 358.94,-49.65"/> </g> -<!-- L->S --> +<!-- S->L --> <g id="edge3" class="edge"> -<title>L->S</title> -<path fill="none" stroke="black" stroke-dasharray="5,2" d="M241.22,-47.05C273.37,-42.05 323.25,-34.29 358.97,-28.73"/> -<polygon fill="black" stroke="black" points="359.19,-32.24 368.54,-27.24 358.12,-25.32 359.19,-32.24"/> -<text text-anchor="middle" x="305.62" y="-47.15" font-family="Times New Roman,serif" font-size="14.00">execute load first</text> +<title>S->L</title> +<path fill="none" stroke="black" stroke-dasharray="5,2" d="M102.43,-37.8C142.7,-33.77 212.1,-26.82 257.04,-22.32"/> +<polygon fill="black" stroke="black" points="257.36,-25.8 266.96,-21.32 256.66,-18.84 257.36,-25.8"/> +<text text-anchor="middle" x="203.88" y="-35.44" font-family="Times New Roman,serif" font-size="14.00">execute load first</text> </g> <!-- Y --> <g id="node4" class="node"> <title>Y</title> -<polygon fill="none" stroke="black" points="139,-90 0,-90 0,-54 139,-54 139,-90"/> -<text text-anchor="middle" x="69.5" y="-66.95" font-family="Times New Roman,serif" font-size="14.00">Store p.y: independent</text> +<polygon fill="none" stroke="black" points="139,-113 0,-113 0,-77 139,-77 139,-113"/> +<text text-anchor="middle" x="69.5" y="-89.95" font-family="Times New Roman,serif" font-size="14.00">Store p.y: independent</text> </g> </g> </svg> |
