mirror of
https://github.com/pdf2htmlEX/pdf2htmlEX.git
synced 2024-12-22 13:00:08 +00:00
2 lines
86 KiB
Plaintext
2 lines
86 KiB
Plaintext
<div class="pd w0 h0"><div id="pf7" class="pf" data-page-no="7"><div class="pc pc7"><img class="bi x2f y13e w8 h18" alt="" src="data:image/png;base64,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fWNjY2ZmZnFxcWdeM76+vv5nP/tZqwkwCxYsmDVr1tkGy+ND7+vWrdu3b1/LT4VD70OGDDnjgpIpKSnTpk0LL+fm5roXoeM5X7FY7De/+U34Zt8jjzwyatSo0ydyVFVVbdmy5cknn/zrv/7r+fPnL1q06JINzLd6d7I7yM/Pj18Ig/7S/Nx33nmn6x60pKSkqVOn+u8Ml1J6evqUKVP27NlTXV19+lq3mZmZw4YN68zD8EEQ7Nu37+mnnw6faPLz8+NR/tJLL3388ccLFixoVfxtH3oHHX8lGDt27LJly8rLyzvnr3fo0KEvf/nLO3fuHD9+/He+853MzMwzfllOTk5OTs6ECRP+8R//ccmSJcuXL1+yZMmlGUvYuHFj0I3PBIpEIjU1NRUVFZdmA6Zrrrmmix6orVu3erSBSy8hIWHw4MGDBw8Ol4cPz6Tftm3b2WbadCp/+ctfwlkuGRkZixcvDsdQTp48+dZbb7300kuvv/56YWHhddddd7ah95EjR86YMeOaa66xlxM6/opVXFwcBMGOHTtisVhnm1wei8XCiH/kkUduvPHGT/36zMzMH/3oR2+88cYLL7wwf/78N9544xL8i8IpPd152Zza2trdu3f36dMnPk4P0AmDPt7uXSLigyBYuXJlmOP/8i//8t///d8tP/X444+//vrrP//5z3/+85+3vD4jI2PWrFkjR44sLCw09E4XZa5tOwwaNCi88PHHH3e23+03v/lN2yM+7sYbb/zmN79ZU1PzT//0Txf7N4xvkDF27NhuexcaMmRISkrKunXrOrYhFABntH379iAIPve5z53+qbvvvrvl0MnIkSO/9rWvPf/8888999wdd9wxfPhwEY+O7xbiE0J+9atfdapfrLKy8qmnnho/fny7Ij40efLkWbNmLVmyZMeOHRf1l1y+fHl4oX///t33/1ti4uzZs/Py8vxvAriAwmnxZ9ziukePHuHc0c9+9rP//u///q1vfWvKlCnmz6Dju6OHH344CIJLUL1tF4vFHnjggSAIvvOd73TsFhYtWpSVlXXffffFYrGL+kojCIL777+/m693mZKSMnHixJSUlLVr17777rvl5eXx038N0gN0QPzBMyUl5RxfNmDAAEPvXGHMj2+fO++883e/+92OHTvuu+++SzOn/FNt3rw5nFFzthNbP1WvXr2++c1vPvzwwytXrpwxY8bFeKXx4IMPBkEQjUa/8pWvuBeFcnJyNm/eXF1dHQTB3Llzjx8//tZbb4Wfys7Ovv7669euXVtRURFeM2vWrLS0tNdeey18ukpJSbn55pv37NmzadOm8AvGjBlTWFj47rvvhjdoW0Gg+6ivrw8vtFppJxqNrl27NgiCcFEa74Wi47v98YpEnnvuuVtvvbWmpubGG2+8NEuwf//73583b97ZflA4KXDChAnn8yMmT54cBMHF6PjKysoHH3wwfPviF7/4hc2n4vLz8/Pz8xsbG48fP56SkpKUlBT/I4Zv+A4fPjy+bGjv3r0TExPHjx9/4sSJIAiSkpIikUheXl58Ied+/foFQTB06NDwLI7du3c7wkAHvP3223/4wx/iHy5cuDAIgu9+97udedHJ7OzskSNHbtu27Sc/+UnL62tqaoIgiP9zuso5u6DjL6Lc3Nyf/vSnX//612tqasIl2L/whS9c1HUblyxZsmTJkmg0et99991xxx2pqaktPxsu5tjhwfi4goKCNWvWXMBf+9ChQ8uXL4/vXH3//ffbdup0KSkp4RvBiYmJrRaxycjIyMjIaHlNq90AUlJSWn1L/At0PNAxw4YNW7p0afzDpUuX9u3bt5OvHB8EwaJFix566KG6urp77rln4cKFkyZNCq//wQ9+EG4LNXLkSG9UouMJgiCYMWPG8uXLw2HmMLKDIJg8efINN9zQKrzapXfv3oWFhWf7bE1NzVNPPfXUU0/NmTPn7rvvHj16dDi2vWzZslmzZp3/P2rs2LGvvPLK3r17zzZ98MCBA/v372/LTb3zzjvhEpMhe8cCdBV5eXlFRUWlpaXxa77+9a93/l+7R48eTzzxxAMPPLBv375FixbFrw8j/nOf+9wdd9zhj4uO5//Jzc19+eWX45unBkGwevXqVtvCXSTLli1btmxZNBq96667brnlliAIRo0adf43G66Of9ttt13Y33b+/PkPPvhgq/cQAOi0vvrVrz700EPxDz/zmc90iV/7qquueuSRR5588slW1z/yyCMGktDxnHbsIpF77rnnnnvuqaysLC8v37p16wcffPCp31VeXn5B1rqJRqMZGRnHjh0LgqB3797nf4Pp6ekd+K7hw4ef8T2EmTNnjh07tn///ibEA3QtN910U/zytGnTOv+kmpZPSS+++GIQBAUFBeE1zz//vCUm0fGcS25ubm5u7sVY6SXUcgPUcBh+9uzZLUcXVq1a1YGV41spKysLguDPf/6zsXOA7iw1NfX2228PZ8l/8Ytf7NL/FhGPjqdTmD9//i233BKfFh83efLk999///xvf+/evdFoVMRfGZKSkrZu3dp1f3l/Qbi8vvCFL4QdP336dEcDdDwd99Of/nTChAlnK+zx48evXr365MmT57m9xVtvvTVnzhxH+8owdepUBwHosLFjx/bt2/e2224zN/JsDh06FL984MCB/Pz8xER7a3Kpuc91ATNmzDjHMPk111wT/N8p+R0W7p0xc+ZMRxuASCQyb968z372sw7FGR07duzAgQPxD0tLS1etWuWwcBn+qzoEXd2ECROi0ehjjz3229/+tmND8idPnnzkkUeCIJgyZYrjCdBtrVu3buXKlWvWrFm5cmUQBL/4xS/69u07ZcqUWbNmXX/99V3ohNeLqqmpacWKFa2uPHr06JEjRy7IshPQdsbju7zU1NTHH3/88OHDL7zwQsdu4Y9//OPu3bsffvhhe2QAdE+ffPLJwoUL77zzzmeeeebEiRP33Xff448//vjjj48fP3779u0PPfTQxIkTX3zxxVgs5ljt3bv3jNfbgI9Lz3j8lWDGjBlz5sx55ZVXbrvttvhiW21UVVX13HPPDRs27M4773QkAbqht99++1vf+tbBgwcXLVo0b968lnPib7311iAIjh079uSTT37ve9/7j//4j3/913/Ny8vrzofrxIkTZ7z+6NGj7ktcYsbjrxD/8A//EI1GFy1aFM50b6Pa2tqnn346CILnn3/eyUwA3TPiv/SlL2VmZv7hD3+48847z/hc0KtXryeeeOLHP/7xwYMH582bV1FR0Z2PWE5Ozhmvt9sUOp4OSk1N/fGPf3z48OG7777797///cmTJz/1W954443Pfe5zGzZs+P73v5+bm+sYAnQ3NTU1X/rSlyZOnPjLX/5y4MCB5/7iadOm/frXv25ubv7KV77SnSfYZGVlJScnn3698wfQ8XTcuHHj3nnnncmTJz/33HP33XffOQbma2tr//7v//7JJ58cNmzY8uXLb7vttm5yiFrupLtx48bzWXe/pqam5Yfr1q0zbRTochYuXBgEwRNPPNHGt2SzsrIeffTRsrKyJUuWdOfjNmHChJZnlKWnp0+dOtW6k1x6Cc3NzY7CFeZ//ud/vv3tb4cPuOPGjRs1atTQoUPT0tJ27969atWq999///Dhw0EQPPzww2d7C/WKdOjQoVWrVoVHJu773/9+B17GfPLJJ9u2bWt1RsG999772GOPufsBXUU4o+bxxx8PJ8G33aOPPvraa6+tXbu2vSPQFRUV4d7nF/uU0PipYhf1BzU1NR08eDArK6tXr17uTuh4LmSzLl++fOPGjcuWLQuC4Pjx4ydPnoxEIikpKXPmzBkyZMhf/dVfdau5NLFY7MYbb2w1iB4EwfDhw3/3u9+199bmzp1bWlp6+vVbtmyxIS7QVSxYsODAgQO//vWv2/uNhw8fvuWWW3784x+3d4H50tLSuXPnXjEdD5ed94CuTH369Lnnnnt++MMfbt68+Z133gkXhv+Hf/iHzZs3//CHP/y7v/u77jYhfuXKladHfBAEO3bsaDnZpi0qKirOGPFBELz++uvue0AXemCcNWtWB74xKysrGo2+9dZb7f3G1157LQiCoqKiS/ZvbO8abqDj6XRNn5WVFQRBWlpad366Otundu7c2a6bOsfXb9y40f0N6BLCNWeKi4s79u0lJSXt2sH0k08++a//+q9nnnkmCILFixdf1H+as5XoPiw1SLcwb968s52VdcMNN7TrpiZNmnS2T3WfM4aBri4ckhgyZEjHvv36669/7bXXOjDaXVRUNH369Iv37zIAT7diPJ5uYfjw4Wdc2XfOnDntndGempr6jW984/Tr+/btO2HCBIca6BLq6+uDILiUJ2j27dv3G9/4xn/+53/argQuFP+X6C4effTRhx56qOUs+Wg0+uUvf7kDNzVv3ryXXnrp4MGDLa/8wQ9+4CADXUVJSUkQBHv37g0nXrbX1q1bgyBYsWJF278lJydHwYOOh44YN27cG2+8sXLlymeffbZPnz7333//uHHjOnZTeXl5a9asWbdu3a9+9audO3cuXrx4+vTpnp+ALiTclLSsrOzaa6/twLevX7/+9ttvz8vLcyThMrLu5JWsoqLi6aefDoJg1apVBw8eHDduXPiY++yzzzo4AN3cnDlzrrrqqp/+9Kft/cZYLDZ16tTHHnvs3nvvdRjhMjI//kqWk5OzdOnSpUuXhjNA3n///aVLlxYWFjoyAHz+859fu3btrl272vuN4WDQ7NmzHUPQ8VwskUjk9DMy582b58gAMH/+/L59+z7wwAPtWqhx165dL7/88r333mtSDeh4Lq6bb7655YdFRUUeeQEIgiASifzyl7+sqalp+2TLWCz2wAMP9O3b92KvAQ/oeIKioqK+ffvGP/TIC0DL54h777335Zdf/tGPfvSpo/KHDx9euHBhTU3ND37wg/au2AvoeDpiwYIF8csXdfcNALqc8HTVl19++fbbbz/HXPnly5ffcssta9eu/bd/+7f2bp8HXCTWq7nylZaWzp07NwiCb3zjGw8++KADAsDpzxR/8zd/c/DgwYkTJ86cOTM3Nzfc6nXTpk1bt25dv379rl27pk6d+uyzz0ajUYcLdDyXzty5c0tLS1esWGFyPABnFIvFXnjhhWXLlpWVlbX61O23337HHXcYhgcdz2Xw4osvvvzyy6+++qpDAcCnqqio2LlzZ+/evYcMGWIAHnQ8l1NNTc2mTZsMpQAA6HgAAOCysV4NAADoeAAAQMcDAAA6HgAAdDwAAKDjAQAAHQ8AADoeAADQ8QAAgI4HAAAdDwAA6HgAAEDHAwCAjgcAAHQ8AACg4wEAAB0PAAA6HgAA0PEAAICOBwAAHQ8AAOh4AABAxwMAgI4HAAB0PAAAoOMBAKD7iTgEAHyqhIQEBwGgcz0yNzc3OwoAANC1mFcDAAA6HgAA0PEAAICOBwAAHQ8AAOh4AABAxwMAgI4HAAB0PAAAoOMBAEDHAwAAOh4AANDxAACg4wEAAB0PAADoeAAAQMcDAICOBwAAdDwAAKDjAQBAxwMAADoeAADQ8QAAoOMBAAAdDwAA6HgAANDxAACAjgcAAHQ8AACg4wEAQMcDAAA6HgAA0PEAAKDjAQAAHQ8AALRNJBaLJSUlORAAnUpzc7ODAMA5JHiqAACALse8GgAA0PEAAICOBwAAdDwAAOh4AABAxwMAADoeAAB0PAAAoOMBAAAdDwAAOh4AANDxAACAjgcAAB0PAADoeAAAQMcDAAA6HgAAdDwAAKDjAQAAHQ8AADoeAADQ8QAAgI4HAAAdDwAA6HgAAEDHAwCAjgcAAHQ8AACg4wEAAB0PAAA6HgAA0PEAAICOBwAAHQ8AAOh4AABAxwMAgI4HAAB0PAAAoOMBAEDHAwAAOh4AANDxAACg4wEAAB0PAADoeAAAQMcDAICOBwAAdDwAAKDjAQBAxwMAADoeAADQ8QAAoOMBAAAdDwAA6HgAANDxAACAjgcAAHQ8AACg4wEAQMcDAAA6HgAA0PEAAKDjAQAAHQ8AAOh4AADQ8QAAgI4HAAB0PAAA6HgAAEDHAwAAOh4AAHQ8AACg4wEAAB0PAADoeAAA0PEAAICOBwAAdDwAAOh4AABAxwMAADoeAAB0PAAAoOMBAAAdDwAAOh4AANDxAACAjgcAAHQ8AADoeAAAQMcDAAA6HgAAdDwAAKDjAQAAHQ8AADoeAADQ8QAAgI4HAAAdDwAA6HgAAEDHAwCAjgcAAHQ8AACg4wEAAB0PAAA6HgAA0PEAAICOBwAAHQ8AAOh4AABAxwMAgI4HAAB0PAAAoOMBAEDHAwAAOh4AANDxAACAjgcAAB0PAADoeAAAQMcDAICOBwAAdDwAAKDjAQBAxwMAADoeAADQ8QAAoOMBAAAdDwAA6HgAAEDHAwCAjgcAAHQ8AACg4wEAQMcDAAA6HgAA0PEAAKDjAQAAHQ8AAOh4AADQ8QAAgI4HAAB0PAAA6HgAAEDHAwAAOh4AANDxAACg4wEAAB0PAADoeAAA0PEAAICOBwAAdDwAAOh4AABAxwMAADoeAAB0PAAAoOMBAAAdDwAA6HgAANDxAACAjgcAAHQ8AADoeAAAQMcDAAA6HgAAdDwAAKDjAQAAHQ8AADoeAADQ8QAAgI4HAAAdDwAA6HgAAEDHAwAAOh4AAHQ8AACg4wEAAB0PAAA6HgAA0PEAAICOBwAAHQ8AAOh4AABAxwMAgI4HAAB0PAAAoOMBAAAdDwAAOh4AANDxAACAjgcAAB0PAADoeAAAQMcDAICOBwAAdDwAAKDjAQBAxwMAADoeAADQ8QAAoOMBAAAdDwAA6HgAAEDHAwCAjgcAAHQ8AACg4wEAQMcDAAA6HgAA0PEAAKDjAQAAHQ8AAOh4AADQ8QAAgI4HAAB0PAAAoOMBAEDHAwAAOh4AANDxAACg4wEAAB0PAADoeAAA0PEAAICOBwAAdDwAAOh4AABAxwMAADoeAAB0PAAAoOMBAAAdDwAA6HgAANDxAACAjgcAAHQ8AADoeAAAQMcDAAA6HgAAdDwAAKDjAQAAHQ8AADoeAADQ8QAAgI4HAAB0PAAA6HgAAEDHAwAAOh4AAHQ8AACg4wEAAB0PAAA6HgAA0PEAAICOBwAAHQ8AAOh4AABAxwMAADoeAAB0PAAAoOMBAAAdDwAAOh4AANDxAACAjgcAAB0PAADoeAAAQMcDAICOBwAAdDwAAKDjAQBAxwMAADoeAADQ8QAAgI4HAAAdDwAA6HgAAEDHAwCAjgcAAHQ8AACg4wEAQMcDAAA6HgAA0PEAAKDjAQAAHQ8AAOh4AABAxwMAgI4HAAB0PAAAoOMBAEDHAwAAOh4AANDxAACg4wEAAB0PAADoeAAA0PEAAICOBwAAdDwAAOh4AABAxwMAADoeAADQ8QAAoOMBAAAdDwAA6HgAANDxAACAjgcAAHQ8AADoeAAAQMcDAAA6HgAAdDwAAKDjAQAAHQ8AAOh4AADQ8QAAgI4HAAB0PAAA6HgAAEDHAwAAOh4AAHQ8AACg4wEAAB0PAAA6HgAA0PEAAICOBwAAHQ8AAOh4AABAxwMAADoeAAB0PAAAoOMBAAAdDwAAOh4AANDxAACAjgcAAB0PAADoeAAAQMcDAICOBwAAdDwAAKDjAQAAHQ8AADoeAADQ8QAAgI4HAAAdDwAA6HgAAEDHAwCAjgcAAHQ8AACg4wEAQMcDAAA6HgAA0PEAAKDjAQAAHQ8AAOh4AABAxwMAgI4HAAB0PAAAoOMBAEDHAwAAOh4AANDxAACg4wEAAB0PAADoeAAA0PEAAICOBwAAdDwAAKDjAQBAxwMAADoeABnsuoQAAAlySURBVADQ8QAAoOMBAAAdDwAA6HgAANDxAACAjgcAAHQ8AADoeAAAQMcDAAA6HgAA0PEAAKDjAQAAHQ8AAOh4AADQ8QAAgI4HAAB0PAAA6HgAAEDHAwAAOh4AAHQ8AACg4wEAAB0PAAA6HgAA0PEAAICOBwAAdDwAAOh4AABAxwMAADoeAAB0PAAAoOMBAAAdDwAAOh4AANDxAACAjgcAAB0PAADoeAAAQMcDAAA6HgAAdDwAAKDjAQAAHQ8AADoeAADQ8QAAgI4HAAAdDwAA6HgAAEDHAwCAjgcAAHQ8AACg4wEAQMcDAAA6HgAA0PEAAICOBwAAHQ8AAOh4AABAxwMAgI4HAAB0PAAAoOMBAEDHAwAAOh4AANDxAACg4wEAAB0PAADoeAAAQMcDAICOBwAAdDwAAKDjAQBAxwMAADoeAADQ8QAAoOMBAAAdDwAA6HgAANDxAACAjgcAAHQ8AADoeAAAQMcDAAA6HgAA0PEAAKDjAQAAHQ8AAOh4AADQ8QAAgI4HAAB0PAAA6HgAAEDHAwAAOh4AAHQ8AACg4wEAAB0PAADoeAAA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"/><div class="c xd yc w9 h19"><div class="t m0 x8e h1a y13e ff13 fsb fc0 sc0 ls0 ws0">i<span class="fs9">2</span></div><div class="t m0 x8f h1a y33 ff13 fsb fc0 sc0 ls0 ws0">i<span class="fs9">3<span class="_ _25"> </span></span>i<span class="fs9">4</span></div><div class="t m0 x8e h1a y18c ff13 fsb fc0 sc0 ls0 ws0">i<span class="fs9">5</span></div><div class="t m0 x8e h1a y18d ff13 fsb fc0 sc0 ls0 ws0">i<span class="fs9">1</span></div><div class="t m0 x51 h1a y18e ff13 fsb fc0 sc0 ls0 ws0">i<span class="fs9">6</span></div><div class="t m0 x8e h1a y17d ff13 fsb fc0 sc0 ls0 ws0">i<span class="fs9">7</span></div><div class="t m0 x31 h1a y18f ff13 fsb fc0 sc0 ls0 ws0">t<span class="fs9">1</span></div><div class="t m0 x90 h1a y190 ff13 fsb fc0 sc0 ls0 ws0">t<span class="fs9">2</span></div><div class="t m0 x91 h14 y191 ff13 fsc fc0 sc0 ls0 ws0">Tr<span class="_ _2"></span>ee
Call</div><div class="t m0 x92 h14 y97 ff13 fsc fc0 sc0 ls0 ws0">Outer
T<span class="_ _2"></span>ree</div><div class="t m0 x91 h14 y192 ff13 fsc fc0 sc0 ls0 ws0">Nested
T<span class="_ _2"></span>ree</div><div class="t m0 x64 h14 y193 ff13 fsc fc0 sc0 ls0 ws0">Exit
Guard</div><div class="t m0 x93 h8 y194 ff13 fsa fc0 sc0 ls0 ws0">(a)</div><div class="t m0 x94 h8 y195 ff13 fsa fc0 sc0 ls0 ws0">(b)</div></div><div class="t m0 x2f h5 y196 ff1 fs3 fc0 sc0 ls0 ws0">Figure<span class="_ _5"> </span>7.<span class="_ _1"> </span><span class="ff2">Control<span class="_ _5"> </span>flow<span class="_ _5"> </span>graph<span class="_ _5"> </span>of<span class="_ _5"> </span>a<span class="_ _5"> </span>nested<span class="_ _5"> </span>loop<span class="_ _3"> </span>with<span class="_ _5"> </span>an<span class="_ _5"> </span>if<span class="_ _5"> </span>statement</span></div><div class="t m0 x2f h5 y197 ff2 fs3 fc0 sc0 ls0 ws0">inside<span class="_ _8"> </span>the<span class="_ _d"> </span>inner<span class="_ _8"> </span>most<span class="_ _d"> </span>loop<span class="_ _8"> </span>(a).<span class="_ _d"> </span>An<span class="_ _8"> </span>inner<span class="_ _d"> </span>tree<span class="_ _8"> </span>captures<span class="_ _d"> </span>the<span class="_ _8"> </span>inner</div><div class="t m0 x2f h5 y198 ff2 fs3 fc0 sc0 ls0 ws0">loop,<span class="_ _5"> </span>and<span class="_ _5"> </span>is<span class="_ _5"> </span>nested<span class="_ _5"> </span>inside<span class="_ _5"> </span>an<span class="_ _5"> </span>outer<span class="_ _5"> </span>tree<span class="_ _5"> </span>which<span class="_ _5"> </span>“calls”<span class="_ _5"> </span>the<span class="_ _5"> </span>inner<span class="_ _5"> </span>tree.</div><div class="t m0 x2f h5 y199 ff2 fs3 fc0 sc0 ls0 ws0">The<span class="_ _3"> </span>inner<span class="_ _3"> </span>tree<span class="_ _3"> </span>returns<span class="_ _3"> </span>to<span class="_ _3"> </span>the<span class="_ _3"> </span>outer<span class="_ _3"> </span>tree<span class="_ _3"> </span>once<span class="_ _3"> </span>it<span class="_ _3"> </span>exits<span class="_ _3"> </span>along<span class="_ _3"> </span>its<span class="_ _3"> </span>loop</div><div class="t m0 x2f h5 y19a ff2 fs3 fc0 sc0 ls0 ws0">condition<span class="_ _5"> </span>guard<span class="_ _5"> </span>(b).</div><div class="t m0 x2f h5 y116 ff2 fs3 fc0 sc0 ls0 ws0">In<span class="_ _5"> </span>general,<span class="_ _5"> </span>if<span class="_ _5"> </span>loops<span class="_ _7"> </span>are<span class="_ _5"> </span>nested<span class="_ _5"> </span>to<span class="_ _5"> </span>depth<span class="_ _7"> </span><span class="fff">k<span class="_ _4"></span></span>,<span class="_ _5"> </span>and<span class="_ _5"> </span>each<span class="_ _5"> </span>loop<span class="_ _7"> </span>has<span class="_ _5"> </span><span class="fff">n<span class="_ _5"> </span></span>paths</div><div class="t m0 x2f h5 y15c ff2 fs3 fc0 sc0 ls0 ws0">(on<span class="_ _8"> </span>geometric<span class="_ _d"> </span>a<span class="_ _2"></span>verage),<span class="_ _6"> </span>this<span class="_ _d"> </span>na</div><div class="t m0 x95 h5 y15c ff2 fs3 fc0 sc0 ls0 ws0">¨</div><div class="t m0 x95 h7 y15c ff2 fs3 fc0 sc0 ls0 ws0">ıve<span class="_ _8"> </span>strategy<span class="_ _8"> </span>yields<span class="_ _8"> </span><span class="fff">O<span class="_ _4"></span><span class="ff14">(</span>n</span></div><div class="t m0 x96 h1b ye1 ff10 fs4 fc0 sc0 ls0 ws0">k</div><div class="t m0 x1 h7 y15c ff14 fs3 fc0 sc0 ls0 ws0">)<span class="_ _8"> </span><span class="ff2">traces,</span></div><div class="t m0 x2f h5 y15d ff2 fs3 fc0 sc0 ls0 ws0">which<span class="_ _5"> </span>can<span class="_ _5"> </span>easily<span class="_ _3"> </span>fill<span class="_ _5"> </span>the<span class="_ _5"> </span>trace<span class="_ _5"> </span>cache.</div><div class="t m0 x34 h5 y15e ff2 fs3 fc0 sc0 ls0 ws0">In<span class="_ _8"> </span>order<span class="_ _d"> </span>to<span class="_ _8"> </span>execute<span class="_ _8"> </span>programs<span class="_ _8"> </span>with<span class="_ _d"> </span>nested<span class="_ _8"> </span>loops<span class="_ _8"> </span>efficiently<span class="_ _b"></span>,<span class="_ _d"> </span>a</div><div class="t m0 x2f h5 y15f ff2 fs3 fc0 sc0 ls0 ws0">tracing<span class="_ _5"> </span>system<span class="_ _7"> </span>needs<span class="_ _5"> </span>a<span class="_ _5"> </span>technique<span class="_ _7"> </span>for<span class="_ _5"> </span>cov<span class="_ _2"></span>ering<span class="_ _5"> </span>the<span class="_ _7"> </span>nested<span class="_ _5"> </span>loops<span class="_ _5"> </span>with</div><div class="t m0 x2f h5 y160 ff2 fs3 fc0 sc0 ls0 ws0">nativ<span class="_ _2"></span>e<span class="_ _5"> </span>code<span class="_ _5"> </span>without<span class="_ _5"> </span>exponential<span class="_ _5"> </span>trace<span class="_ _5"> </span>duplication.</div><div class="t m0 x2f hc y79 ff1 fs3 fc0 sc0 ls0 ws0">4.1<span class="_ _9"> </span>Nesting<span class="_ _5"> </span>Algorithm</div><div class="t m0 x2f h5 y19b ff2 fs3 fc0 sc0 ls0 ws0">The<span class="_ _3"> </span>k<span class="_ _2"></span>ey<span class="_ _3"> </span>insight<span class="_ _5"> </span>is<span class="_ _3"> </span>that<span class="_ _3"> </span>if<span class="_ _5"> </span>each<span class="_ _3"> </span>loop<span class="_ _3"> </span>is<span class="_ _5"> </span>represented<span class="_ _3"> </span>by<span class="_ _3"> </span>its<span class="_ _3"> </span>o<span class="_ _2"></span>wn<span class="_ _5"> </span>trace</div><div class="t m0 x2f h5 y19c ff2 fs3 fc0 sc0 ls0 ws0">tree,<span class="_ _3"> </span>the<span class="_ _3"> </span>code<span class="_ _3"> </span>for<span class="_ _3"> </span>each<span class="_ _5"> </span>loop<span class="_ _3"> </span>can<span class="_ _3"> </span>be<span class="_ _3"> </span>contained<span class="_ _3"> </span>only<span class="_ _3"> </span>in<span class="_ _3"> </span>its<span class="_ _3"> </span>o<span class="_ _2"></span>wn<span class="_ _3"> </span>tree,</div><div class="t m0 x2f h5 y19d ff2 fs3 fc0 sc0 ls0 ws0">and<span class="_ _5"> </span>outer<span class="_ _5"> </span>loop<span class="_ _5"> </span>paths<span class="_ _7"> </span>will<span class="_ _5"> </span>not<span class="_ _5"> </span>be<span class="_ _5"> </span>duplicated.<span class="_ _5"> </span>Another<span class="_ _5"> </span>k<span class="_ _2"></span>e<span class="_ _2"></span>y<span class="_ _5"> </span>fact<span class="_ _5"> </span>is<span class="_ _7"> </span>that</div><div class="t m0 x2f h5 y19e ff2 fs3 fc0 sc0 ls0 ws0">we<span class="_ _5"> </span>are<span class="_ _5"> </span>not<span class="_ _5"> </span>tracing<span class="_ _5"> </span>arbitrary<span class="_ _5"> </span>bytecodes<span class="_ _5"> </span>that<span class="_ _5"> </span>might<span class="_ _5"> </span>hav<span class="_ _2"></span>e<span class="_ _5"> </span>irreduceable</div><div class="t m0 x2f h5 y19f ff2 fs3 fc0 sc0 ls0 ws0">control<span class="_ _3"> </span>flow<span class="_ _3"> </span>graphs,<span class="_ _3"> </span>but<span class="_ _3"> </span>rather<span class="_ _3"> </span>bytecodes<span class="_ _3"> </span>produced<span class="_ _6"> </span>by<span class="_ _3"> </span>a<span class="_ _3"> </span>compiler</div><div class="t m0 x2f h5 y1a0 ff2 fs3 fc0 sc0 ls0 ws0">for<span class="_ _3"> </span>a<span class="_ _6"> </span>language<span class="_ _3"> </span>with<span class="_ _3"> </span>structured<span class="_ _3"> </span>control<span class="_ _6"> </span>flo<span class="_ _2"></span>w<span class="_ _b"></span>.<span class="_ _6"> </span>Thus,<span class="_ _3"> </span>giv<span class="_ _2"></span>en<span class="_ _3"> </span>two<span class="_ _3"> </span>loop</div><div class="t m0 x2f h5 y1a1 ff2 fs3 fc0 sc0 ls0 ws0">edges,<span class="_ _8"> </span>the<span class="_ _d"> </span>system<span class="_ _8"> </span>can<span class="_ _d"> </span>easily<span class="_ _d"> </span>determine<span class="_ _8"> </span>whether<span class="_ _d"> </span>the<span class="_ _2"></span>y<span class="_ _8"> </span>are<span class="_ _d"> </span>nested</div><div class="t m0 x2f h5 y1a2 ff2 fs3 fc0 sc0 ls0 ws0">and<span class="_ _3"> </span>which<span class="_ _5"> </span>is<span class="_ _5"> </span>the<span class="_ _3"> </span>inner<span class="_ _5"> </span>loop.<span class="_ _3"> </span>Using<span class="_ _5"> </span>this<span class="_ _3"> </span>kno<span class="_ _2"></span>wledge,<span class="_ _5"> </span>the<span class="_ _3"> </span>system<span class="_ _5"> </span>can</div><div class="t m0 x2f h5 y1a3 ff2 fs3 fc0 sc0 ls0 ws0">compile<span class="_ _5"> </span>inner<span class="_ _7"> </span>and<span class="_ _5"> </span>outer<span class="_ _5"> </span>loops<span class="_ _7"> </span>separately<span class="_ _2"></span>,<span class="_ _5"> </span>and<span class="_ _7"> </span>make<span class="_ _5"> </span>the<span class="_ _5"> </span>outer<span class="_ _7"> </span>loop’<span class="_ _2"></span>s</div><div class="t m0 x2f h5 y1a4 ff2 fs3 fc0 sc0 ls0 ws0">traces<span class="_ _5"> </span><span class="ffa">call<span class="_ _5"> </span></span>the<span class="_ _3"> </span>inner<span class="_ _5"> </span>loop’<span class="_ _b"></span>s<span class="_ _3"> </span>trace<span class="_ _5"> </span>tree.</div><div class="t m0 x34 h5 y1a5 ff2 fs3 fc0 sc0 ls0 ws0">The<span class="_ _3"> </span>algorithm<span class="_ _3"> </span>for<span class="_ _3"> </span>b<span class="_ _2"></span>uilding<span class="_ _3"> </span>nested<span class="_ _3"> </span>trace<span class="_ _3"> </span>trees<span class="_ _3"> </span>is<span class="_ _5"> </span>as<span class="_ _3"> </span>follows.<span class="_ _3"> </span>W<span class="_ _b"></span>e</div><div class="t m0 x2f h5 y1a6 ff2 fs3 fc0 sc0 ls0 ws0">start<span class="_ _3"> </span>tracing<span class="_ _5"> </span>at<span class="_ _3"> </span>loop<span class="_ _5"> </span>headers<span class="_ _3"> </span>exactly<span class="_ _5"> </span>as<span class="_ _3"> </span>in<span class="_ _5"> </span>the<span class="_ _3"> </span>basic<span class="_ _3"> </span>tracing<span class="_ _5"> </span>system.</div><div class="t m0 x2f h5 y1a7 ff2 fs3 fc0 sc0 ls0 ws0">When<span class="_ _8"> </span>we<span class="_ _8"> </span>exit<span class="_ _6"> </span>a<span class="_ _8"> </span>loop<span class="_ _8"> </span>(detected<span class="_ _8"> </span>by<span class="_ _8"> </span>comparing<span class="_ _8"> </span>the<span class="_ _8"> </span>interpreter<span class="_ _8"> </span>PC</div><div class="t m0 x2f h5 y1a8 ff2 fs3 fc0 sc0 ls0 ws0">with<span class="_ _d"> </span>the<span class="_ _8"> </span>range<span class="_ _d"> </span>gi<span class="_ _2"></span>ven<span class="_ _8"> </span>by<span class="_ _d"> </span>the<span class="_ _8"> </span>loop<span class="_ _d"> </span>edge),<span class="_ _8"> </span>we<span class="_ _d"> </span>stop<span class="_ _d"> </span>the<span class="_ _8"> </span>trace.<span class="_ _d"> </span>The</div><div class="t m0 x2f h5 y1a9 ff2 fs3 fc0 sc0 ls0 ws0">key<span class="_ _6"> </span>step<span class="_ _8"> </span>of<span class="_ _8"> </span>the<span class="_ _8"> </span>algorithm<span class="_ _d"> </span>occurs<span class="_ _6"> </span>when<span class="_ _8"> </span>we<span class="_ _d"> </span>are<span class="_ _6"> </span>recording<span class="_ _8"> </span>a<span class="_ _8"> </span>trace</div><div class="t m0 x2f h5 y1aa ff2 fs3 fc0 sc0 ls0 ws0">for<span class="_ _3"> </span>loop<span class="_ _3"> </span><span class="fff">L</span></div><div class="t m0 x97 h1b y47 ff10 fs4 fc0 sc0 ls0 ws0">R</div><div class="t m0 x4c h5 y1aa ff2 fs3 fc0 sc0 ls0 ws0">(<span class="fff">R<span class="_ _3"> </span></span>for<span class="_ _3"> </span>loop<span class="_ _3"> </span>being<span class="_ _3"> </span>recorded)<span class="_ _3"> </span>and<span class="_ _5"> </span>we<span class="_ _3"> </span>reach<span class="_ _3"> </span>the<span class="_ _3"> </span>header</div><div class="t m0 x2f h5 y1ab ff2 fs3 fc0 sc0 ls0 ws0">of<span class="_ _5"> </span>a<span class="_ _5"> </span>different<span class="_ _5"> </span>loop<span class="_ _5"> </span><span class="fff">L</span></div><div class="t m0 x46 h1b y48 ff10 fs4 fc0 sc0 ls0 ws0">O</div><div class="t m0 x65 h5 y1ab ff2 fs3 fc0 sc0 ls0 ws0">(<span class="fff">O<span class="_ _3"> </span></span>for<span class="_ _5"> </span>other<span class="_ _5"> </span>loop).<span class="_ _5"> </span>Note<span class="_ _5"> </span>that<span class="_ _5"> </span><span class="fff">L</span></div><div class="t m0 x2c h1b y48 ff10 fs4 fc0 sc0 ls0 ws0">O</div><div class="t m0 x98 h5 y1ab ff2 fs3 fc0 sc0 ls0 ws0">must<span class="_ _5"> </span>be<span class="_ _5"> </span>an</div><div class="t m0 x2f h5 y1ac ff2 fs3 fc0 sc0 ls0 ws0">inner<span class="_ _5"> </span>loop<span class="_ _5"> </span>of<span class="_ _3"> </span><span class="fff">L</span></div><div class="t m0 x94 h1b y49 ff10 fs4 fc0 sc0 ls0 ws0">R</div><div class="t m0 x92 h5 y1ac ff2 fs3 fc0 sc0 ls0 ws0">because<span class="_ _5"> </span>we<span class="_ _5"> </span>stop<span class="_ _3"> </span>the<span class="_ _5"> </span>trace<span class="_ _5"> </span>when<span class="_ _5"> </span>we<span class="_ _5"> </span>exit<span class="_ _5"> </span>a<span class="_ _5"> </span>loop.</div><div class="t m0 x36 h4 y1ad ff3 fs2 fc0 sc0 ls0 ws0">•</div><div class="t m0 x37 h5 y174 ff2 fs3 fc0 sc0 ls0 ws0">If<span class="_ _3"> </span><span class="fff">L</span></div><div class="t m0 x52 h1b y132 ff10 fs4 fc0 sc0 ls0 ws0">O</div><div class="t m0 x25 h5 y174 ff2 fs3 fc0 sc0 ls0 ws0">has<span class="_ _3"> </span>a<span class="_ _3"> </span>type-matching<span class="_ _3"> </span>compiled<span class="_ _3"> </span>trace<span class="_ _3"> </span>tree,<span class="_ _3"> </span>we<span class="_ _3"> </span>call<span class="_ _3"> </span><span class="fff">L</span></div><div class="t m0 x10 h1b y132 ff10 fs4 fc0 sc0 ls0 ws0">O</div><div class="t m0 x1c h5 y174 ff2 fs3 fc0 sc0 ls0 ws0">as</div><div class="t m0 x37 h5 y175 ff2 fs3 fc0 sc0 ls0 ws0">a<span class="_ _3"> </span>nested<span class="_ _5"> </span>trace<span class="_ _3"> </span>tree.<span class="_ _5"> </span>If<span class="_ _3"> </span>the<span class="_ _5"> </span>call<span class="_ _3"> </span>succeeds,<span class="_ _5"> </span>then<span class="_ _3"> </span>we<span class="_ _5"> </span>record<span class="_ _3"> </span>the<span class="_ _5"> </span>call</div><div class="t m0 x37 h5 y1ae ff2 fs3 fc0 sc0 ls0 ws0">in<span class="_ _5"> </span>the<span class="_ _3"> </span>trace<span class="_ _5"> </span>for<span class="_ _5"> </span><span class="fff">L</span></div><div class="t m0 x91 h1b y134 ff10 fs4 fc0 sc0 ls0 ws0">R</div><div class="t m0 x65 h5 y1ae ff2 fs3 fc0 sc0 ls0 ws0">.<span class="_ _5"> </span>On<span class="_ _3"> </span>future<span class="_ _5"> </span>ex<span class="_ _2"></span>ecutions,<span class="_ _5"> </span>the<span class="_ _3"> </span>trace<span class="_ _5"> </span>for<span class="_ _5"> </span><span class="fff">L</span></div><div class="t m0 x29 h1b y134 ff10 fs4 fc0 sc0 ls0 ws0">R</div><div class="t m0 x5e h5 y1ae ff2 fs3 fc0 sc0 ls0 ws0">will</div><div class="t m0 x37 h5 y1af ff2 fs3 fc0 sc0 ls0 ws0">call<span class="_ _5"> </span>the<span class="_ _5"> </span>inner<span class="_ _3"> </span>trace<span class="_ _5"> </span>directly<span class="_ _b"></span>.</div><div class="t m0 x36 h4 y1b0 ff3 fs2 fc0 sc0 ls0 ws0">•</div><div class="t m0 x37 h5 y1b1 ff2 fs3 fc0 sc0 ls0 ws0">If<span class="_ _6"> </span><span class="fff">L</span></div><div class="t m0 x52 h1b y1b2 ff10 fs4 fc0 sc0 ls0 ws0">O</div><div class="t m0 x25 h5 y1b1 ff2 fs3 fc0 sc0 ls0 ws0">does<span class="_ _6"> </span>not<span class="_ _3"> </span>have<span class="_ _3"> </span>a<span class="_ _6"> </span>type-matching<span class="_ _3"> </span>compiled<span class="_ _6"> </span>trace<span class="_ _3"> </span>tree<span class="_ _6"> </span>yet,</div><div class="t m0 x37 h5 y1b3 ff2 fs3 fc0 sc0 ls0 ws0">we<span class="_ _8"> </span>hav<span class="_ _2"></span>e<span class="_ _6"> </span>to<span class="_ _8"> </span>obtain<span class="_ _8"> </span>it<span class="_ _8"> </span>before<span class="_ _8"> </span>we<span class="_ _8"> </span>are<span class="_ _8"> </span>able<span class="_ _8"> </span>to<span class="_ _8"> </span>proceed.<span class="_ _8"> </span>In<span class="_ _8"> </span>order</div><div class="t m0 x37 h5 y1b4 ff2 fs3 fc0 sc0 ls0 ws0">to<span class="_ _3"> </span>do<span class="_ _3"> </span>this,<span class="_ _6"> </span>we<span class="_ _3"> </span>simply<span class="_ _3"> </span>abort<span class="_ _6"> </span>recording<span class="_ _3"> </span>the<span class="_ _3"> </span>first<span class="_ _3"> </span>trace.<span class="_ _6"> </span>The<span class="_ _3"> </span>trace</div><div class="t m0 x37 h5 y1b5 ff2 fs3 fc0 sc0 ls0 ws0">monitor<span class="_ _6"> </span>will<span class="_ _6"> </span>see<span class="_ _8"> </span>the<span class="_ _6"> </span>inner<span class="_ _6"> </span>loop<span class="_ _8"> </span>header<span class="_ _2"></span>,<span class="_ _6"> </span>and<span class="_ _6"> </span>will<span class="_ _8"> </span>immediately</div><div class="t m0 x37 h5 y1b6 ff2 fs3 fc0 sc0 ls0 ws0">start<span class="_ _5"> </span>recording<span class="_ _5"> </span>the<span class="_ _3"> </span>inner<span class="_ _5"> </span>loop.</div><div class="t m0 x3 h8 y13a ff2 fs4 fc0 sc0 ls0 ws0">2</div><div class="t m0 x34 h5 y14d ff2 fs3 fc0 sc0 ls0 ws0">If<span class="_ _5"> </span>all<span class="_ _7"> </span>the<span class="_ _5"> </span>loops<span class="_ _7"> </span>in<span class="_ _7"> </span>a<span class="_ _5"> </span>nest<span class="_ _7"> </span>are<span class="_ _5"> </span>type-stable,<span class="_ _7"> </span>then<span class="_ _5"> </span>loop<span class="_ _7"> </span>nesting<span class="_ _5"> </span>creates</div><div class="t m0 x2f h5 y14e ff2 fs3 fc0 sc0 ls0 ws0">no<span class="_ _5"> </span>duplication.<span class="_ _7"> </span>Otherwise,<span class="_ _5"> </span>if<span class="_ _7"> </span>loops<span class="_ _5"> </span>are<span class="_ _7"> </span>nested<span class="_ _5"> </span>to<span class="_ _7"> </span>a<span class="_ _5"> </span>depth<span class="_ _7"> </span><span class="fff">k<span class="_ _4"></span></span>,<span class="_ _5"> </span>and<span class="_ _7"> </span>each</div><div class="t m0 x2f h8 y9a ff2 fs4 fc0 sc0 ls0 ws0">2</div><div class="t m0 x36 h3 y31 ff2 fs2 fc0 sc0 ls0 ws0">Instead<span class="_ _5"> </span>of<span class="_ _3"> </span>aborting<span class="_ _5"> </span>the<span class="_ _5"> </span>outer<span class="_ _3"> </span>recording,<span class="_ _5"> </span>we<span class="_ _5"> </span>could<span class="_ _5"> </span>principally<span class="_ _3"> </span>merely<span class="_ _5"> </span>sus-</div><div class="t m0 x2f h3 y14f ff2 fs2 fc0 sc0 ls0 ws0">pend<span class="_ _3"> </span>the<span class="_ _3"> </span>recording,<span class="_ _3"> </span>but<span class="_ _3"> </span>that<span class="_ _3"> </span>would<span class="_ _3"> </span>require<span class="_ _3"> </span>the<span class="_ _3"> </span>implementation<span class="_ _3"> </span>to<span class="_ _3"> </span>be<span class="_ _3"> </span>able</div><div class="t m0 x2f h3 y33 ff2 fs2 fc0 sc0 ls0 ws0">to<span class="_ _3"> </span>record<span class="_ _3"> </span>se<span class="_ _2"></span>veral<span class="_ _3"> </span>traces<span class="_ _5"> </span>simultaneously<span class="_ _2"></span>,<span class="_ _3"> </span>complicating<span class="_ _3"> </span>the<span class="_ _3"> </span>implementation,</div><div class="t m0 x2f h3 y9d ff2 fs2 fc0 sc0 ls0 ws0">while<span class="_ _5"> </span>sa<span class="_ _2"></span>ving<span class="_ _5"> </span>only<span class="_ _5"> </span>a<span class="_ _7"> </span>few<span class="_ _5"> </span>iterations<span class="_ _7"> </span>in<span class="_ _5"> </span>the<span class="_ _5"> </span>interpreter<span class="_ _2"></span>.</div><div class="c x99 y1b7 wa h1c"><div class="t m0 x9a h16 y17f ff15 fs8 fc0 sc0 ls0 ws0">i<span class="fsd">2</span></div><div class="t m0 x9a h16 y1b8 ff15 fs8 fc0 sc0 ls0 ws0">i<span class="fsd">3</span></div><div class="t m0 x9a h16 y99 ff15 fs8 fc0 sc0 ls0 ws0">i<span class="fsd">1</span></div><div class="t m0 x9a h16 y1b9 ff15 fs8 fc0 sc0 ls0 ws0">i<span class="fsd">6</span></div><div class="t m0 x9a h16 y1ba ff15 fs8 fc0 sc0 ls0 ws0">i<span class="fsd">4</span></div><div class="t m0 x9a h16 yba ff15 fs8 fc0 sc0 ls0 ws0">i<span class="fsd">5</span></div><div class="t m0 x9b h16 y17f ff15 fs8 fc0 sc0 ls0 ws0">t<span class="fsd">2</span></div><div class="t m0 x68 h16 y56 ff15 fs8 fc0 sc0 ls0 ws0">t<span class="fsd">1</span></div><div class="t m0 x9b h16 y1bb ff15 fs8 fc0 sc0 ls0 ws0">t<span class="fsd">4</span></div><div class="t m0 x0 h6 y1bc ff15 fsc fc0 sc0 ls0 ws0">Exit
Guard</div><div class="t m0 x9c h6 y104 ff15 fsc fc0 sc0 ls0 ws0">Nested
T<span class="_ _2"></span>ree</div></div><div class="t m0 x32 h5 y1bd ff1 fs3 fc0 sc0 ls0 ws0">Figure<span class="_ _5"> </span>8.<span class="_ _1"> </span><span class="ff2">Control<span class="_ _7"> </span>flow<span class="_ _5"> </span>graph<span class="_ _5"> </span>of<span class="_ _7"> </span>a<span class="_ _5"> </span>loop<span class="_ _5"> </span>with<span class="_ _5"> </span>tw<span class="_ _2"></span>o<span class="_ _5"> </span>nested<span class="_ _5"> </span>loops<span class="_ _7"> </span>(left)</span></div><div class="t m0 x32 h5 y1be ff2 fs3 fc0 sc0 ls0 ws0">and<span class="_ _3"> </span>its<span class="_ _6"> </span>nested<span class="_ _3"> </span>trace<span class="_ _3"> </span>tree<span class="_ _3"> </span>configuration<span class="_ _6"> </span>(right).<span class="_ _3"> </span>The<span class="_ _3"> </span>outer<span class="_ _6"> </span>tree<span class="_ _3"> </span>calls</div><div class="t m0 x32 h5 y1bf ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _3"> </span>tw<span class="_ _2"></span>o<span class="_ _5"> </span>inner<span class="_ _3"> </span>nested<span class="_ _5"> </span>trace<span class="_ _3"> </span>trees<span class="_ _5"> </span>and<span class="_ _3"> </span>places<span class="_ _5"> </span>guards<span class="_ _3"> </span>at<span class="_ _5"> </span>their<span class="_ _3"> </span>side<span class="_ _5"> </span>exit</div><div class="t m0 x32 h5 y1c0 ff2 fs3 fc0 sc0 ls0 ws0">locations.</div><div class="t m0 x32 h5 y13 ff2 fs3 fc0 sc0 ls0 ws0">loop<span class="_ _5"> </span>is<span class="_ _5"> </span>entered<span class="_ _5"> </span>with<span class="_ _5"> </span><span class="fff">m<span class="_ _5"> </span></span>dif<span class="_ _2"></span>ferent<span class="_ _5"> </span>type<span class="_ _5"> </span>maps<span class="_ _5"> </span>(on<span class="_ _5"> </span>geometric<span class="_ _5"> </span>a<span class="_ _2"></span>v<span class="_ _2"></span>erage),</div><div class="t m0 x32 h7 y1c1 ff2 fs3 fc0 sc0 ls0 ws0">then<span class="_ _3"> </span>we<span class="_ _3"> </span>compile<span class="_ _5"> </span><span class="fff">O<span class="_ _4"></span><span class="ff14">(</span>m</span></div><div class="t m0 x9d h1b y1c2 ff10 fs4 fc0 sc0 ls0 ws0">k</div><div class="t m0 x9e h7 y1c1 ff14 fs3 fc0 sc0 ls0 ws0">)<span class="_ _3"> </span><span class="ff2">copies<span class="_ _3"> </span>of<span class="_ _5"> </span>the<span class="_ _3"> </span>innermost<span class="_ _3"> </span>loop.<span class="_ _5"> </span>As<span class="_ _3"> </span>long<span class="_ _3"> </span>as</span></div><div class="t m0 x32 h5 y1c3 fff fs3 fc0 sc0 ls0 ws0">m<span class="_ _5"> </span><span class="ff2">is<span class="_ _5"> </span>close<span class="_ _3"> </span>to<span class="_ _5"> </span>1,<span class="_ _5"> </span>the<span class="_ _5"> </span>resulting<span class="_ _5"> </span>trace<span class="_ _5"> </span>trees<span class="_ _5"> </span>will<span class="_ _3"> </span>be<span class="_ _5"> </span>tractable.</span></div><div class="t m0 x33 h5 y1c4 ff2 fs3 fc0 sc0 ls0 ws0">An<span class="_ _5"> </span>important<span class="_ _7"> </span>detail<span class="_ _7"> </span>is<span class="_ _5"> </span>that<span class="_ _7"> </span>the<span class="_ _5"> </span>call<span class="_ _7"> </span>to<span class="_ _7"> </span>the<span class="_ _5"> </span>inner<span class="_ _7"> </span>trace<span class="_ _5"> </span>tree<span class="_ _7"> </span>must<span class="_ _7"> </span>act</div><div class="t m0 x32 h5 y1c5 ff2 fs3 fc0 sc0 ls0 ws0">like<span class="_ _5"> </span>a<span class="_ _5"> </span>function<span class="_ _5"> </span>call<span class="_ _5"> </span>site:<span class="_ _5"> </span>it<span class="_ _5"> </span>must<span class="_ _5"> </span>return<span class="_ _5"> </span>to<span class="_ _5"> </span>the<span class="_ _5"> </span>same<span class="_ _5"> </span>point<span class="_ _7"> </span>every<span class="_ _5"> </span>time.</div><div class="t m0 x32 h5 y1c6 ff2 fs3 fc0 sc0 ls0 ws0">The<span class="_ _3"> </span>goal<span class="_ _3"> </span>of<span class="_ _5"> </span>nesting<span class="_ _3"> </span>is<span class="_ _3"> </span>to<span class="_ _3"> </span>mak<span class="_ _2"></span>e<span class="_ _3"> </span>inner<span class="_ _5"> </span>and<span class="_ _3"> </span>outer<span class="_ _3"> </span>loops<span class="_ _3"> </span>independent;</div><div class="t m0 x32 h5 y1c7 ff2 fs3 fc0 sc0 ls0 ws0">thus<span class="_ _6"> </span>when<span class="_ _6"> </span>the<span class="_ _6"> </span>inner<span class="_ _6"> </span>tree<span class="_ _6"> </span>is<span class="_ _8"> </span>called,<span class="_ _6"> </span>it<span class="_ _6"> </span>must<span class="_ _6"> </span>exit<span class="_ _6"> </span>to<span class="_ _6"> </span>the<span class="_ _6"> </span>same<span class="_ _6"> </span>point</div><div class="t m0 x32 h5 y1c8 ff2 fs3 fc0 sc0 ls0 ws0">in<span class="_ _3"> </span>the<span class="_ _6"> </span>outer<span class="_ _3"> </span>tree<span class="_ _6"> </span>e<span class="_ _2"></span>very<span class="_ _3"> </span>time<span class="_ _3"> </span>with<span class="_ _6"> </span>the<span class="_ _3"> </span>same<span class="_ _3"> </span>type<span class="_ _6"> </span>map.<span class="_ _3"> </span>Because<span class="_ _6"> </span>we</div><div class="t m0 x32 h5 y1c9 ff2 fs3 fc0 sc0 ls0 ws0">cannot<span class="_ _3"> </span>actually<span class="_ _3"> </span>guarantee<span class="_ _6"> </span>this<span class="_ _3"> </span>property<span class="_ _b"></span>,<span class="_ _6"> </span>we<span class="_ _3"> </span>must<span class="_ _3"> </span>guard<span class="_ _3"> </span>on<span class="_ _3"> </span>it<span class="_ _6"> </span>after</div><div class="t m0 x32 h5 y1ca ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _8"> </span>call,<span class="_ _8"> </span>and<span class="_ _8"> </span>side<span class="_ _6"> </span>exit<span class="_ _8"> </span>if<span class="_ _8"> </span>the<span class="_ _8"> </span>property<span class="_ _8"> </span>does<span class="_ _8"> </span>not<span class="_ _8"> </span>hold.<span class="_ _8"> </span>A<span class="_ _8"> </span>common</div><div class="t m0 x32 h5 y1cb ff2 fs3 fc0 sc0 ls0 ws0">reason<span class="_ _d"> </span>for<span class="_ _8"> </span>the<span class="_ _d"> </span>inner<span class="_ _d"> </span>tree<span class="_ _8"> </span>not<span class="_ _d"> </span>to<span class="_ _d"> </span>return<span class="_ _d"> </span>to<span class="_ _8"> </span>the<span class="_ _d"> </span>same<span class="_ _d"> </span>point<span class="_ _d"> </span>w<span class="_ _2"></span>ould</div><div class="t m0 x32 h5 y1cc ff2 fs3 fc0 sc0 ls0 ws0">be<span class="_ _8"> </span>if<span class="_ _8"> </span>the<span class="_ _d"> </span>inner<span class="_ _8"> </span>tree<span class="_ _8"> </span>took<span class="_ _8"> </span>a<span class="_ _d"> </span>ne<span class="_ _2"></span>w<span class="_ _8"> </span>side<span class="_ _8"> </span>exit<span class="_ _8"> </span>for<span class="_ _8"> </span>which<span class="_ _d"> </span>it<span class="_ _6"> </span>had<span class="_ _d"> </span>ne<span class="_ _2"></span>ver</div><div class="t m0 x32 h5 y1cd ff2 fs3 fc0 sc0 ls0 ws0">compiled<span class="_ _6"> </span>a<span class="_ _6"> </span>trace.<span class="_ _6"> </span>At<span class="_ _6"> </span>this<span class="_ _6"> </span>point,<span class="_ _6"> </span>the<span class="_ _6"> </span>interpreter<span class="_ _6"> </span>PC<span class="_ _6"> </span>is<span class="_ _6"> </span>in<span class="_ _6"> </span>the<span class="_ _6"> </span>inner</div><div class="t m0 x32 h5 y1ce ff2 fs3 fc0 sc0 ls0 ws0">tree,<span class="_ _3"> </span>so<span class="_ _6"> </span>we<span class="_ _3"> </span>cannot<span class="_ _3"> </span>continue<span class="_ _3"> </span>recording<span class="_ _6"> </span>or<span class="_ _3"> </span>executing<span class="_ _3"> </span>the<span class="_ _3"> </span>outer<span class="_ _3"> </span>tree.</div><div class="t m0 x32 h5 y1cf ff2 fs3 fc0 sc0 ls0 ws0">If<span class="_ _3"> </span>this<span class="_ _3"> </span>happens<span class="_ _3"> </span>during<span class="_ _3"> </span>recording,<span class="_ _6"> </span>we<span class="_ _3"> </span>abort<span class="_ _3"> </span>the<span class="_ _3"> </span>outer<span class="_ _3"> </span>trace,<span class="_ _3"> </span>to<span class="_ _3"> </span>give</div><div class="t m0 x32 h5 y1d0 ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _5"> </span>inner<span class="_ _3"> </span>tree<span class="_ _5"> </span>a<span class="_ _5"> </span>chance<span class="_ _5"> </span>to<span class="_ _3"> </span>finish<span class="_ _5"> </span>gro<span class="_ _2"></span>wing.<span class="_ _5"> </span>A<span class="_ _3"> </span>fut<span class="_ _2"></span>ure<span class="_ _5"> </span>execution<span class="_ _5"> </span>of<span class="_ _5"> </span>the</div><div class="t m0 x32 h5 y1d1 ff2 fs3 fc0 sc0 ls0 ws0">outer<span class="_ _5"> </span>tree<span class="_ _5"> </span>would<span class="_ _5"> </span>then<span class="_ _5"> </span>be<span class="_ _3"> </span>able<span class="_ _5"> </span>to<span class="_ _5"> </span>properly<span class="_ _5"> </span>finish<span class="_ _5"> </span>and<span class="_ _5"> </span>record<span class="_ _5"> </span>a<span class="_ _3"> </span>call<span class="_ _5"> </span>to</div><div class="t m0 x32 h5 y1d2 ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _5"> </span>inner<span class="_ _5"> </span>tree.<span class="_ _5"> </span>If<span class="_ _5"> </span>an<span class="_ _5"> </span>inner<span class="_ _5"> </span>tree<span class="_ _7"> </span>side<span class="_ _5"> </span>exit<span class="_ _5"> </span>happens<span class="_ _5"> </span>during<span class="_ _5"> </span>e<span class="_ _2"></span>xecution<span class="_ _5"> </span>of</div><div class="t m0 x32 h5 y1d3 ff2 fs3 fc0 sc0 ls0 ws0">a<span class="_ _3"> </span>compiled<span class="_ _3"> </span>trace<span class="_ _3"> </span>for<span class="_ _6"> </span>the<span class="_ _3"> </span>outer<span class="_ _3"> </span>tree,<span class="_ _3"> </span>we<span class="_ _3"> </span>simply<span class="_ _6"> </span>e<span class="_ _2"></span>xit<span class="_ _3"> </span>the<span class="_ _3"> </span>outer<span class="_ _3"> </span>trace</div><div class="t m0 x32 h5 y1d4 ff2 fs3 fc0 sc0 ls0 ws0">and<span class="_ _5"> </span>start<span class="_ _5"> </span>recording<span class="_ _3"> </span>a<span class="_ _5"> </span>ne<span class="_ _2"></span>w<span class="_ _5"> </span>branch<span class="_ _5"> </span>in<span class="_ _5"> </span>the<span class="_ _5"> </span>inner<span class="_ _3"> </span>tree.</div><div class="t m0 x32 hc y22 ff1 fs3 fc0 sc0 ls0 ws0">4.2<span class="_ _9"> </span>Blacklisting<span class="_ _5"> </span>with<span class="_ _5"> </span>Nesting</div><div class="t m0 x32 h5 y1d5 ff2 fs3 fc0 sc0 ls0 ws0">The<span class="_ _6"> </span>blacklisting<span class="_ _6"> </span>algorithm<span class="_ _6"> </span>needs<span class="_ _8"> </span>modification<span class="_ _6"> </span>to<span class="_ _6"> </span>work<span class="_ _6"> </span>well<span class="_ _8"> </span>with</div><div class="t m0 x32 h5 y1d6 ff2 fs3 fc0 sc0 ls0 ws0">nesting.<span class="_ _6"> </span>The<span class="_ _6"> </span>problem<span class="_ _6"> </span>is<span class="_ _6"> </span>that<span class="_ _6"> </span>outer<span class="_ _8"> </span>loop<span class="_ _6"> </span>traces<span class="_ _6"> </span>often<span class="_ _6"> </span>abort<span class="_ _6"> </span>during</div><div class="t m0 x32 h5 y1d7 ff2 fs3 fc0 sc0 ls0 ws0">startup<span class="_ _5"> </span>(because<span class="_ _3"> </span>the<span class="_ _5"> </span>inner<span class="_ _5"> </span>tree<span class="_ _3"> </span>is<span class="_ _5"> </span>not<span class="_ _3"> </span>a<span class="_ _2"></span>v<span class="_ _2"></span>ailable<span class="_ _5"> </span>or<span class="_ _3"> </span>tak<span class="_ _2"></span>es<span class="_ _5"> </span>a<span class="_ _3"> </span>side<span class="_ _5"> </span>exit),</div><div class="t m0 x32 h5 y1d8 ff2 fs3 fc0 sc0 ls0 ws0">which<span class="_ _6"> </span>would<span class="_ _6"> </span>lead<span class="_ _6"> </span>to<span class="_ _6"> </span>their<span class="_ _8"> </span>being<span class="_ _6"> </span>quickly<span class="_ _6"> </span>blacklisted<span class="_ _6"> </span>by<span class="_ _8"> </span>the<span class="_ _6"> </span>basic</div><div class="t m0 x32 h5 y1d9 ff2 fs3 fc0 sc0 ls0 ws0">algorithm.</div><div class="t m0 x33 h5 y1da ff2 fs3 fc0 sc0 ls0 ws0">The<span class="_ _3"> </span>k<span class="_ _2"></span>ey<span class="_ _5"> </span>observation<span class="_ _3"> </span>is<span class="_ _5"> </span>that<span class="_ _3"> </span>when<span class="_ _3"> </span>an<span class="_ _5"> </span>outer<span class="_ _3"> </span>trace<span class="_ _3"> </span>aborts<span class="_ _5"> </span>because</div><div class="t m0 x32 h5 y1db ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _3"> </span>inner<span class="_ _3"> </span>tree<span class="_ _3"> </span>is<span class="_ _3"> </span>not<span class="_ _3"> </span>ready<span class="_ _b"></span>,<span class="_ _3"> </span>this<span class="_ _3"> </span>is<span class="_ _3"> </span>probably<span class="_ _3"> </span>a<span class="_ _3"> </span>temporary<span class="_ _3"> </span>condition.</div><div class="t m0 x32 h5 y8e ff2 fs3 fc0 sc0 ls0 ws0">Thus,<span class="_ _3"> </span>we<span class="_ _5"> </span>should<span class="_ _3"> </span>not<span class="_ _5"> </span>count<span class="_ _3"> </span>such<span class="_ _3"> </span>aborts<span class="_ _5"> </span>toward<span class="_ _5"> </span>blacklisting<span class="_ _3"> </span>as<span class="_ _5"> </span>long</div><div class="t m0 x32 h5 y8f ff2 fs3 fc0 sc0 ls0 ws0">as<span class="_ _5"> </span>we<span class="_ _5"> </span>are<span class="_ _3"> </span>able<span class="_ _5"> </span>to<span class="_ _5"> </span>b<span class="_ _2"></span>uild<span class="_ _5"> </span>up<span class="_ _5"> </span>more<span class="_ _5"> </span>traces<span class="_ _3"> </span>for<span class="_ _5"> </span>the<span class="_ _5"> </span>inner<span class="_ _5"> </span>tree.</div><div class="t m0 x33 h5 y1dc ff2 fs3 fc0 sc0 ls0 ws0">In<span class="_ _3"> </span>our<span class="_ _6"> </span>implementation,<span class="_ _3"> </span>when<span class="_ _6"> </span>an<span class="_ _3"> </span>outer<span class="_ _3"> </span>tree<span class="_ _6"> </span>aborts<span class="_ _3"> </span>on<span class="_ _6"> </span>the<span class="_ _3"> </span>inner</div><div class="t m0 x32 h5 y1dd ff2 fs3 fc0 sc0 ls0 ws0">tree,<span class="_ _6"> </span>we<span class="_ _6"> </span>increment<span class="_ _6"> </span>the<span class="_ _6"> </span>outer<span class="_ _6"> </span>tree’<span class="_ _2"></span>s<span class="_ _3"> </span>blacklist<span class="_ _6"> </span>counter<span class="_ _6"> </span>as<span class="_ _6"> </span>usual<span class="_ _6"> </span>and</div><div class="t m0 x32 h5 y1de ff2 fs3 fc0 sc0 ls0 ws0">back<span class="_ _3"> </span>off<span class="_ _3"> </span>on<span class="_ _3"> </span>compiling<span class="_ _3"> </span>it.<span class="_ _3"> </span>When<span class="_ _3"> </span>the<span class="_ _3"> </span>inner<span class="_ _6"> </span>tree<span class="_ _3"> </span>finishes<span class="_ _3"> </span>a<span class="_ _3"> </span>trace,<span class="_ _3"> </span>we</div><div class="t m0 x32 h5 y1df ff2 fs3 fc0 sc0 ls0 ws0">decrement<span class="_ _3"> </span>the<span class="_ _3"> </span>blacklist<span class="_ _3"> </span>counter<span class="_ _3"> </span>on<span class="_ _3"> </span>the<span class="_ _6"> </span>outer<span class="_ _3"> </span>loop,<span class="_ _3"> </span>“forgi<span class="_ _2"></span>ving”<span class="_ _3"> </span>the</div><div class="t m0 x32 h5 y1e0 ff2 fs3 fc0 sc0 ls0 ws0">outer<span class="_ _5"> </span>loop<span class="_ _5"> </span>for<span class="_ _7"> </span>aborting<span class="_ _5"> </span>pre<span class="_ _2"></span>viously<span class="_ _b"></span>.<span class="_ _5"> </span>W<span class="_ _b"></span>e<span class="_ _5"> </span>also<span class="_ _5"> </span>undo<span class="_ _7"> </span>the<span class="_ _5"> </span>backof<span class="_ _2"></span>f<span class="_ _5"> </span>so<span class="_ _5"> </span>that</div><div class="t m0 x32 h5 y1e1 ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _5"> </span>outer<span class="_ _5"> </span>tree<span class="_ _5"> </span>can<span class="_ _5"> </span>start<span class="_ _5"> </span>immediately<span class="_ _5"> </span>trying<span class="_ _3"> </span>to<span class="_ _5"> </span>compile<span class="_ _5"> </span>the<span class="_ _5"> </span>ne<span class="_ _2"></span>xt<span class="_ _5"> </span>time</div><div class="t m0 x32 h5 yad ff2 fs3 fc0 sc0 ls0 ws0">we<span class="_ _5"> </span>reach<span class="_ _5"> </span>it.</div><div class="t m0 x32 h9 y103 ff1 fs1 fc0 sc0 ls0 ws0">5.<span class="_ _a"> </span>T<span class="_ _b"></span>race<span class="_ _3"> </span>T<span class="_ _b"></span>ree<span class="_ _3"> </span>Optimization</div><div class="t m0 x32 h5 y9a ff2 fs3 fc0 sc0 ls0 ws0">This<span class="_ _1"> </span>section<span class="_ _1"> </span>e<span class="_ _2"></span>xplains<span class="_ _1"> </span>ho<span class="_ _2"></span>w<span class="_ _1"> </span>a<span class="_ _d"> </span>recorded<span class="_ _1"> </span>trace<span class="_ _1"> </span>is<span class="_ _1"> </span>translated<span class="_ _1"> </span>to<span class="_ _d"> </span>an</div><div class="t m0 x32 h5 y9b ff2 fs3 fc0 sc0 ls0 ws0">optimized<span class="_ _6"> </span>machine<span class="_ _6"> </span>code<span class="_ _6"> </span>trace.<span class="_ _6"> </span>The<span class="_ _6"> </span>trace<span class="_ _6"> </span>compilation<span class="_ _8"> </span>subsystem,</div><div class="t m0 x32 h5 y9c ff2 fse fc0 sc0 ls0 ws0">NA<span class="_ _4"></span>N<span class="_ _4"></span>O<span class="_ _4"></span>J<span class="_ _4"></span>I<span class="_ _4"></span>T<span class="fs3">,<span class="_ _1"> </span>is<span class="_ _d"> </span>separate<span class="_ _1"> </span>from<span class="_ _d"> </span>the<span class="_ _1"> </span>VM<span class="_ _d"> </span>and<span class="_ _1"> </span>can<span class="_ _1"> </span>be<span class="_ _d"> </span>used<span class="_ _1"> </span>for<span class="_ _d"> </span>other</span></div><div class="t m0 x32 h5 y9d ff2 fs3 fc0 sc0 ls0 ws0">applications.</div></div><div class="pi" data-data='{"ctm":[1.673203,0.000000,0.000000,1.673203,0.000000,0.000000]}'></div></div></div>
|