mirror of
https://github.com/pdf2htmlEX/pdf2htmlEX.git
synced 2024-12-22 04:50:09 +00:00
2 lines
79 KiB
Plaintext
2 lines
79 KiB
Plaintext
<div class="pd w0 h0"><div id="pf2" class="pf" data-page-no="2"><div class="pc pc2"><img class="bi x32 y18 w1 hb" alt="" src="data:image/png;base64,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"/><div class="t m0 x2f h5 y5b ff2 fs3 fc0 sc0 ls0 ws0">Hence,<span class="_ _5"> </span>recording<span class="_ _7"> </span>and<span class="_ _5"> </span>compiling<span class="_ _7"> </span>a<span class="_ _5"> </span>trace<span class="_ _5"> </span><span class="ffa">speculates<span class="_ _7"> </span></span>that<span class="_ _5"> </span>the<span class="_ _7"> </span>path<span class="_ _5"> </span>and</div><div class="t m0 x2f h5 y5c ff2 fs3 fc0 sc0 ls0 ws0">typing<span class="_ _5"> </span>will<span class="_ _5"> </span>be<span class="_ _7"> </span>exactly<span class="_ _5"> </span>as<span class="_ _5"> </span>the<span class="_ _2"></span>y<span class="_ _7"> </span>were<span class="_ _5"> </span>during<span class="_ _5"> </span>recording<span class="_ _5"> </span>for<span class="_ _7"> </span>subsequent</div><div class="t m0 x2f h5 y5d ff2 fs3 fc0 sc0 ls0 ws0">iterations<span class="_ _5"> </span>of<span class="_ _5"> </span>the<span class="_ _3"> </span>loop.</div><div class="t m0 x34 h5 y5e ff2 fs3 fc0 sc0 ls0 ws0">Every<span class="_ _3"> </span>compiled<span class="_ _5"> </span>trace<span class="_ _3"> </span>contains<span class="_ _3"> </span>all<span class="_ _5"> </span>the<span class="_ _3"> </span><span class="ffa">guar<span class="_ _2"></span>ds<span class="_ _3"> </span><span class="ff2">(checks)<span class="_ _5"> </span>required</span></span></div><div class="t m0 x2f h5 y5f ff2 fs3 fc0 sc0 ls0 ws0">to<span class="_ _8"> </span>validate<span class="_ _8"> </span>the<span class="_ _8"> </span>speculation.<span class="_ _8"> </span>If<span class="_ _d"> </span>one<span class="_ _8"> </span>of<span class="_ _8"> </span>the<span class="_ _8"> </span>guards<span class="_ _d"> </span>fails<span class="_ _6"> </span>(if<span class="_ _d"> </span>control</div><div class="t m0 x2f h5 y60 ff2 fs3 fc0 sc0 ls0 ws0">flow<span class="_ _6"> </span>is<span class="_ _6"> </span>different,<span class="_ _6"> </span>or<span class="_ _6"> </span>a<span class="_ _6"> </span>value<span class="_ _6"> </span>of<span class="_ _6"> </span>a<span class="_ _6"> </span>different<span class="_ _6"> </span>type<span class="_ _6"> </span>is<span class="_ _8"> </span>generated),<span class="_ _6"> </span>the</div><div class="t m0 x2f h5 y61 ff2 fs3 fc0 sc0 ls0 ws0">trace<span class="_ _6"> </span>exits.<span class="_ _6"> </span>If<span class="_ _8"> </span>an<span class="_ _6"> </span>exit<span class="_ _6"> </span>becomes<span class="_ _8"> </span>hot,<span class="_ _6"> </span>the<span class="_ _8"> </span>VM<span class="_ _8"> </span>can<span class="_ _6"> </span>record<span class="_ _8"> </span>a<span class="_ _6"> </span><span class="ffa">branch</span></div><div class="t m0 x2f h5 y62 ffa fs3 fc0 sc0 ls0 ws0">trace<span class="_ _5"> </span><span class="ff2">starting<span class="_ _5"> </span>at<span class="_ _5"> </span>the<span class="_ _5"> </span>exit<span class="_ _5"> </span>to<span class="_ _5"> </span>cover<span class="_ _5"> </span>the<span class="_ _5"> </span>ne<span class="_ _2"></span>w<span class="_ _5"> </span>path.<span class="_ _5"> </span>In<span class="_ _5"> </span>this<span class="_ _5"> </span>way<span class="_ _2"></span>,<span class="_ _5"> </span>the<span class="_ _5"> </span>VM</span></div><div class="t m0 x2f h5 y63 ff2 fs3 fc0 sc0 ls0 ws0">records<span class="_ _5"> </span>a<span class="_ _5"> </span><span class="ffa">trace<span class="_ _5"> </span>tree<span class="_ _5"> </span></span>cov<span class="_ _2"></span>ering<span class="_ _5"> </span>all<span class="_ _5"> </span>the<span class="_ _5"> </span>hot<span class="_ _3"> </span>paths<span class="_ _5"> </span>through<span class="_ _5"> </span>the<span class="_ _5"> </span>loop.</div><div class="t m0 x34 h5 y7 ff2 fs3 fc0 sc0 ls0 ws0">Nested<span class="_ _6"> </span>loops<span class="_ _6"> </span>can<span class="_ _6"> </span>be<span class="_ _8"> </span>dif<span class="_ _2"></span>ficult<span class="_ _6"> </span>to<span class="_ _6"> </span>optimize<span class="_ _6"> </span>for<span class="_ _8"> </span>tracing<span class="_ _6"> </span>VMs.<span class="_ _6"> </span>In</div><div class="t m0 x2f h5 y64 ff2 fs3 fc0 sc0 ls0 ws0">a<span class="_ _6"> </span>na</div><div class="t m0 x35 h5 y65 ff2 fs3 fc0 sc0 ls0 ws0">¨</div><div class="t m0 x35 h5 y64 ff2 fs3 fc0 sc0 ls0 ws0">ıve<span class="_ _6"> </span>implementation,<span class="_ _6"> </span>inner<span class="_ _6"> </span>loops<span class="_ _6"> </span>would<span class="_ _6"> </span>become<span class="_ _6"> </span>hot<span class="_ _6"> </span>first,<span class="_ _6"> </span>and</div><div class="t m0 x2f h5 y66 ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _6"> </span>VM<span class="_ _6"> </span>would<span class="_ _3"> </span>start<span class="_ _6"> </span>tracing<span class="_ _6"> </span>there.<span class="_ _6"> </span>When<span class="_ _6"> </span>the<span class="_ _3"> </span>inner<span class="_ _6"> </span>loop<span class="_ _6"> </span>exits,<span class="_ _6"> </span>the</div><div class="t m0 x2f h5 y67 ff2 fs3 fc0 sc0 ls0 ws0">VM<span class="_ _5"> </span>would<span class="_ _5"> </span>detect<span class="_ _7"> </span>that<span class="_ _5"> </span>a<span class="_ _5"> </span>dif<span class="_ _2"></span>ferent<span class="_ _5"> </span>branch<span class="_ _5"> </span>w<span class="_ _2"></span>as<span class="_ _5"> </span>tak<span class="_ _2"></span>en.<span class="_ _5"> </span>The<span class="_ _5"> </span>VM<span class="_ _7"> </span>would</div><div class="t m0 x2f h5 y68 ff2 fs3 fc0 sc0 ls0 ws0">try<span class="_ _3"> </span>to<span class="_ _5"> </span>record<span class="_ _3"> </span>a<span class="_ _3"> </span>branch<span class="_ _5"> </span>trace,<span class="_ _3"> </span>and<span class="_ _3"> </span>find<span class="_ _3"> </span>that<span class="_ _5"> </span>the<span class="_ _3"> </span>trace<span class="_ _3"> </span>reaches<span class="_ _5"> </span>not<span class="_ _3"> </span>the</div><div class="t m0 x2f h5 y69 ff2 fs3 fc0 sc0 ls0 ws0">inner<span class="_ _5"> </span>loop<span class="_ _3"> </span>header<span class="_ _2"></span>,<span class="_ _5"> </span>but<span class="_ _5"> </span>the<span class="_ _3"> </span>outer<span class="_ _5"> </span>loop<span class="_ _5"> </span>header<span class="_ _2"></span>.<span class="_ _3"> </span>At<span class="_ _5"> </span>this<span class="_ _5"> </span>point,<span class="_ _3"> </span>the<span class="_ _5"> </span>VM</div><div class="t m0 x2f h5 y6a ff2 fs3 fc0 sc0 ls0 ws0">could<span class="_ _3"> </span>continue<span class="_ _5"> </span>tracing<span class="_ _5"> </span>until<span class="_ _3"> </span>it<span class="_ _5"> </span>reaches<span class="_ _3"> </span>the<span class="_ _5"> </span>inner<span class="_ _3"> </span>loop<span class="_ _5"> </span>header<span class="_ _3"> </span>again,</div><div class="t m0 x2f h5 y6b ff2 fs3 fc0 sc0 ls0 ws0">thus<span class="_ _6"> </span>tracing<span class="_ _8"> </span>the<span class="_ _6"> </span>outer<span class="_ _6"> </span>loop<span class="_ _8"> </span>inside<span class="_ _6"> </span>a<span class="_ _8"> </span>trace<span class="_ _6"> </span>tree<span class="_ _8"> </span>for<span class="_ _6"> </span>the<span class="_ _8"> </span>inner<span class="_ _6"> </span>loop.</div><div class="t m0 x2f h5 y6c ff2 fs3 fc0 sc0 ls0 ws0">But<span class="_ _5"> </span>this<span class="_ _5"> </span>requires<span class="_ _5"> </span>tracing<span class="_ _5"> </span>a<span class="_ _5"> </span>cop<span class="_ _2"></span>y<span class="_ _5"> </span>of<span class="_ _5"> </span>the<span class="_ _5"> </span>outer<span class="_ _5"> </span>loop<span class="_ _5"> </span>for<span class="_ _5"> </span>e<span class="_ _2"></span>v<span class="_ _2"></span>ery<span class="_ _5"> </span>side<span class="_ _5"> </span>exit</div><div class="t m0 x2f h5 y6d ff2 fs3 fc0 sc0 ls0 ws0">and<span class="_ _3"> </span>type<span class="_ _3"> </span>combination<span class="_ _6"> </span>in<span class="_ _3"> </span>the<span class="_ _3"> </span>inner<span class="_ _3"> </span>loop.<span class="_ _3"> </span>In<span class="_ _3"> </span>essence,<span class="_ _6"> </span>this<span class="_ _3"> </span>is<span class="_ _3"> </span>a<span class="_ _3"> </span>form</div><div class="t m0 x2f h5 y6e ff2 fs3 fc0 sc0 ls0 ws0">of<span class="_ _3"> </span>unintended<span class="_ _3"> </span>tail<span class="_ _5"> </span>duplication,<span class="_ _3"> </span>which<span class="_ _3"> </span>can<span class="_ _5"> </span>easily<span class="_ _3"> </span>overflo<span class="_ _2"></span>w<span class="_ _5"> </span>the<span class="_ _3"> </span>code</div><div class="t m0 x2f h5 y6f ff2 fs3 fc0 sc0 ls0 ws0">cache.<span class="_ _5"> </span>Alternati<span class="_ _2"></span>v<span class="_ _2"></span>ely<span class="_ _b"></span>,<span class="_ _5"> </span>the<span class="_ _5"> </span>VM<span class="_ _7"> </span>could<span class="_ _5"> </span>simply<span class="_ _5"> </span>stop<span class="_ _7"> </span>tracing,<span class="_ _5"> </span>and<span class="_ _7"> </span>give<span class="_ _7"> </span>up</div><div class="t m0 x2f h5 y70 ff2 fs3 fc0 sc0 ls0 ws0">on<span class="_ _5"> </span>ev<span class="_ _2"></span>er<span class="_ _5"> </span>tracing<span class="_ _5"> </span>outer<span class="_ _3"> </span>loops.</div><div class="t m0 x34 h5 y71 ff2 fs3 fc0 sc0 ls0 ws0">W<span class="_ _b"></span>e<span class="_ _d"> </span>solv<span class="_ _2"></span>e<span class="_ _8"> </span>the<span class="_ _8"> </span>nested<span class="_ _d"> </span>loop<span class="_ _8"> </span>problem<span class="_ _8"> </span>by<span class="_ _d"> </span>recording<span class="_ _8"> </span><span class="ffa">nested<span class="_ _8"> </span>trace</span></div><div class="t m0 x2f h5 y72 ffa fs3 fc0 sc0 ls0 ws0">tr<span class="_ _2"></span>ees<span class="ff2">.<span class="_ _5"> </span>Our<span class="_ _5"> </span>system<span class="_ _5"> </span>traces<span class="_ _7"> </span>the<span class="_ _5"> </span>inner<span class="_ _5"> </span>loop<span class="_ _5"> </span>exactly<span class="_ _5"> </span>as<span class="_ _5"> </span>the<span class="_ _7"> </span>na</span></div><div class="t m0 x5 h5 y73 ff2 fs3 fc0 sc0 ls0 ws0">¨</div><div class="t m0 x5 h5 y72 ff2 fs3 fc0 sc0 ls0 ws0">ıve<span class="_ _5"> </span>v<span class="_ _2"></span>ersion.</div><div class="t m0 x2f h5 y74 ff2 fs3 fc0 sc0 ls0 ws0">The<span class="_ _5"> </span>system<span class="_ _3"> </span>stops<span class="_ _5"> </span>extending<span class="_ _5"> </span>the<span class="_ _5"> </span>inner<span class="_ _3"> </span>tree<span class="_ _5"> </span>when<span class="_ _5"> </span>it<span class="_ _3"> </span>reaches<span class="_ _5"> </span>an<span class="_ _5"> </span>outer</div><div class="t m0 x2f h5 y75 ff2 fs3 fc0 sc0 ls0 ws0">loop,<span class="_ _3"> </span>but<span class="_ _3"> </span>then<span class="_ _3"> </span>it<span class="_ _3"> </span>starts<span class="_ _3"> </span>a<span class="_ _3"> </span>ne<span class="_ _2"></span>w<span class="_ _3"> </span>trace<span class="_ _3"> </span>at<span class="_ _5"> </span>the<span class="_ _3"> </span>outer<span class="_ _3"> </span>loop<span class="_ _3"> </span>header<span class="_ _2"></span>.<span class="_ _3"> </span>When</div><div class="t m0 x2f h5 y76 ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _5"> </span>outer<span class="_ _5"> </span>loop<span class="_ _5"> </span>reaches<span class="_ _7"> </span>the<span class="_ _5"> </span>inner<span class="_ _5"> </span>loop<span class="_ _5"> </span>header<span class="_ _2"></span>,<span class="_ _5"> </span>the<span class="_ _5"> </span>system<span class="_ _7"> </span>tries<span class="_ _5"> </span>to<span class="_ _5"> </span>call</div><div class="t m0 x2f h5 y77 ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _5"> </span>trac<span class="_ _2"></span>e<span class="_ _7"> </span>tree<span class="_ _5"> </span>for<span class="_ _7"> </span>the<span class="_ _5"> </span>inner<span class="_ _7"> </span>loop.<span class="_ _5"> </span>If<span class="_ _7"> </span>the<span class="_ _5"> </span>call<span class="_ _7"> </span>succeeds,<span class="_ _5"> </span>the<span class="_ _7"> </span>VM<span class="_ _5"> </span>records</div><div class="t m0 x2f h5 y78 ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _d"> </span>call<span class="_ _8"> </span>to<span class="_ _d"> </span>the<span class="_ _d"> </span>inner<span class="_ _d"> </span>tree<span class="_ _8"> </span>as<span class="_ _d"> </span>part<span class="_ _d"> </span>of<span class="_ _d"> </span>the<span class="_ _8"> </span>outer<span class="_ _d"> </span>trace<span class="_ _d"> </span>and<span class="_ _8"> </span>finishes</div><div class="t m0 x2f h5 y79 ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _6"> </span>outer<span class="_ _8"> </span>trace<span class="_ _8"> </span>as<span class="_ _8"> </span>normal.<span class="_ _6"> </span>In<span class="_ _8"> </span>this<span class="_ _8"> </span>way<span class="_ _b"></span>,<span class="_ _8"> </span>our<span class="_ _8"> </span>system<span class="_ _8"> </span>can<span class="_ _6"> </span>trace<span class="_ _8"> </span>any</div><div class="t m0 x2f h5 y7a ff2 fs3 fc0 sc0 ls0 ws0">number<span class="_ _5"> </span>of<span class="_ _5"> </span>loops<span class="_ _5"> </span>nested<span class="_ _5"> </span>to<span class="_ _3"> </span>an<span class="_ _2"></span>y<span class="_ _5"> </span>depth<span class="_ _5"> </span>without<span class="_ _5"> </span>causing<span class="_ _5"> </span>excessi<span class="_ _2"></span>ve<span class="_ _5"> </span>tail</div><div class="t m0 x2f h5 y7b ff2 fs3 fc0 sc0 ls0 ws0">duplication.</div><div class="t m0 x34 h5 y7c ff2 fs3 fc0 sc0 ls0 ws0">These<span class="_ _6"> </span>techniques<span class="_ _6"> </span>allow<span class="_ _3"> </span>a<span class="_ _8"> </span>VM<span class="_ _6"> </span>to<span class="_ _6"> </span>dynamically<span class="_ _6"> </span>translate<span class="_ _6"> </span>a<span class="_ _6"> </span>pro-</div><div class="t m0 x2f h5 y7d ff2 fs3 fc0 sc0 ls0 ws0">gram<span class="_ _d"> </span>to<span class="_ _8"> </span>nested,<span class="_ _d"> </span>type-specialized<span class="_ _d"> </span>trace<span class="_ _d"> </span>trees.<span class="_ _8"> </span>Because<span class="_ _d"> </span>traces<span class="_ _d"> </span>can</div><div class="t m0 x2f h5 y7e ff2 fs3 fc0 sc0 ls0 ws0">cross<span class="_ _3"> </span>function<span class="_ _3"> </span>call<span class="_ _5"> </span>boundaries,<span class="_ _3"> </span>our<span class="_ _3"> </span>techniques<span class="_ _3"> </span>also<span class="_ _3"> </span>achie<span class="_ _2"></span>v<span class="_ _2"></span>e<span class="_ _3"> </span>the<span class="_ _3"> </span>ef-</div><div class="t m0 x2f h5 y7f ff2 fs3 fc0 sc0 ls0 ws0">fects<span class="_ _5"> </span>of<span class="_ _7"> </span>inlining.<span class="_ _5"> </span>Because<span class="_ _7"> </span>traces<span class="_ _5"> </span>hav<span class="_ _2"></span>e<span class="_ _5"> </span>no<span class="_ _7"> </span>internal<span class="_ _5"> </span>control-flo<span class="_ _2"></span>w<span class="_ _7"> </span>joins,</div><div class="t m0 x2f h5 y80 ff2 fs3 fc0 sc0 ls0 ws0">they<span class="_ _6"> </span>can<span class="_ _8"> </span>be<span class="_ _8"> </span>optimized<span class="_ _8"> </span>in<span class="_ _8"> </span>linear<span class="_ _6"> </span>time<span class="_ _8"> </span>by<span class="_ _8"> </span>a<span class="_ _8"> </span>simple<span class="_ _8"> </span>compiler<span class="_ _8"> </span>(10).</div><div class="t m0 x2f h5 y81 ff2 fs3 fc0 sc0 ls0 ws0">Thus,<span class="_ _8"> </span>our<span class="_ _6"> </span>tracing<span class="_ _8"> </span>VM<span class="_ _8"> </span>efficiently<span class="_ _6"> </span>performs<span class="_ _8"> </span>the<span class="_ _8"> </span>same<span class="_ _8"> </span>kind<span class="_ _8"> </span>of<span class="_ _8"> </span>op-</div><div class="t m0 x2f h5 y82 ff2 fs3 fc0 sc0 ls0 ws0">timizations<span class="_ _6"> </span>that<span class="_ _3"> </span>would<span class="_ _6"> </span>require<span class="_ _6"> </span>interprocedural<span class="_ _6"> </span>analysis<span class="_ _3"> </span>in<span class="_ _6"> </span>a<span class="_ _6"> </span>static</div><div class="t m0 x2f h5 y83 ff2 fs3 fc0 sc0 ls0 ws0">optimization<span class="_ _5"> </span>setting.<span class="_ _3"> </span>This<span class="_ _5"> </span>makes<span class="_ _5"> </span>tracing<span class="_ _3"> </span>an<span class="_ _5"> </span>attracti<span class="_ _2"></span>ve<span class="_ _5"> </span>and<span class="_ _5"> </span>effecti<span class="_ _2"></span>ve</div><div class="t m0 x2f h5 y84 ff2 fs3 fc0 sc0 ls0 ws0">tool<span class="_ _5"> </span>to<span class="_ _5"> </span>type<span class="_ _3"> </span>specialize<span class="_ _5"> </span>e<span class="_ _2"></span>v<span class="_ _2"></span>en<span class="_ _5"> </span>complex<span class="_ _5"> </span>function<span class="_ _5"> </span>call-rich<span class="_ _5"> </span>code.</div><div class="t m0 x34 h5 y85 ff2 fs3 fc0 sc0 ls0 ws0">W<span class="_ _b"></span>e<span class="_ _5"> </span>implemented<span class="_ _3"> </span>these<span class="_ _5"> </span>techniques<span class="_ _5"> </span>for<span class="_ _5"> </span>an<span class="_ _5"> </span>existing<span class="_ _5"> </span>Ja<span class="_ _2"></span>vaScript<span class="_ _5"> </span>in-</div><div class="t m0 x2f h5 y86 ff2 fs3 fc0 sc0 ls0 ws0">terpreter<span class="_ _2"></span>,<span class="_ _3"> </span>SpiderMonkey<span class="_ _b"></span>.<span class="_ _3"> </span>W<span class="_ _2"></span>e<span class="_ _3"> </span>call<span class="_ _3"> </span>the<span class="_ _3"> </span>resulting<span class="_ _3"> </span>tracing<span class="_ _3"> </span>VM<span class="_ _3"> </span><span class="ffa">T<span class="_ _2"></span>r<span class="_ _2"></span>ace-</span></div><div class="t m0 x2f h5 y87 ffa fs3 fc0 sc0 ls0 ws0">Monke<span class="_ _2"></span>y<span class="ff2">.<span class="_ _3"> </span>T<span class="_ _2"></span>raceMonk<span class="_ _2"></span>ey<span class="_ _3"> </span>supports<span class="_ _5"> </span>all<span class="_ _3"> </span>the<span class="_ _3"> </span>Jav<span class="_ _2"></span>aScript<span class="_ _3"> </span>features<span class="_ _5"> </span>of<span class="_ _3"> </span>Spi-</span></div><div class="t m0 x2f h5 y88 ff2 fs3 fc0 sc0 ls0 ws0">derMonkey<span class="_ _b"></span>,<span class="_ _5"> </span>with<span class="_ _5"> </span>a<span class="_ _3"> </span>2x-20x<span class="_ _5"> </span>speedup<span class="_ _5"> </span>for<span class="_ _5"> </span>traceable<span class="_ _5"> </span>programs.</div><div class="t m0 x34 h5 y89 ff2 fs3 fc0 sc0 ls0 ws0">This<span class="_ _5"> </span>paper<span class="_ _5"> </span>makes<span class="_ _5"> </span>the<span class="_ _3"> </span>follo<span class="_ _2"></span>wing<span class="_ _5"> </span>contrib<span class="_ _2"></span>utions:</div><div class="t m0 x36 h4 y8a ff3 fs2 fc0 sc0 ls0 ws0">•</div><div class="t m0 x37 h5 y8b ff2 fs3 fc0 sc0 ls0 ws0">W<span class="_ _b"></span>e<span class="_ _5"> </span>explain<span class="_ _5"> </span>an<span class="_ _5"> </span>algorithm<span class="_ _5"> </span>for<span class="_ _3"> </span>dynam<span class="_ _2"></span>ically<span class="_ _5"> </span>forming<span class="_ _5"> </span>trace<span class="_ _5"> </span>trees<span class="_ _5"> </span>to</div><div class="t m0 x37 h5 y8c ff2 fs3 fc0 sc0 ls0 ws0">cov<span class="_ _2"></span>er<span class="_ _5"> </span>a<span class="_ _7"> </span>program,<span class="_ _5"> </span>representing<span class="_ _7"> </span>nested<span class="_ _7"> </span>loops<span class="_ _5"> </span>as<span class="_ _7"> </span>nested<span class="_ _5"> </span>trace<span class="_ _7"> </span>trees.</div><div class="t m0 x36 h4 y8d ff3 fs2 fc0 sc0 ls0 ws0">•</div><div class="t m0 x37 h5 y8e ff2 fs3 fc0 sc0 ls0 ws0">W<span class="_ _b"></span>e<span class="_ _5"> </span>e<span class="_ _2"></span>xplain<span class="_ _7"> </span>how<span class="_ _7"> </span>to<span class="_ _7"> </span>speculatively<span class="_ _7"> </span>generate<span class="_ _7"> </span>efficient<span class="_ _7"> </span>type-specialized</div><div class="t m0 x37 h5 y8f ff2 fs3 fc0 sc0 ls0 ws0">code<span class="_ _5"> </span>for<span class="_ _5"> </span>traces<span class="_ _3"> </span>from<span class="_ _5"> </span>dynamic<span class="_ _5"> </span>language<span class="_ _5"> </span>programs.</div><div class="t m0 x36 h4 y90 ff3 fs2 fc0 sc0 ls0 ws0">•</div><div class="t m0 x37 h5 y91 ff2 fs3 fc0 sc0 ls0 ws0">W<span class="_ _b"></span>e<span class="_ _3"> </span>v<span class="_ _2"></span>alidate<span class="_ _5"> </span>our<span class="_ _3"> </span>tracing<span class="_ _5"> </span>techniques<span class="_ _5"> </span>in<span class="_ _3"> </span>an<span class="_ _5"> </span>implementation<span class="_ _5"> </span>based</div><div class="t m0 x37 h5 y92 ff2 fs3 fc0 sc0 ls0 ws0">on<span class="_ _3"> </span>the<span class="_ _3"> </span>SpiderMonkey<span class="_ _3"> </span>Jav<span class="_ _2"></span>aScript<span class="_ _3"> </span>interpreter<span class="_ _2"></span>,<span class="_ _3"> </span>achie<span class="_ _2"></span>ving<span class="_ _3"> </span>2x-20x</div><div class="t m0 x37 h5 y93 ff2 fs3 fc0 sc0 ls0 ws0">speedups<span class="_ _5"> </span>on<span class="_ _5"> </span>many<span class="_ _5"> </span>programs.</div><div class="t m0 x34 h5 y94 ff2 fs3 fc0 sc0 ls0 ws0">The<span class="_ _5"> </span>remainder<span class="_ _5"> </span>of<span class="_ _7"> </span>this<span class="_ _5"> </span>paper<span class="_ _5"> </span>is<span class="_ _7"> </span>organized<span class="_ _5"> </span>as<span class="_ _5"> </span>follo<span class="_ _2"></span>ws.<span class="_ _7"> </span>Section<span class="_ _5"> </span>3<span class="_ _5"> </span>is</div><div class="t m0 x2f h5 y95 ff2 fs3 fc0 sc0 ls0 ws0">a<span class="_ _3"> </span>general<span class="_ _3"> </span>o<span class="_ _2"></span>vervie<span class="_ _2"></span>w<span class="_ _3"> </span>of<span class="_ _3"> </span>trace<span class="_ _3"> </span>t<span class="_ _2"></span>ree<span class="_ _3"> </span>based<span class="_ _3"> </span>compilation<span class="_ _3"> </span>we<span class="_ _3"> </span>use<span class="_ _3"> </span>to<span class="_ _5"> </span>cap-</div><div class="t m0 x2f h5 y96 ff2 fs3 fc0 sc0 ls0 ws0">ture<span class="_ _6"> </span>and<span class="_ _8"> </span>compile<span class="_ _8"> </span>frequently<span class="_ _8"> </span>ex<span class="_ _2"></span>ecuted<span class="_ _6"> </span>code<span class="_ _8"> </span>regions.<span class="_ _8"> </span>In<span class="_ _6"> </span>Section<span class="_ _8"> </span>4</div><div class="t m0 x2f h5 y97 ff2 fs3 fc0 sc0 ls0 ws0">we<span class="_ _6"> </span>describe<span class="_ _3"> </span>our<span class="_ _6"> </span>approach<span class="_ _6"> </span>of<span class="_ _6"> </span>cov<span class="_ _2"></span>ering<span class="_ _6"> </span>nested<span class="_ _3"> </span>loops<span class="_ _6"> </span>using<span class="_ _6"> </span>a<span class="_ _6"> </span>num-</div><div class="t m0 x2f h5 y98 ff2 fs3 fc0 sc0 ls0 ws0">ber<span class="_ _6"> </span>of<span class="_ _6"> </span>individual<span class="_ _6"> </span>trace<span class="_ _6"> </span>trees.<span class="_ _6"> </span>In<span class="_ _8"> </span>Section<span class="_ _6"> </span>5<span class="_ _6"> </span>we<span class="_ _8"> </span>describe<span class="_ _6"> </span>our<span class="_ _6"> </span>trace-</div><div class="t m0 x2f h5 y99 ff2 fs3 fc0 sc0 ls0 ws0">compilation<span class="_ _5"> </span>based<span class="_ _5"> </span>speculative<span class="_ _5"> </span>type<span class="_ _5"> </span>specialization<span class="_ _5"> </span>approach<span class="_ _3"> </span>we<span class="_ _5"> </span>use</div><div class="t m0 x2f h5 y9a ff2 fs3 fc0 sc0 ls0 ws0">to<span class="_ _3"> </span>generate<span class="_ _3"> </span>ef<span class="_ _2"></span>ficient<span class="_ _3"> </span>machine<span class="_ _5"> </span>code<span class="_ _3"> </span>from<span class="_ _3"> </span>recorded<span class="_ _3"> </span>bytecode<span class="_ _3"> </span>traces.</div><div class="t m0 x2f h5 y9b ff2 fs3 fc0 sc0 ls0 ws0">Our<span class="_ _6"> </span>implementation<span class="_ _6"> </span>of<span class="_ _8"> </span>a<span class="_ _6"> </span>dynamic<span class="_ _6"> </span>type-specializing<span class="_ _8"> </span>compiler<span class="_ _6"> </span>for</div><div class="t m0 x2f h5 y9c ff2 fs3 fc0 sc0 ls0 ws0">Jav<span class="_ _2"></span>aScript<span class="_ _3"> </span>is<span class="_ _3"> </span>described<span class="_ _3"> </span>in<span class="_ _3"> </span>Section<span class="_ _3"> </span>6.<span class="_ _6"> </span>Related<span class="_ _3"> </span>work<span class="_ _3"> </span>is<span class="_ _3"> </span>discussed<span class="_ _3"> </span>in</div><div class="t m0 x2f h5 y9d ff2 fs3 fc0 sc0 ls0 ws0">Section<span class="_ _5"> </span>8.<span class="_ _5"> </span>In<span class="_ _5"> </span>Section<span class="_ _5"> </span>7<span class="_ _7"> </span>we<span class="_ _5"> </span>ev<span class="_ _2"></span>aluate<span class="_ _5"> </span>our<span class="_ _5"> </span>dynamic<span class="_ _5"> </span>compiler<span class="_ _7"> </span>based<span class="_ _5"> </span>on</div><div class="t m0 x32 hc y9e ff7 fs3 fc0 sc0 ls0 ws0">1<span class="_ _1"> </span>for<span class="_ _e"> </span>(var<span class="_ _1"> </span>i<span class="_ _e"> </span>=<span class="_ _1"> </span>2;<span class="_ _e"> </span>i<span class="_ _1"> </span><<span class="_ _e"> </span>100;<span class="_ _1"> </span>++i)<span class="_ _e"> </span>{</div><div class="t m0 x32 hc y9f ff7 fs3 fc0 sc0 ls0 ws0">2<span class="_ _f"> </span>if<span class="_ _1"> </span>(!primes[i])</div><div class="t m0 x32 hc ya0 ff7 fs3 fc0 sc0 ls0 ws0">3<span class="_ _10"> </span>continue;</div><div class="t m0 x32 hc ya1 ff7 fs3 fc0 sc0 ls0 ws0">4<span class="_ _f"> </span>for<span class="_ _1"> </span>(var<span class="_ _e"> </span>k<span class="_ _1"> </span>=<span class="_ _e"> </span>i<span class="_ _1"> </span>+<span class="_ _e"> </span>i;<span class="_ _1"> </span>i<span class="_ _e"> </span><<span class="_ _1"> </span>100;<span class="_ _e"> </span>k<span class="_ _1"> </span>+=<span class="_ _e"> </span>i)</div><div class="t m0 x32 hc ya2 ff7 fs3 fc0 sc0 ls0 ws0">5<span class="_ _10"> </span>primes[k]<span class="_ _1"> </span>=<span class="_ _e"> </span>false;</div><div class="t m0 x32 hc ya3 ff7 fs3 fc0 sc0 ls0 ws0">6<span class="_ _1"> </span>}</div><div class="t m0 x32 h5 y62 ff1 fs3 fc0 sc0 ls0 ws0">Figure<span class="_ _8"> </span>1.<span class="_ _1"> </span>Sample<span class="_ _8"> </span>program:<span class="_ _8"> </span>sieve<span class="_ _8"> </span>of<span class="_ _d"> </span>Eratosthenes.<span class="_ _8"> </span><span class="ff7">primes<span class="_ _d"> </span><span class="ff2">is</span></span></div><div class="t m0 x32 h5 y4 ff2 fs3 fc0 sc0 ls0 ws0">initialized<span class="_ _6"> </span>to<span class="_ _6"> </span>an<span class="_ _6"> </span>array<span class="_ _6"> </span>of<span class="_ _6"> </span>100<span class="_ _6"> </span><span class="ff7">false<span class="_ _6"> </span></span>values<span class="_ _3"> </span>on<span class="_ _6"> </span>entry<span class="_ _6"> </span>to<span class="_ _6"> </span>this<span class="_ _6"> </span>code</div><div class="t m0 x32 h5 ya4 ff2 fs3 fc0 sc0 ls0 ws0">snippet.</div><div class="c x32 ya5 w2 hd"><div class="t m0 x38 he y2d ffd fs6 fc0 sc0 ls0 ws0">Interpret<span class="ffe"> </span></div><div class="t m0 x30 he ya6 ffe fs6 fc0 sc0 ls0 ws0">Bytecodes</div><div class="t m0 x39 he ya7 ffd fs6 fc0 sc0 ls0 ws0">Monitor<span class="ffe"> </span></div><div class="t m0 x3a he y57 ffd fs6 fc0 sc0 ls0 ws0">Record</div><div class="t m0 x3b he ya8 ffe fs6 fc0 sc0 ls0 ws0">LIR T<span class="_ _2"></span>race</div><div class="t m0 x3c he ya9 ffd fs6 fc0 sc0 ls0 ws0">Execute<span class="ffe"> </span></div><div class="t m0 x3d he yaa ffe fs6 fc0 sc0 ls0 ws0">Compiled T<span class="_ _2"></span>race</div><div class="t m0 x3e he y57 ffd fs6 fc0 sc0 ls0 ws0">Enter<span class="ffe"> </span></div><div class="t m0 x3d he ya8 ffe fs6 fc0 sc0 ls0 ws0">Compiled T<span class="_ _2"></span>race</div><div class="t m0 x3f he ya9 ffd fs6 fc0 sc0 ls0 ws0">Compile</div><div class="t m0 x3b he yaa ffe fs6 fc0 sc0 ls0 ws0">LIR T<span class="_ _2"></span>race</div><div class="t m0 x3e he yab ffd fs6 fc0 sc0 ls0 ws0">Leave<span class="ffe"> </span></div><div class="t m0 x3d he yac ffe fs6 fc0 sc0 ls0 ws0">Compiled T<span class="_ _2"></span>race</div><div class="t m0 x30 he yad ffe fs6 fc0 sc0 ls0 ws0">loop </div><div class="t m0 x31 he yae ffe fs6 fc0 sc0 ls0 ws0">edge</div><div class="t m0 x37 he yaf ffe fs6 fc0 sc0 ls0 ws0">hot</div><div class="t m0 x40 he y31 ffe fs6 fc0 sc0 ls0 ws0">loop/exit</div><div class="t m0 x3b he yb0 ffe fs6 fc0 sc0 ls0 ws0">abort </div><div class="t m0 x41 he yb1 ffe fs6 fc0 sc0 ls0 ws0">recording</div><div class="t m0 x42 he yb2 ffe fs6 fc0 sc0 ls0 ws0">finish at </div><div class="t m0 x43 he yb3 ffe fs6 fc0 sc0 ls0 ws0">loop header</div><div class="t m0 x44 he yb4 ffe fs6 fc0 sc0 ls0 ws0">cold/blacklisted</div><div class="t m0 x45 he yb5 ffe fs6 fc0 sc0 ls0 ws0">loop/exit</div><div class="t m0 x46 he ya7 ffe fs6 fc0 sc0 ls0 ws0">compiled trace </div><div class="t m0 x47 he y56 ffe fs6 fc0 sc0 ls0 ws0">ready</div><div class="t m0 x48 he y33 ffe fs6 fc0 sc0 ls0 ws0">loop edge with </div><div class="t m0 x49 he yb6 ffe fs6 fc0 sc0 ls0 ws0">same types</div><div class="t m0 x4a he yb7 ffe fs6 fc0 sc0 ls0 ws0">side exit to </div><div class="t m0 x4b he yb8 ffe fs6 fc0 sc0 ls0 ws0">existing trace</div><div class="t m0 x49 he yb9 ffe fs6 fc0 sc0 ls0 ws0">side exit,</div><div class="t m0 x4c he yba ffe fs6 fc0 sc0 ls0 ws0">no existing trace</div><div class="t m0 x4d he ybb ffe fs6 fc0 sc0 ls0 ws0">Overhead </div><div class="t m0 x4e he ybc ffe fs6 fc0 sc0 ls0 ws0">Interpreting</div><div class="t m0 x4f he ybd ffe fs6 fc0 sc0 ls0 ws0">Native</div></div><div class="c x50 ybe w3 hf"><div class="t m0 x51 he ybf ffd fs6 fc0 sc0 ls0 ws0">Symbol Key</div></div><div class="t m0 x32 h5 yc0 ff1 fs3 fc0 sc0 ls0 ws0">Figure<span class="_ _3"> </span>2.<span class="_ _1"> </span><span class="ff2">State<span class="_ _3"> </span>machine<span class="_ _3"> </span>describing<span class="_ _3"> </span>the<span class="_ _3"> </span>major<span class="_ _3"> </span>activities<span class="_ _3"> </span>of<span class="_ _3"> </span>Trace-</span></div><div class="t m0 x32 h5 yc1 ff2 fs3 fc0 sc0 ls0 ws0">Monkey<span class="_ _3"> </span>and<span class="_ _6"> </span>the<span class="_ _6"> </span>conditions<span class="_ _6"> </span>that<span class="_ _6"> </span>cause<span class="_ _6"> </span>transitions<span class="_ _6"> </span>to<span class="_ _6"> </span>a<span class="_ _6"> </span>new<span class="_ _6"> </span>acti<span class="_ _2"></span>v-</div><div class="t m0 x32 h5 yc2 ff2 fs3 fc0 sc0 ls0 ws0">ity<span class="_ _2"></span>.<span class="_ _6"> </span>In<span class="_ _8"> </span>the<span class="_ _d"> </span>dark<span class="_ _8"> </span>box,<span class="_ _8"> </span>TM<span class="_ _8"> </span>executes<span class="_ _8"> </span>JS<span class="_ _8"> </span>as<span class="_ _8"> </span>compiled<span class="_ _d"> </span>traces.<span class="_ _8"> </span>In<span class="_ _8"> </span>the</div><div class="t m0 x32 h5 yc3 ff2 fs3 fc0 sc0 ls0 ws0">light<span class="_ _5"> </span>gray<span class="_ _5"> </span>boxes,<span class="_ _5"> </span>TM<span class="_ _5"> </span>ex<span class="_ _2"></span>ecutes<span class="_ _5"> </span>JS<span class="_ _5"> </span>in<span class="_ _5"> </span>the<span class="_ _5"> </span>standard<span class="_ _5"> </span>interpreter<span class="_ _2"></span>.<span class="_ _5"> </span>White</div><div class="t m0 x32 h5 yc4 ff2 fs3 fc0 sc0 ls0 ws0">boxes<span class="_ _3"> </span>are<span class="_ _6"> </span>overhead.<span class="_ _6"> </span>Thus,<span class="_ _6"> </span>to<span class="_ _3"> </span>maximize<span class="_ _6"> </span>performance,<span class="_ _6"> </span>we<span class="_ _6"> </span>need<span class="_ _6"> </span>to</div><div class="t m0 x32 h5 yc5 ff2 fs3 fc0 sc0 ls0 ws0">maximize<span class="_ _5"> </span>time<span class="_ _5"> </span>spent<span class="_ _5"> </span>in<span class="_ _5"> </span>the<span class="_ _5"> </span>dark<span class="_ _2"></span>est<span class="_ _5"> </span>box<span class="_ _5"> </span>and<span class="_ _5"> </span>minimize<span class="_ _5"> </span>time<span class="_ _7"> </span>spent<span class="_ _5"> </span>in</div><div class="t m0 x32 h5 yc6 ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _5"> </span>white<span class="_ _5"> </span>boxes.<span class="_ _5"> </span>The<span class="_ _5"> </span>best<span class="_ _5"> </span>case<span class="_ _5"> </span>is<span class="_ _5"> </span>a<span class="_ _5"> </span>loop<span class="_ _5"> </span>where<span class="_ _5"> </span>the<span class="_ _5"> </span>types<span class="_ _5"> </span>at<span class="_ _5"> </span>the<span class="_ _5"> </span>loop</div><div class="t m0 x32 h5 yc7 ff2 fs3 fc0 sc0 ls0 ws0">edge<span class="_ _5"> </span>are<span class="_ _5"> </span>the<span class="_ _5"> </span>same<span class="_ _5"> </span>as<span class="_ _5"> </span>the<span class="_ _5"> </span>types<span class="_ _5"> </span>on<span class="_ _5"> </span>entry–then<span class="_ _5"> </span>TM<span class="_ _3"> </span>can<span class="_ _5"> </span>stay<span class="_ _5"> </span>in<span class="_ _5"> </span>nati<span class="_ _2"></span>v<span class="_ _2"></span>e</div><div class="t m0 x32 h5 yc8 ff2 fs3 fc0 sc0 ls0 ws0">code<span class="_ _5"> </span>until<span class="_ _5"> </span>the<span class="_ _3"> </span>loop<span class="_ _5"> </span>is<span class="_ _5"> </span>done.</div><div class="t m0 x32 h5 yc9 ff2 fs3 fc0 sc0 ls0 ws0">a<span class="_ _3"> </span>set<span class="_ _3"> </span>of<span class="_ _3"> </span>industry<span class="_ _3"> </span>benchmarks.<span class="_ _3"> </span>The<span class="_ _3"> </span>paper<span class="_ _3"> </span>ends<span class="_ _3"> </span>with<span class="_ _3"> </span>conclusions<span class="_ _3"> </span>in</div><div class="t m0 x32 h5 yca ff2 fs3 fc0 sc0 ls0 ws0">Section<span class="_ _5"> </span>9<span class="_ _5"> </span>and<span class="_ _5"> </span>an<span class="_ _5"> </span>outlook<span class="_ _7"> </span>on<span class="_ _5"> </span>future<span class="_ _5"> </span>work<span class="_ _5"> </span>is<span class="_ _5"> </span>presented<span class="_ _5"> </span>in<span class="_ _7"> </span>Section<span class="_ _5"> </span>10.</div><div class="t m0 x32 h9 ycb ff1 fs1 fc0 sc0 ls0 ws0">2.<span class="_ _a"> </span>Overview:<span class="_ _3"> </span>Example<span class="_ _3"> </span>T<span class="_ _b"></span>racing<span class="_ _3"> </span>Run</div><div class="t m0 x32 h5 ycc ff2 fs3 fc0 sc0 ls0 ws0">This<span class="_ _d"> </span>section<span class="_ _d"> </span>provides<span class="_ _8"> </span>an<span class="_ _d"> </span>overvie<span class="_ _2"></span>w<span class="_ _d"> </span>of<span class="_ _d"> </span>our<span class="_ _d"> </span>system<span class="_ _d"> </span>by<span class="_ _d"> </span>describing</div><div class="t m0 x32 h5 ycd ff2 fs3 fc0 sc0 ls0 ws0">how<span class="_ _d"> </span>T<span class="_ _2"></span>raceMonk<span class="_ _2"></span>ey<span class="_ _d"> </span>ex<span class="_ _2"></span>ecutes<span class="_ _d"> </span>an<span class="_ _d"> </span>example<span class="_ _d"> </span>program.<span class="_ _d"> </span>The<span class="_ _1"> </span>e<span class="_ _2"></span>xample</div><div class="t m0 x32 h5 yce ff2 fs3 fc0 sc0 ls0 ws0">program,<span class="_ _5"> </span>shown<span class="_ _5"> </span>in<span class="_ _5"> </span>Figure<span class="_ _5"> </span>1,<span class="_ _5"> </span>computes<span class="_ _5"> </span>the<span class="_ _5"> </span>first<span class="_ _5"> </span>100<span class="_ _5"> </span>prime<span class="_ _5"> </span>numbers</div><div class="t m0 x32 h5 ycf ff2 fs3 fc0 sc0 ls0 ws0">with<span class="_ _5"> </span>nested<span class="_ _7"> </span>loops.<span class="_ _7"> </span>The<span class="_ _5"> </span>narra<span class="_ _2"></span>ti<span class="_ _2"></span>ve<span class="_ _7"> </span>should<span class="_ _5"> </span>be<span class="_ _7"> </span>read<span class="_ _7"> </span>along<span class="_ _5"> </span>with<span class="_ _7"> </span>Figure<span class="_ _5"> </span>2,</div><div class="t m0 x32 h5 yd0 ff2 fs3 fc0 sc0 ls0 ws0">which<span class="_ _3"> </span>describes<span class="_ _3"> </span>the<span class="_ _3"> </span>acti<span class="_ _2"></span>vities<span class="_ _3"> </span>T<span class="_ _2"></span>raceMonk<span class="_ _2"></span>e<span class="_ _2"></span>y<span class="_ _3"> </span>performs<span class="_ _3"> </span>and<span class="_ _3"> </span>when<span class="_ _5"> </span>it</div><div class="t m0 x32 h5 yd1 ff2 fs3 fc0 sc0 ls0 ws0">transitions<span class="_ _5"> </span>between<span class="_ _5"> </span>the<span class="_ _3"> </span>loops.</div><div class="t m0 x33 h5 yd2 ff2 fs3 fc0 sc0 ls0 ws0">T<span class="_ _2"></span>raceMonke<span class="_ _2"></span>y<span class="_ _6"> </span>alw<span class="_ _2"></span>ays<span class="_ _3"> </span>begins<span class="_ _6"> </span>ex<span class="_ _2"></span>ecuting<span class="_ _3"> </span>a<span class="_ _6"> </span>program<span class="_ _6"> </span>in<span class="_ _3"> </span>the<span class="_ _6"> </span>byte-</div><div class="t m0 x32 h5 yd3 ff2 fs3 fc0 sc0 ls0 ws0">code<span class="_ _6"> </span>interpreter<span class="_ _2"></span>.<span class="_ _6"> </span>Every<span class="_ _6"> </span>loop<span class="_ _6"> </span>back<span class="_ _6"> </span>edge<span class="_ _6"> </span>is<span class="_ _8"> </span>a<span class="_ _6"> </span>potential<span class="_ _6"> </span>trace<span class="_ _6"> </span>point.</div><div class="t m0 x32 h5 y94 ff2 fs3 fc0 sc0 ls0 ws0">When<span class="_ _8"> </span>the<span class="_ _6"> </span>interpreter<span class="_ _8"> </span>crosses<span class="_ _8"> </span>a<span class="_ _8"> </span>loop<span class="_ _8"> </span>edge,<span class="_ _6"> </span>TraceMonke<span class="_ _2"></span>y<span class="_ _6"> </span>inv<span class="_ _2"></span>okes</div><div class="t m0 x32 h5 y95 ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _3"> </span><span class="ffa">tr<span class="_ _2"></span>ace<span class="_ _3"> </span>monitor<span class="ff2">,<span class="_ _3"> </span>which<span class="_ _5"> </span>may<span class="_ _3"> </span>decide<span class="_ _3"> </span>to<span class="_ _5"> </span>record<span class="_ _3"> </span>or<span class="_ _3"> </span>ex<span class="_ _2"></span>ecute<span class="_ _3"> </span>a<span class="_ _5"> </span>native</span></span></div><div class="t m0 x32 h5 y96 ff2 fs3 fc0 sc0 ls0 ws0">trace.<span class="_ _5"> </span>At<span class="_ _5"> </span>the<span class="_ _5"> </span>start<span class="_ _5"> </span>of<span class="_ _3"> </span>e<span class="_ _2"></span>x<span class="_ _2"></span>ecution,<span class="_ _5"> </span>there<span class="_ _5"> </span>are<span class="_ _5"> </span>no<span class="_ _5"> </span>compiled<span class="_ _5"> </span>traces<span class="_ _3"> </span>yet,<span class="_ _5"> </span>so</div><div class="t m0 x32 h5 y97 ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _5"> </span>trace<span class="_ _7"> </span>monitor<span class="_ _7"> </span>counts<span class="_ _5"> </span>the<span class="_ _7"> </span>number<span class="_ _5"> </span>of<span class="_ _7"> </span>times<span class="_ _5"> </span>each<span class="_ _7"> </span>loop<span class="_ _7"> </span>back<span class="_ _5"> </span>edge<span class="_ _7"> </span>is</div><div class="t m0 x32 h5 y98 ff2 fs3 fc0 sc0 ls0 ws0">ex<span class="_ _2"></span>ecuted<span class="_ _5"> </span>until<span class="_ _5"> </span>a<span class="_ _7"> </span>loop<span class="_ _5"> </span>becomes<span class="_ _5"> </span><span class="ffa">hot</span>,<span class="_ _7"> </span>currently<span class="_ _5"> </span>after<span class="_ _5"> </span>2<span class="_ _5"> </span>crossings.<span class="_ _7"> </span>Note</div><div class="t m0 x32 h5 y99 ff2 fs3 fc0 sc0 ls0 ws0">that<span class="_ _5"> </span>the<span class="_ _7"> </span>way<span class="_ _5"> </span>our<span class="_ _7"> </span>loops<span class="_ _5"> </span>are<span class="_ _7"> </span>compiled,<span class="_ _5"> </span>the<span class="_ _7"> </span>loop<span class="_ _5"> </span>edge<span class="_ _7"> </span>is<span class="_ _5"> </span>crossed<span class="_ _5"> </span>before</div><div class="t m0 x32 h5 y9a ff2 fs3 fc0 sc0 ls0 ws0">entering<span class="_ _3"> </span>the<span class="_ _5"> </span>loop,<span class="_ _3"> </span>so<span class="_ _5"> </span>the<span class="_ _3"> </span>second<span class="_ _5"> </span>crossing<span class="_ _3"> </span>occurs<span class="_ _5"> </span>immediately<span class="_ _3"> </span>after</div><div class="t m0 x32 h5 y9b ff2 fs3 fc0 sc0 ls0 ws0">the<span class="_ _5"> </span>first<span class="_ _5"> </span>iteration.</div><div class="t m0 x33 h5 y9c ff2 fs3 fc0 sc0 ls0 ws0">Here<span class="_ _1"> </span>is<span class="_ _d"> </span>the<span class="_ _1"> </span>sequence<span class="_ _d"> </span>of<span class="_ _1"> </span>e<span class="_ _2"></span>v<span class="_ _2"></span>ents<span class="_ _d"> </span>broken<span class="_ _1"> </span>do<span class="_ _2"></span>wn<span class="_ _d"> </span>by<span class="_ _1"> </span>outer<span class="_ _d"> </span>loop</div><div class="t m0 x32 h5 y9d ff2 fs3 fc0 sc0 ls0 ws0">iteration:</div></div><div class="pi" data-data='{"ctm":[1.673203,0.000000,0.000000,1.673203,0.000000,0.000000]}'></div></div></div>
|