1
0
mirror of https://github.com/pdf2htmlEX/pdf2htmlEX.git synced 2024-12-22 04:50:09 +00:00
pdf2htmlEX/demo/demo2.page
2013-09-28 13:30:57 +08:00

2 lines
79 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>&lt;<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>&lt;<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>entrythen<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>