diff options
| author | Dibyendu Majumdar <dibyendumajumdar@users.noreply.github.com> | 2023-11-11 23:17:22 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-11 23:17:22 +0000 |
| commit | 1a9cac97df063af82516ca35bde34fde62d24c56 (patch) | |
| tree | 7bab31bac1cf890466b3f0884a0f59c784cc0027 /chapter06/docs/06-graph3-nonconst.svg | |
| parent | 077b25007cf8af3c3673d017625ea255bda87620 (diff) | |
| download | Simple-1a9cac97df063af82516ca35bde34fde62d24c56.tar.gz Simple-1a9cac97df063af82516ca35bde34fde62d24c56.zip | |
Chapter 6 (#38)
* #37 Create chapter 6 skeleton
* #37 Revise type system - TOP, BOTTOM, CONTROL are now directly implemented in Type, XCONTROL is a new type and that's implemented directly too.
We have a _type field that is like an enum.
* #37 Revise Type.meet() - this is now final.
Subclasses can override xmeet() which is protected but
now handles simple types in Type itself.
* #37 Basic test for peephole of CFG
* #37 Revise compute of if
* #37 Revise compute of if
* #37 WIP peephole of If
* #37 WIP peephole of If
* #37 WIP peephole of If
* #37 WIP peephole of If
* #37 WIP peephole of If
* #37 WIP fix the chars inserted by IntelliJ
* #37 WIP Fix compute type in IfNode
* #37 WIP Null check region inputs
* #37 WIP Fix where we choose great grand parent instead of grand parent
Add new test
* #37 WIP More fixes and tests
* #37 WIP Some minor adjustments
* Cleanup folding dead IF tests
Remove isDeadCtrl & just test for the constant.
Remove DEAD_CTRL, doesn't properly reset between tests.
Move keep/unkeep to Node.
PhiNode has a proper compute() call.
ProjNode ideal is a lot simpler.
Region doesn't ever get a null.
Move the mergeScopes Region peep till after all Phis are added.
Type TOP and XCONTROL count as constants.
TypeTuple gets a toString
* #37 WIP Upate README
* #37 WIP Region node should check if one of its inputs is a region that needs to be peepholed
* #37 WIP If node should check if its ctrl input is a Region that has only 1 live input so can be peepholed
* #37 WIP Further update to README to make the peephole logic clearer. Also discuss the relationship between Region and Phi nodes
* Region removes dead input paths
Remove region-folding in Return, If.
Add a Makefile.
Reformat triple-quote lines to be emacs-friendly.
* StopNode idealize
Return type sharpens to include control input.
* Remove !=, >=, >; use Not and <, <=, ==
Fix bug mixing rotating different ops.
Generalize Add fold constants; apply to Mul, EQ.
Fix Div.copy
* Fix bug rotating e.g. < or <=
Peep is only valid for associative ops
* #37 WIP Doc updates
* Work over the Ch6 Readme
Major issue: Region inputs align 1-to-1 with Phi inputs, but a Region can have zero to many Phis. When we lose a Region input (dead path), we need to lose the same inputs to each Phi - but we don't lose the Phis themselves, unless we're folding away down to the last live input.
* Update chapter06/README.md
Co-authored-by: Yichen Yan <oraluben@outlook.com>
* Update chapter06/README.md
Co-authored-by: Yichen Yan <oraluben@outlook.com>
* #37 Backport type system changes to chapter 2
* #37 Backport type system changes to chapter 3
* #37 Backport type system changes to chapter 4
* #37 Backport type system changes to chapter 5
* #37 Merge chapter 5 updates from main.
Remove language grammar module as we describe the grammar incrementally in each chapter.
* #37 Chapter 6 doc updates - added visuals to show effects of CFG peephole
* #37 Sync some updates to chapter 2
* #37 Sync some updates to chapter 3
* #37 Sync some updates to chapter 4
---------
Co-authored-by: Cliff Click <cliffc@acm.org>
Co-authored-by: Yichen Yan <oraluben@outlook.com>
Diffstat (limited to 'chapter06/docs/06-graph3-nonconst.svg')
| -rw-r--r-- | chapter06/docs/06-graph3-nonconst.svg | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/chapter06/docs/06-graph3-nonconst.svg b/chapter06/docs/06-graph3-nonconst.svg new file mode 100644 index 00000000..dee852e4 --- /dev/null +++ b/chapter06/docs/06-graph3-nonconst.svg @@ -0,0 +1,290 @@ +<?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: chapter06 Pages: 1 --> +<svg width="414pt" height="664pt" + viewBox="0.00 0.00 414.00 664.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 660)"> +<title>chapter06</title> +<polygon fill="white" stroke="transparent" points="-4,4 -4,-660 410,-660 410,4 -4,4"/> +<g id="clust1" class="cluster"> +<title>cluster_Nodes</title> +<polygon fill="none" stroke="black" points="8,-8 8,-648 398,-648 398,-8 8,-8"/> +</g> +<!-- Start2 --> +<g id="node1" class="node"> +<title>Start2</title> +<polygon fill="yellow" stroke="transparent" points="274,-611 274,-636 355,-636 355,-611 274,-611"/> +<polygon fill="none" stroke="black" points="274,-611 274,-636 355,-636 355,-611 274,-611"/> +<text text-anchor="start" x="296" y="-619.8" font-family="Times,serif" font-size="14.00">Start</text> +<polygon fill="none" stroke="black" points="274,-580 274,-611 355,-611 355,-580 274,-580"/> +<polygon fill="yellow" stroke="transparent" points="279,-585 279,-606 319,-606 319,-585 279,-585"/> +<polygon fill="none" stroke="black" points="279,-585 279,-606 319,-606 319,-585 279,-585"/> +<text text-anchor="start" x="282" y="-591.8" font-family="Times,serif" font-size="14.00">$ctrl</text> +<polygon fill="none" stroke="black" points="319,-585 319,-606 350,-606 350,-585 319,-585"/> +<text text-anchor="start" x="322" y="-591.8" font-family="Times,serif" font-size="14.00">arg</text> +</g> +<!-- Stop3 --> +<g id="node2" class="node"> +<title>Stop3</title> +<polygon fill="yellow" stroke="black" points="299,-52 245,-52 245,-16 299,-16 299,-52"/> +<text text-anchor="middle" x="272" y="-30.3" font-family="Times,serif" font-size="14.00">Stop</text> +</g> +<!-- Return25 --> +<g id="node16" class="node"> +<title>Return25</title> +<polygon fill="yellow" stroke="black" points="305,-124 239,-124 239,-88 305,-88 305,-124"/> +<text text-anchor="middle" x="272" y="-102.3" font-family="Times,serif" font-size="14.00">Return</text> +</g> +<!-- Stop3->Return25 --> +<g id="edge1" class="edge"> +<title>Stop3->Return25</title> +<path fill="none" stroke="red" d="M272,-52.3C272,-60.02 272,-69.29 272,-77.89"/> +<polygon fill="red" stroke="red" points="268.5,-77.9 272,-87.9 275.5,-77.9 268.5,-77.9"/> +<text text-anchor="middle" x="269" y="-54.9" font-family="Helvetica,sans-Serif" font-size="8.00">0</text> +</g> +<!-- Con_6 --> +<g id="node3" class="node"> +<title>Con_6</title> +<ellipse fill="none" stroke="black" cx="259" cy="-322" rx="27" ry="18"/> +<text text-anchor="middle" x="259" y="-318.3" font-family="Times,serif" font-size="14.00">#0</text> +</g> +<!-- Con_7 --> +<g id="node4" class="node"> +<title>Con_7</title> +<ellipse fill="none" stroke="black" cx="115" cy="-322" rx="27" ry="18"/> +<text text-anchor="middle" x="115" y="-318.3" font-family="Times,serif" font-size="14.00">#1</text> +</g> +<!-- If8 --> +<g id="node5" class="node"> +<title>If8</title> +<polygon fill="yellow" stroke="transparent" points="288,-511 288,-536 382,-536 382,-511 288,-511"/> +<polygon fill="none" stroke="black" points="288,-511 288,-536 382,-536 382,-511 288,-511"/> +<text text-anchor="start" x="329.5" y="-519.8" font-family="Times,serif" font-size="14.00">If</text> +<polygon fill="none" stroke="black" points="288,-480 288,-511 382,-511 382,-480 288,-480"/> +<polygon fill="yellow" stroke="transparent" points="293,-485 293,-506 333,-506 333,-485 293,-485"/> +<polygon fill="none" stroke="black" points="293,-485 293,-506 333,-506 333,-485 293,-485"/> +<text text-anchor="start" x="296" y="-491.8" font-family="Times,serif" font-size="14.00">True</text> +<polygon fill="yellow" stroke="transparent" points="333,-485 333,-506 377,-506 377,-485 333,-485"/> +<polygon fill="none" stroke="black" points="333,-485 333,-506 377,-506 377,-485 333,-485"/> +<text text-anchor="start" x="336" y="-491.8" font-family="Times,serif" font-size="14.00">False</text> +</g> +<!-- If8->Start2 --> +<g id="edge2" class="edge"> +<title>If8->Start2:p0</title> +<path fill="none" stroke="red" d="M312.41,-540.3C306.75,-550.38 301.75,-562.04 299.83,-573.96"/> +<polygon fill="red" stroke="red" points="296.34,-573.75 299,-584 303.31,-574.32 296.34,-573.75"/> +<text text-anchor="middle" x="309.41" y="-542.9" font-family="Helvetica,sans-Serif" font-size="8.00">0</text> +</g> +<!-- If8->Start2 --> +<g id="edge3" class="edge"> +<title>If8->Start2:p1</title> +<path fill="none" stroke="black" d="M335,-540.02C335,-550.47 335,-562.42 335,-573.98"/> +<polygon fill="black" stroke="black" points="331.5,-574 335,-584 338.5,-574 331.5,-574"/> +<text text-anchor="middle" x="332" y="-542.62" font-family="Helvetica,sans-Serif" font-size="8.00">1</text> +</g> +<!-- Con_12 --> +<g id="node6" class="node"> +<title>Con_12</title> +<ellipse fill="none" stroke="black" cx="187" cy="-322" rx="27" ry="18"/> +<text text-anchor="middle" x="187" y="-318.3" font-family="Times,serif" font-size="14.00">#2</text> +</g> +<!-- If13 --> +<g id="node7" class="node"> +<title>If13</title> +<polygon fill="yellow" stroke="transparent" points="267,-411 267,-436 361,-436 361,-411 267,-411"/> +<polygon fill="none" stroke="black" points="267,-411 267,-436 361,-436 361,-411 267,-411"/> +<text text-anchor="start" x="308.5" y="-419.8" font-family="Times,serif" font-size="14.00">If</text> +<polygon fill="none" stroke="black" points="267,-380 267,-411 361,-411 361,-380 267,-380"/> +<polygon fill="yellow" stroke="transparent" points="272,-385 272,-406 312,-406 312,-385 272,-385"/> +<polygon fill="none" stroke="black" points="272,-385 272,-406 312,-406 312,-385 272,-385"/> +<text text-anchor="start" x="275" y="-391.8" font-family="Times,serif" font-size="14.00">True</text> +<polygon fill="yellow" stroke="transparent" points="312,-385 312,-406 356,-406 356,-385 312,-385"/> +<polygon fill="none" stroke="black" points="312,-385 312,-406 356,-406 356,-385 312,-385"/> +<text text-anchor="start" x="315" y="-391.8" font-family="Times,serif" font-size="14.00">False</text> +</g> +<!-- If13->Start2 --> +<g id="edge5" class="edge"> +<title>If13->Start2:p1</title> +<path fill="none" stroke="black" d="M288.75,-440.22C281.57,-450.93 274.7,-463.4 271,-476 262.99,-503.29 257.76,-514.83 271,-540 285.19,-566.97 324.2,-553.71 333.15,-573.98"/> +<polygon fill="black" stroke="black" points="329.75,-574.8 335,-584 336.63,-573.53 329.75,-574.8"/> +<text text-anchor="middle" x="285.75" y="-442.82" font-family="Helvetica,sans-Serif" font-size="8.00">1</text> +</g> +<!-- If13->If8 --> +<g id="edge4" class="edge"> +<title>If13->If8:p0</title> +<path fill="none" stroke="red" d="M313.4,-440.02C313.24,-450.46 313.09,-462.42 313.03,-473.98"/> +<polygon fill="red" stroke="red" points="309.53,-473.99 313,-484 316.53,-474.01 309.53,-473.99"/> +<text text-anchor="middle" x="310.4" y="-442.62" font-family="Helvetica,sans-Serif" font-size="8.00">0</text> +</g> +<!-- Con_17 --> +<g id="node8" class="node"> +<title>Con_17</title> +<ellipse fill="none" stroke="black" cx="43" cy="-408" rx="27" ry="18"/> +<text text-anchor="middle" x="43" y="-404.3" font-family="Times,serif" font-size="14.00">#2</text> +</g> +<!-- Con_18 --> +<g id="node9" class="node"> +<title>Con_18</title> +<ellipse fill="none" stroke="black" cx="115" cy="-408" rx="27" ry="18"/> +<text text-anchor="middle" x="115" y="-404.3" font-family="Times,serif" font-size="14.00">#3</text> +</g> +<!-- Region19 --> +<g id="node10" class="node"> +<title>Region19</title> +<polygon fill="yellow" stroke="black" points="370,-340 304,-340 304,-304 370,-304 370,-340"/> +<text text-anchor="middle" x="337" y="-318.3" font-family="Times,serif" font-size="14.00">Region</text> +</g> +<!-- Region19->If13 --> +<g id="edge6" class="edge"> +<title>Region19->If13:p0</title> +<path fill="none" stroke="red" d="M315.29,-340.1C306.12,-348.94 296.78,-360.62 293.36,-373.72"/> +<polygon fill="red" stroke="red" points="289.84,-373.63 292,-384 296.78,-374.54 289.84,-373.63"/> +<text text-anchor="middle" x="312.29" y="-342.7" font-family="Helvetica,sans-Serif" font-size="8.00">1</text> +</g> +<!-- Region19->If13 --> +<g id="edge7" class="edge"> +<title>Region19->If13:p1</title> +<path fill="none" stroke="red" d="M335.71,-340.08C335.08,-349.53 334.4,-361.76 334.13,-373.68"/> +<polygon fill="red" stroke="red" points="330.62,-373.96 334,-384 337.62,-374.04 330.62,-373.96"/> +<text text-anchor="middle" x="332.71" y="-342.68" font-family="Helvetica,sans-Serif" font-size="8.00">2</text> +</g> +<!-- Phi_b20 --> +<g id="node11" class="node"> +<title>Phi_b20</title> +<ellipse fill="lightyellow" stroke="black" cx="43" cy="-322" rx="27.1" ry="18"/> +<text text-anchor="middle" x="43" y="-318.3" font-family="Times,serif" font-size="14.00">φ_b</text> +</g> +<!-- Phi_b20->Con_17 --> +<g id="edge9" class="edge"> +<title>Phi_b20->Con_17</title> +<path fill="none" stroke="black" d="M43,-340.4C43,-351.74 43,-366.77 43,-379.68"/> +<polygon fill="black" stroke="black" points="39.5,-379.9 43,-389.9 46.5,-379.9 39.5,-379.9"/> +<text text-anchor="middle" x="40" y="-343" font-family="Helvetica,sans-Serif" font-size="8.00">1</text> +</g> +<!-- Phi_b20->Con_18 --> +<g id="edge10" class="edge"> +<title>Phi_b20->Con_18</title> +<path fill="none" stroke="black" d="M55.87,-338.02C66.93,-350.92 83.04,-369.71 95.65,-384.42"/> +<polygon fill="black" stroke="black" points="93.07,-386.8 102.24,-392.11 98.39,-382.24 93.07,-386.8"/> +<text text-anchor="middle" x="52.87" y="-340.62" font-family="Helvetica,sans-Serif" font-size="8.00">2</text> +</g> +<!-- Phi_b20->Region19 --> +<g id="edge8" class="edge"> +<title>Phi_b20->Region19</title> +<path fill="none" stroke="black" stroke-dasharray="1,5" d="M57.22,-306.43C65.37,-298.68 76.29,-290.11 88,-286 129.52,-271.44 244.06,-272.69 286,-286 293.99,-288.54 301.81,-292.83 308.83,-297.58"/> +<polygon fill="black" stroke="black" points="307.11,-300.66 317.24,-303.75 311.25,-295.01 307.11,-300.66"/> +<text text-anchor="middle" x="54.22" y="-300.03" font-family="Helvetica,sans-Serif" font-size="8.00">0</text> +</g> +<!-- Region21 --> +<g id="node12" class="node"> +<title>Region21</title> +<polygon fill="yellow" stroke="black" points="352,-268 286,-268 286,-232 352,-232 352,-268"/> +<text text-anchor="middle" x="319" y="-246.3" font-family="Times,serif" font-size="14.00">Region</text> +</g> +<!-- Region21->If8 --> +<g id="edge12" class="edge"> +<title>Region21->If8:p1</title> +<path fill="none" stroke="red" d="M347.26,-268.03C359.43,-277.04 372.37,-289.3 379,-304 385.58,-318.6 394.79,-373.07 378,-440 373.59,-457.56 360.94,-461.07 356.53,-473.94"/> +<polygon fill="red" stroke="red" points="353.05,-473.59 355,-484 359.97,-474.64 353.05,-473.59"/> +<text text-anchor="middle" x="344.26" y="-270.63" font-family="Helvetica,sans-Serif" font-size="8.00">2</text> +</g> +<!-- Region21->Region19 --> +<g id="edge11" class="edge"> +<title>Region21->Region19</title> +<path fill="none" stroke="red" d="M323.45,-268.3C325.45,-276.1 327.87,-285.49 330.1,-294.17"/> +<polygon fill="red" stroke="red" points="326.72,-295.08 332.6,-303.9 333.5,-293.34 326.72,-295.08"/> +<text text-anchor="middle" x="320.45" y="-270.9" font-family="Helvetica,sans-Serif" font-size="8.00">1</text> +</g> +<!-- Phi_a22 --> +<g id="node13" class="node"> +<title>Phi_a22</title> +<ellipse fill="lightyellow" stroke="black" cx="241" cy="-250" rx="27" ry="18"/> +<text text-anchor="middle" x="241" y="-246.3" font-family="Times,serif" font-size="14.00">φ_a</text> +</g> +<!-- Phi_a22->Con_6 --> +<g id="edge15" class="edge"> +<title>Phi_a22->Con_6</title> +<path fill="none" stroke="black" d="M245.36,-267.95C247.39,-275.86 249.86,-285.46 252.14,-294.31"/> +<polygon fill="black" stroke="black" points="248.8,-295.4 254.68,-304.21 255.58,-293.65 248.8,-295.4"/> +<text text-anchor="middle" x="242.36" y="-270.55" font-family="Helvetica,sans-Serif" font-size="8.00">2</text> +</g> +<!-- Phi_a22->Con_12 --> +<g id="edge14" class="edge"> +<title>Phi_a22->Con_12</title> +<path fill="none" stroke="black" d="M229.02,-266.54C222.02,-275.6 213.06,-287.21 205.21,-297.39"/> +<polygon fill="black" stroke="black" points="202.29,-295.45 198.95,-305.51 207.83,-299.73 202.29,-295.45"/> +<text text-anchor="middle" x="226.02" y="-269.14" font-family="Helvetica,sans-Serif" font-size="8.00">1</text> +</g> +<!-- Phi_a22->Region21 --> +<g id="edge13" class="edge"> +<title>Phi_a22->Region21</title> +<path fill="none" stroke="black" stroke-dasharray="1,5" d="M268.12,-250C270.58,-250 273.04,-250 275.5,-250"/> +<polygon fill="black" stroke="black" points="275.61,-253.5 285.61,-250 275.61,-246.5 275.61,-253.5"/> +<text text-anchor="middle" x="271.12" y="-243.6" font-family="Helvetica,sans-Serif" font-size="8.00">0</text> +</g> +<!-- Phi_b23 --> +<g id="node14" class="node"> +<title>Phi_b23</title> +<ellipse fill="lightyellow" stroke="black" cx="133" cy="-250" rx="27.1" ry="18"/> +<text text-anchor="middle" x="133" y="-246.3" font-family="Times,serif" font-size="14.00">φ_b</text> +</g> +<!-- Phi_b23->Con_7 --> +<g id="edge18" class="edge"> +<title>Phi_b23->Con_7</title> +<path fill="none" stroke="black" d="M128.64,-267.95C126.61,-275.86 124.14,-285.46 121.86,-294.31"/> +<polygon fill="black" stroke="black" points="118.42,-293.65 119.32,-304.21 125.2,-295.4 118.42,-293.65"/> +<text text-anchor="middle" x="125.64" y="-270.55" font-family="Helvetica,sans-Serif" font-size="8.00">2</text> +</g> +<!-- Phi_b23->Phi_b20 --> +<g id="edge17" class="edge"> +<title>Phi_b23->Phi_b20</title> +<path fill="none" stroke="black" d="M116.07,-264.17C102.58,-274.66 83.49,-289.51 68.2,-301.4"/> +<polygon fill="black" stroke="black" points="65.9,-298.75 60.16,-307.65 70.2,-304.28 65.9,-298.75"/> +<text text-anchor="middle" x="113.07" y="-266.77" font-family="Helvetica,sans-Serif" font-size="8.00">1</text> +</g> +<!-- Phi_b23->Region21 --> +<g id="edge16" class="edge"> +<title>Phi_b23->Region21</title> +<path fill="none" stroke="black" stroke-dasharray="1,5" d="M152.84,-237.61C179.31,-222.7 227.54,-201.16 268,-214 275.99,-216.54 283.81,-220.83 290.83,-225.58"/> +<polygon fill="black" stroke="black" points="289.11,-228.66 299.24,-231.75 293.25,-223.01 289.11,-228.66"/> +<text text-anchor="middle" x="149.84" y="-231.21" font-family="Helvetica,sans-Serif" font-size="8.00">0</text> +</g> +<!-- Add24 --> +<g id="node15" class="node"> +<title>Add24</title> +<ellipse fill="none" stroke="black" cx="241" cy="-178" rx="27" ry="18"/> +<text text-anchor="middle" x="241" y="-174.3" font-family="Times,serif" font-size="14.00">+</text> +</g> +<!-- Add24->Phi_a22 --> +<g id="edge20" class="edge"> +<title>Add24->Phi_a22</title> +<path fill="none" stroke="black" d="M241,-196.3C241,-204.02 241,-213.29 241,-221.89"/> +<polygon fill="black" stroke="black" points="237.5,-221.9 241,-231.9 244.5,-221.9 237.5,-221.9"/> +<text text-anchor="middle" x="238" y="-198.9" font-family="Helvetica,sans-Serif" font-size="8.00">2</text> +</g> +<!-- Add24->Phi_b23 --> +<g id="edge19" class="edge"> +<title>Add24->Phi_b23</title> +<path fill="none" stroke="black" d="M222.19,-191.19C205.1,-202.27 179.69,-218.74 160.36,-231.27"/> +<polygon fill="black" stroke="black" points="158.45,-228.34 151.96,-236.71 162.25,-234.21 158.45,-228.34"/> +<text text-anchor="middle" x="219.19" y="-193.79" font-family="Helvetica,sans-Serif" font-size="8.00">1</text> +</g> +<!-- Return25->Region21 --> +<g id="edge21" class="edge"> +<title>Return25->Region21</title> +<path fill="none" stroke="red" d="M277.67,-124.13C285.71,-148.44 300.52,-193.18 310.06,-221.99"/> +<polygon fill="red" stroke="red" points="306.85,-223.42 313.31,-231.81 313.49,-221.22 306.85,-223.42"/> +<text text-anchor="middle" x="274.67" y="-126.73" font-family="Helvetica,sans-Serif" font-size="8.00">0</text> +</g> +<!-- Return25->Add24 --> +<g id="edge22" class="edge"> +<title>Return25->Add24</title> +<path fill="none" stroke="black" d="M264.34,-124.3C260.76,-132.39 256.42,-142.19 252.46,-151.13"/> +<polygon fill="black" stroke="black" points="249.21,-149.82 248.36,-160.38 255.61,-152.65 249.21,-149.82"/> +<text text-anchor="middle" x="261.34" y="-126.9" font-family="Helvetica,sans-Serif" font-size="8.00">1</text> +</g> +</g> +</svg> |
