ࡱ> @=#&3}-hfƴ(@@J(!Զ* (Q_CZlL4X TcDz̽ӽtgΙsf^QƠZUbG8 V0X? Gaཕ]6mh?hLf0,/㭰F ] Z^;҆\I7rT<9T٭ʬfWBLe(Q>_! ' A(eѲLCV29~`P[:5]w_k'J *><%vUF"gƓhBG>pϧ걥"qx=T@)0z(;V#G{P_6&SԘ͏HQx~ۦyc;9{t̏51<3>Cч0 }TGGEd}s4~|;tfH9:W&jLȱ]:E9*uVɵ'?xZZK\>kiRv Yǔ]ZCPذϓچ-8MHWIώcAupߘAPn6`H>$c>75j8ZH~!1^ o"_{DE~Kg|/|I ,~Hg!!rĿ85x+Gx8I:Eo@BB! B CQqd1>Gw*:eb{ه-=B?To?vD̠L|f!a<a8"~;3|EgNzx~Ps8"~;3˝8˝C1Sc3WV+Cء)EUqDP=F zVR 9]fvoPH7T^ G{fg4Z=TSfٞ=z> 2r3v]pa/?}(\*S՟8w^u]7W]jnT=ޫT}Tj7sͶO ?l6D;E|~l5:~q}/Kxxga^C;ԾDKi?m3?Nu6nqx2ˏ/3k)֦x']x55l)J8KY,TU<_G0j[bkɷRSa<ld%NS~<Bɻ*wa9 xC5x׈>|.߃WaV^ob&oo ?[;e}Qy(!;üW $[ g2e%z,fPK=ȭ#iߒ{4Was:ɛoy_دu'-دf̍r_6cϖ%E ȅȶHء=O+K)nOG"s'b÷G'M>[HzRh~IXH꽳[ yUﱸn38y\י}_ZA4?4=gJY[OYI|J}H,hοɇR"nLVZ~ #Sp)3NW}pb'yޔզ{;śonwUU]BJoo'S o48M!@=? gC&]j WSxZ}lEmʕ-PhE AA"D imZ>lHhB-(!Fj1 $ZLJ 5!7;s7;X(3v{ofB6& BJrt1!֢Prs!?SB҈vxd_MAXIG`Y]GI޻P.\lLA7xL<8d.f䵦H~q0*3I܅<_NB-f$LH=+ʃ$[Ƌ2vY> wZh<=U_{' qd5q},OS“맗pՀ99>U W Ū "B帟P2vPTCGjW['cd͏c\ bs4gT&7ir[ۚ_ll䭚<#ߪ`*{ԣ j}p£TGBg@\9B:e}?R::K2..XX._;uH=&%RtG޻7C)iʒ͑3P;sd#\iX#Z*|>mǢrQn\ &",6@|3 Ui'X9G~ӌ(Ub~M?H%+ß9$Pۀbm~Ü3bwg ,v!o3_E1NpJ_ƍ#CԏWZɘm3AإN;\X;Acc0E=V)39*}cc&Oᯥtj9r}cco)ARw8W)]®@a+>ݱ1?*l;3u73<qw`TaŨ9,Q7JC{oy+1~W*:2[NFkhrd YO*no}sXW7? B{|d}fsʼn0oC2^K:qfsabH8P)epO%kP[ln7 /&]r<\nVZIۚokjVM!C +COK&Or#&XW博QhM^feZ5yw  !gNw1'&[r p9L)kKXGxoeU·{SnN)cI8k‹E>okRf$f׋@/H-'d(yInqov$"Q__S?ұ~h%Q)bWʂ _7z"}lo=+e r*Rwb>KRJҮjhzhY2J]CwCwW@_ϕx6)1~{]%Ѝsfhq-ncۓe; 56Km0x*~'-L[ڈz٨;M=4~6|g1_1R2S܇4f[S?|gWF2M5l%ko=d{se-Ps~G>~Խ"}HSFxEZ=_YjlIY2zguX9U/f(snIp)A_[:rl1o =j1bMҽT-}(v;G 9巖, S~5N! )`!.wax|Kzb̀i Ixcdd``~0XHs3D@,&FFrN,#pv ;C(12020edD* )+C ppQf0Kp|Ul0f.Kk AKj?_*#tYdYBGD /Y+/CLM$Bd !kї{v [ w {(/P^x+c }5At/@=da"? ]j WxY]hTG>3{YG& jjC- X 1Z5٘%ji XD)%-h RĪ}h_A+T -%=g?prg;̜93s@JQ@C pav}=qY(n'&ѯ}FA% ~˥(|Igg,(tsBbȡN .KԢ*C1 ALU(/͍xc|4,Pwg,C,LeJʼ^mgugtn/TΑv:V>1 38QUFLgƓޡBi@1gs7e'ca; Krf^0O'T4I[hl9e|8c%C1x[n >x7mlڔX%uc'ɷ<)WѦM|rt*.~,T(u\,5jUPK\JKRz6r껤",S~ŗ>W yDQ7&lPQ10Zɱyۍ[el ΁G[GX)#Bzrگs5_H. 9H?·ِ2cy_`|$6$'rϧ߁QwWwz?|g4&2\'T{]ƶ_>p%(|*Sg?c?.8Ewu~Sn-Gو+*G|9f7 ~V@6QVN" ql3x:%nS{:xk - [7  | HNR$_u_qi?mE<wx?0o05 maWX _ѯV؍>u_* _Yއ:Ea }yMYĿ'VX^ݴ7ۏ;ƿ >.e>zHӯ|m}yZK֭0?Qc1z,is9=),Sf{bMΟL~[JyÇ}åq~|𲿀j{p+ߺh_sϻUŜs~vPlṕX~X8.:+bU fW^Nug/we;zŽS /nw[vc~/AܙUaKΝrMe窐miNksS'=({E*rFY<&rGy}hO6ѪUil73oa'/,]E\wR~.gL8k@=q܌4Bmi (]j WxZklE>3-mBiXb411*54l i,J)(!VD)UALQb$U1c5;;{w t893sri}?K y:| i'Mv9tE?a q3:!2䭆ՐW*C^bK iþF{ y!o6͆coVooQS闲oRgƥ֚%ռ[0qV)H=ޖ}_ ]$ [{.L'9k"UJKc1a?xy)T? wbsۆhYkpx@[ ~1)Ȼ ѯfX o=+xoc&w#g/w^v@zc'/?ݴYiAJ-9;.gy;]㯷:X:"Qqd1/,#TL}ʶ.~N|..c }|X 8At~Pu2{ccbf'jl' ;30|2bcbfk>,~@`_ ~P `ۥ /~L?ۭ~,.5ke[Ak%Hqu{g2MGܽ-t8"7}vh:q.KnsbQLw&'}p?[f6TGEe_m+[(ۮ.56YKYuQG54dn/L8l. 5f!x/2\?-7bl[ y!2UĐӆo6c{ y!o6I~.=ùEkt,{0s_Ne]!Аrʺ|!n|/6Đ NY9acW1&[&/"Np>6!yՈu6?<~ڳ$?7 :'!H["g?)k ?_OϏȟp?[ߐ??"\h _ o?'Hs"(G-̃;_Vf~ V)NKC d9ae= ׫da~w%oƿ|yo+Y^H`c4a>PH$tWt{kb[h r"|n%ɢf/f9v0Bj.c.% kc_ZlADž~7IGẕ,&X'|h]JK6YgW>% &Sqyk_T3l /:yC<\4Kj'uwySZjyGO{q կfϭ.m9~v3ʈk ,k1zԵڢ|SVwU{3"F[x4sbW w5~jW,p9|d#9_qmgȑβޔզcX7i{J^Lro'?U$o kY@=*ϘPJ3{ *? B\BQ)@7l#D 5BBFML$QxO&c}!$51D L9sgvgOljos39sfΝW:-@/Q` ;8y(HT`DZ\"k-Է%.lqZo-7 ){-Rq9ֿ%ŜȖ e.iO_ِg.A.OG4d(qcAmgs>[w_Xns]Øtȉh}0<-9O8FBs+9Ս-eX4O*,h"䋰Ď?eƤ[B67t,}T'c8## O3<] fx) w'8\:X]ꊇ'ɷ+h99:8LN*_:[Z/&MMN1:S~N'_A.Š>x9]_S>%3Ek eAiGG$2eI}RdNʤ -D?oX仡ĕ%;jo`7 I\٨0D!%TRH?s#9Y̍$)'1ZY@SOBR%[{ADru#{G$l1ώ_du]pvA?em_H/6N߽k(K? vc.pڇʇO2Q}ӭ\q[Ά'*kryXx:Vl>tmNd+^oC]3AM冸&h̐"yl;?m|To;=fx) w>(/ O3<?O2(_T`3:_8m/0S0-13 }R0ʐy8l]{xוP71^E ui^#{Jy_6l)rwv< +zW&z C3:TziYb^]ҼqGq&`"~u_m5ufZ"@EO%ޏz^Kw>cCM{esMkzuU*5ߏ VσjXwBzƸo|mWc4x(!ةμ\|67s~`!iqOռ5oAg,K9svv3 ɞk&|hGΓT 'n@{5턿vq#x .3.Ob=w.WioMĈop"Ux8m.թ!};ǟ;/r'؝;hoĽ /7_zk3L}RZKlVfX;;$wasa\XߧZX0y2<u|{ +M!,0鳭-ڪM%W6Qk=Microsoft Office Excel-DiagrammDiagramm Excel.Chart.80>Microsoft Office Excel-DiagrammD Diagramm Excel.Chart.80>Microsoft Office Excel-Diagrammb Diagramm Excel.Chart.80>Microsoft Office Excel-Diagramm`Diagramm Excel.Chart.80>Microsoft Office Excel-Diagramm/ 0DArialNew RomanttP, 0"DStarSymbolomanttP, 0, DLuxi SansomanttP, 00DWingdingsomanttP, 0@DCourier NewmanttP, 01PDSymbol NewmanttP, 0`DTimes New RomanttP, 0@ . @n?" dd@  @@``  | h ,L/ 7  H H>  * & #  \   /6/  ( D5- 7+ p=@A .'lZno xy ~ * q  C "$#&embedded systems  cost and energy consumption depend on the size of the built-in memory limited amount of memory more and more functionality is packed on embedded systems memory must be used more efficiently procedural abstraction reduces code size by extracting duplicate code segmentsF;%QFDD:%DR  procedural abstraction  post link-time optimization of static binaries: whole program code, including all libraries function prolog and epilog constant address calculations precise control flow must be reconstructed offset tables register indirect jumpsR1g+Q-1  $procedural abstraction (suffix tree) % textual matching of instruction sequences frequent instruction sequences are taken from the suffix tree various optimizations: special treatment for labels, jumps, & fingerprinting canonic register mapping & but fundamental suffix tree matching problem persists hR707D  nduplicate search (suffix tree) @... 2000: add r2, r1, 0x42 2004: sub r2, r2, r3 2008: add r4, r2, 0x4 200c: load r3, 0x10710 2010: sub r2, r2, r3 2014: load r3, 0x1071c 2018: add r4, r2, 0x4 ... 2504: mul r2, r1, 0x5 2508: sub r2, r2, r3 250c: add r4, r2, 0x4 2510: load r3, 0x10710 2514: sub r2, r2, r3 2518: load r3, 0x1071c 251c: add r4, r2, 0x4 ...AA@ ?... 3118: div r3, r2, r1 311c: sub r2, r2, r3 3120: add r4, r2, 0x4 3124: load r3, 0x10710 3128: sub r2, r2, r3 312c: load r3, 0x1071c 3130: add r4, r2, 0x4 ... 400c: sub r3, r2, 0x42 4010: sub r2, r2, r3 4014: load r3, 0x10710 4018: add r4, r2, 0x4 401c: sub r2, r2, r3 4020: add r4, r2, 0x4 4024: load r3, 0x1071c ...$@?? oextraction (suffix tree) "... 2000: add r2, r1, 0x42 2004: call 0x5070 ... 2504: mul r2, r1, 0x5 2508: call 0x5070 ... 3118: div r3, r2, r1 311c: call 0x5070 ... 400c: sub r3, r2, 0x42 4010: sub r2, r2, r3 4014: load r3, 0x10710 4018: add r4, r2, 0x4 401c: sub r2, r2, r3 4020: add r4, r2, 0x4 4024: load r3, 0x1071c##" ... 5070: sub r2, r2, r3 5074: load r3, 0x10710 5078: add r4, r2, 0x4 507c: sub r2, r2, r3 5080: add r4, r2, 0x4 5084: load r3, 0x1071c 5088: return'candidates selection (iterative greedy)(( (  $saved instructions (absolute values)$ $saved instructions (relative values)$ $procedural abstraction (graph-based) % ptransform instruction sequences into minimal data flow graphs (DFG) search for frequent subgraphs in DFGs  q duplicate search (graph-based) @... 2000: add r2, r1, 0x42 2004: sub r2, r2, r3 2008: add r4, r2, 0x4 200c: load r3, 0x10710 2010: sub r2, r2, r3 2014: load r3, 0x1071c 2018: add r4, r2, 0x4 ... 2504: mul r2, r1, 0x5 2508: sub r2, r2, r3 250c: add r4, r2, 0x4 2510: load r3, 0x10710 2514: sub r2, r2, r3 2518: load r3, 0x1071c 251c: add r4, r2, 0x4 ...AA@ ?... 3118: div r3, r2, r1 311c: sub r2, r2, r3 3120: add r4, r2, 0x4 3124: load r3, 0x10710 3128: sub r2, r2, r3 312c: load r3, 0x1071c 3130: add r4, r2, 0x4 ... 400c: sub r3, r2, 0x42 4010: sub r2, r2, r3 4014: load r3, 0x10710 4018: add r4, r2, 0x4 401c: sub r2, r2, r3 4020: add r4, r2, 0x4 4024: load r3, 0x1071c ...@@? extraction (graph-based) ... 2000: add r2, r1, 0x42 2004: call 0x5070 ... 2504: mul r2, r1, 0x5 2508: call 0x5070 ... 3118: div r3, r2, r1 311c: call 0x5070 ... 400c: sub r3, r2, 0x42 4010: call 0x5070 ...  ... 5070: sub r2, r2, r3 5074: load r3, 0x10710 5078: add r4, r2, 0x4 507c: sub r2, r2, r3 5080: add r4, r2, 0x4 5084: load r3, 0x1071c 5088: returnsearch lattice  /graph miner (procedural abstraction extensions) 0 pruning necessary because of the size of the search lattice number of occurrences must decrease with growing subgraph size calculate the maximal-independent set (MIS) of subgraphs to make pruning possible again  /graph miner (procedural abstraction extensions) 0 3invalid subgraph pruning during candidate selection 4 candidates selection (optimal)   $procedural abstraction (graph-based)$ Pro no special treatment of branches and labels resistant to instruction reordering can be used to extract general code fragments, not limited to basic blocks or single-entry single-exit regions*   rCon subgraph-isomorphism test is NP-complete extremely huge search lattice (exponential in time and memory usage)*oo s $saved instructions (absolute values)$ $saved instructions (relative values)$ optimization time (sec.)   future work  increase number of identified duplicate candidates extend search areas from basic blocks to function and whole program canonic register mapping speedup duplicate search further parallelize graph search more procedural abstraction specific pruning rules to limit search latticeL3]l3]l  summary  qprocedural abstraction with DFGs result in more compact code: graph-based mining saves up to 2.6 times more instructions than the traditional approaches interesting for embedded systems (huge volumes) long optimization times affordable because of price per piece overnight or over the weekend optimization of code during the development process every saved bit countsL>\0>\0 r $Graph-Based Procedural Abstraction %%  % I A. Dreweke, M. Wrlein, D. Schell, T. Meinl, I. Fischer, M. Philippsen$J >/0!$&'()*+,-.02345g   0` 33` Sf3f` 33g` f` www3PP` ZXdbmo` \ғ3y`Ӣ` 3f3ff` 3f3FKf` hk]wwwfܹ` ff>>\`Y{ff` R>&- {p_/̴>?" dd@|?" dd@  " @ ` n?" dd@   @@``PT    @ ` `$p>>   (   `"  s *GAAA"q`"  s *G+D3"  6  "I  ^*Titelmasterformat durch Klicken bearbeiten+ +0  0İ "<<<  ^Textmasterformate durch Klicken bearbeiten Zweite Ebene Dritte Ebene Vierte Ebene Fnfte Ebene+     _"  Hȹ@@GD3"  Alexander Dreweke, Computer Science Department 2  Programming Systems Group, University of Erlangen-Nuremberg, Germany *J|%-`3 " ,  z |  rb  C ,AInf2-Logo"=ZaH  0޽h ? 33___PPT10i.'U+D='  = @B + 42007-02-07_uebersetzerbau3  0 0u(  `"  s *GAAA"q`"   s *G+D3"  6t<( " ( ^*Titelmasterformat durch Klicken bearbeiten+ +  0 "` 6  ( p<Formatvorlage des Untertitelmasters durch Klicken bearbeiten= ="   Hx?(@@GD3" `&%-`    r%   0I("  qProgramming Systems Group, Computer Science Department 2 University of Erlangen-Nuremberg, Germany www2.cs.fau.derr r b  C ,AInf2-Logo"=ZaH  0޽h ? 33___PPT10i.' 9D+D='  = @B +4 0 `@D(  @  @ NtTWTW     v* ***>>SS @ NTWTW  O  x* ***>>SSd @ c $ ?AT @ @ NLTWTW no  ^Textmasterformate durch Klicken bearbeiten Zweite Ebene Dritte Ebene Vierte Ebene Fnfte Ebene+     _ @ TXTWTW     v* ***>>SS @ TTWTW  O  x* ***>>SSH @ 0ܖ6g ? 3380___PPT10. # P8(    0D     >*   0  O  @*   6     >*   6|  O  @* H  0ܖ6g ? 3380___PPT10. 1- 0  (:(  (r ( S O(  (  ( S Z(1 _  ( "@08XH ( 0޽h ? 33___PPT10i.e1+D='  = @B +} ( 0 4$(  4r 4 S ( I  ( r 4 S  <<< ( H 4 0޽h ? 33___PPT10i.XWte+D='  = @B + ) 0 %Y4  (  r  S  I    I S h <T <  &xq z {L ]V   #  9@ 7 s  ]V ZB  s *D17 ZB  s *D1s ZB  s *D17 7 ZB  s *D1s  s ZB  s *D17 s  ZB  s *D17  ZB  s *D1 s    0D(] *  Nbinary(2  4L f[R  ?#  j -a T 7 s  "# f[R ZB # s *D17 ZB $ s *D1s ZB % s *D17 7 ZB & s *D1s  s ZB ' s *D17 s  ZB ( s *D17  ZB ) s *D1 s   * 60(fJ  Xoptimized binary(2  ^B 7 6DDp  nnZ L  W  C#  L  9 H` (1"`C W  S postprocessor(2   : H1"`/ C  P extraction (2    ; H$(1"` / Ycandidate selection(2   < H (1"`  Vduplicate search(2   = Hl(1"`  R preprocessor (2   L r F#  6 fB @B 6DDp ZB A s *DDprZB BB s *DDp^B G 6DDp nn@ O H(1 "`^r ,$@ 0 Vduplicate search(2   W H!(1 "`y  ,$D 0 Ycandidate selection(2  H  0޽h ? 33___PPT10.OWI+^D'  = @B D' = @BA?%,( < +O%,( < +D' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*O%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*W%(+p+0+O0 ++0+W0 + * 0  86(  8x 8 c $( I  ( ~ 8 s *̜( <<< ( H 8 0޽h ? 33___PPT10i.XWte+D='  = @B +  0   P,< (    6uԔ"`h 3,$D 0   s *"` ,$@ 0r  S ` }  I  }    s *"`,$@ 0  s *"`[ A,$@ 0L  W  # LHb   H(1"`C W  U postprocessor(2     HT(1"`/ C  R extraction (2       H(1"` / [candidate selection(2    ! H} 1"`  Zduplicate search(2    " HH} 1"`  T preprocessor (2    l w  ,w ,$D 0HT >  &# Zw  n2 ' 0D"`> n2 (B 0D"`> HT >  )# Z n2 * 0D"`> n2 +B 0D"`> x  c $$}  <T < }  x  c $}  < << }  H  0޽h ? 33v n ___PPT10N .TUc+ D" '  = @B D ' = @BA?%,( < +O%,( < +D' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*,%(+   0   p*^ (  x  c $)}  I  }     0+}  '2  B  `  s *"`6e l  6uԔ"`3 `  s *"`q6`  s *"`6`  s *"` ~  s *?}  <T < }  r  S  < <<  F w   w  HT >  # Zw  n2   0D"`> n2 !B 0D"`> HT >  "# Z n2 # 0D"`> n2 $B 0D"`> L  W  %# LHb  & H?} 1"`C W  U postprocessor(2    ' HD} 1"`/ C  T extraction (2     ( HH} 1"` / [candidate selection(2    ) H\C} 1"`  Xduplicate search(2    * HO} 1"`  T preprocessor (2    H  0޽h ? 33___PPT10i.TUc+D='  = @B +d 5 0 DD` l$~D(  $x $ c $j}  I  }  L  W  3$# LHb  4$ H\l} 1"`C W  U postprocessor(2    5$ Hp} 1"`/ C  R extraction (2     6$ HTu} 1"` / ]candidate selection(2    7$ Hly} 1"`  Xduplicate search(2    8$ Hpw} 1"`  T preprocessor (2    F T Z$ T [$ 0|} T J=21&0N i  \$ i  ]$ <T} u"`iV 940 ^$ B|} "`i 930 _$ B} "`iV 930 `$ <} u"`i 940 a$ <8} u"`i4   940 b$ B̗} "`i4  930t c$ 6D8c"`it d$ 6D8c"`i z  : .  e$  : . ,$D 0 f$ B`} "`:  Z3 instructions0  `B g$B 0D8c BB`B h$B 0D8c B`B i$B 0D8c B. z  :   j$  :  ,$D 0 k$ <|} u"`. :  r4 instructions$0   `B l$B 0Du8c   `B m$ 0Du8c  `B n$ 0Du8c  z  V: 4  o$ V : 4 ,$D 0t p$ 6D8c"`: T q$ 6|} "`: T V7 instructions(2  `B r$ 0DD8c V`B s$B 0DD8c 4 z    t$ " n,$D 0 u$ 0}    extraction benefit: (L (N  1)  (N + 1) > 0 L: code length N: # of occurrencesS 2@D@Df @Df@`@Fff S  v$ 0D} J z  Ncall(2   w$ 0}    Mret(2  `B x$ 0D8cV ' `B y$ 0D8c ) l  ^ $" n,$D 0 {$ 6$}  ^ extraction benefit: (7 (2  1)  (2 + 1) = 4 > 0 L: code length N: # of occurrencesW 2@DD@Df @Df@` @FfDf W  |$ 6x}  '  Ncall(2   }$ 6}    Mret(2  fB ~$ 6D8c{ A fB $ 6D8cE~   z   $  ,$D  0 $ 0} B J=17&0 N  C  $  C UN  Wi  $ C;  $ B} "` W0 930 $ <} u"` Wf  940 $ <@} u"` 2 W  940 $ B} "` W2  930t $ 6D8c"` Wi N  0W $  0Wt $ 6D8c"` 0W $ Hh} "` 0W Rcall(2 D  N  u W  $  f W t $ 6D8c"` u W  $ H} "` u W  Rcall(2 D   $ H} "` Wi  Qret(2 D  TB $ c $D TB $ c $D TB $ c $D pTB $ c $D 8TB $ c $D  z  ^ $ " n,$D  0 $ 0  ^ extraction benefit: (4 (2  1)  (2 + 1) = 1 > 0 L: code length N: # of occurrencesW 2@Du@Df @Df@` @Ffuf W  $ 0   '  Ncall(2   $ 0T    Mret(2  `B $ 0D8c{ A `B $ 0D8cE~  az   $  ,$D 0 $ 0 1   J=16&0N - ed $  4 TB $ c $D. TB $ c $D. 55TB $ c $D. TB $ c $D-  h TB $ c $D.   $ B "`e/ 930 $ <d u"` e  940 $ B  "` e  930t $ 6D8c"` e T  0W $# /et $ 6D8c"` 0W $ H($ "` 0W Rcall(2 D  T  u W  $# 3 e t $ 6D8c"` u W  $ Hd( "` u W  Rcall(2 D   $ H\, "` e  Qret(2 D  T M $# e#  $ H0 u"`M Rcall(2 u  t $ 6uu8c"`MT M $#  c  $ H. u"`M Rcall(2 u  t $ 6uu8c"`MTB $ c $D0  dT M $#  cF $ H8 u"`M Qret(2 u  t $ 6uu8c"`Mz  ^ $ " n,$D 0 $ 0<  ^ extraction benefit: (3 (2  1)  (2 + 1) = 0 L: code length N: # of occurrencesS 2@D@Df @Df@`@Fff S  $ 0J  '  Ncall(2   $ 0N    Mret(2  `B $ 0D8c{ A `B $ 0D8cE~  H $ 0޽h ? 33___PPT10.8J8+5D^'  = @B D' = @BA?%,( < +O%,( < +D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*e$%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*j$%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*o$%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*t$%(D' =%(Df' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*t$%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D' =%(Dz' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*j$%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*o$%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*e$%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D' =%(Df' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*$%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D' =%(Df' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*$%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(+ 0 0  *(  x  c $0^  I     0  `A ? ? {     0`  5really small input binaries: gcc -Os, dietlibc linked46(2 6   0f {m ] MiBench programs on ARM  2  H  0޽h ? 33___PPT10i.:J+D='  = @B + 3 0  N(  x  c $hm  I     0  `A `? ? { `    0o  5really small input binaries: gcc -Os, dietlibc linked46(2 6   0$v {m ] MiBench programs on ARM  2    <y "` w,$D 0 n good savings, still not optimal! ! H  0޽h ? 33___PPT10.:J+|3DO'  = @B D ' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(+8+0+0 + + 0   %)<(  <x < c $  I     < S   <T <<$ 0   D8  <<  )<<[   < 0$   << _sub r2, r2, r3 add r4, r2, 0x4 load r3, 0x10710 sub r2, r2, r3 load r3, 0x1071c add r4, r2, 0x4``_sN  >j  < \  N  d   <  tB  < 61"` d   < BH "` Y  Kadd 2  N ? k|   < M y tB < 61"`? k|  < Bԑ "`C kq  Lsub  2  N  d  <  >tB < 61"` d  < B\ "` Y  Lload 2  N ? k|  < MyqtB < 61"`? k|  < B "`C kq  Lsub  2  N  d  <  tB < 61"` d  < B  "` Y  Kadd 2  N  d  <  >tB < 61"` d  < B\ "` Y  Lload 2  N  d  <  jtB < 61"` d  < B "` Y  Kadd 2  N  d  < >gtB  < 61"` d  !< B  "` Y  Lload 2  `B "< 0D1i| 1 `B #< 0D1ml5`B $< 0D1m`B %<B 0D1 m `B &<B 0D1m5`B '<B 0D1oi`B (< 0Dup H < 0޽h ? 33D<___PPT10.XWte+t<D'  = @B Ds' = @BA?%,( < +O%,( < +Da' =%(%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*<D%(DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*<Hn%(+8+0+<0 +  - 0   L (  `  s *"` x  c $  I    `  s *"``  s *"`[ AL  W  # LHb   H 1"`C W  U postprocessor(2      H  1"`/ C  R extraction (2       H 1"` / [candidate selection(2      HT 1"`  Zduplicate search(2      Hl 1"`  T preprocessor (2    F w    w HT >  # Zw  n2  0D"`> n2 B 0D"`> HT >  # Z n2  0D"`> n2 B 0D"`> ~  s *<  <T <   `  s *"`a G~  s *0  < <<   H  0޽h ? 33___PPT10i.TUc+D='  = @B +  . 0   b (  x  c $$  I      0  '2  B  `  s *"`6e `  s *"`q6`  s *"`6`  s *"` x   c $p  < <<   L  W  # LHb   H 1"`C W  U postprocessor(2     HD 1"`/ C  T extraction (2      H 1"` / [candidate selection(2     H( 1"`  Xduplicate search(2     H 1"`  T preprocessor (2    `  s *"`E < ~   s *`  <T <   H  0޽h ? 33___PPT10i.TUc+D='  = @B +Џ 4 0 ww@ !w(  L  W  # LHb   H% 1"`C W  U postprocessor(2     H' 1"`/ C  R extraction (2      H(. 1"` / [candidate selection(2     H1 1"`  Zduplicate search(2     H5 1"`  T preprocessor (2    x  c $7  I      B: "`1 Y ,$ 0 X* & 2  zz ,?   ,? ,$D 0`B B 0DD1,? N :  :N ? k   qtB  61"`? k|   Bd@ "`C k  Lsub  2  t  61"`:z   ,$D 0`B B 0DD1=N v  vN  i   )VtB  61"` d   BE "` i  Kadd 2  N ? k   *VtB  61"`? k|   Bo :#   oN  i  ;  tB < 61"` d  = B䊂 "` i  Kadd 2  N ? k  > M y tB ? 61"`? k|  @ Bp "`C k  Lsub  2  N  i  A  >tB B 61"` d  C B "` i  Lload 2  N ? k  D MyvtB E 61"`? k|  F Bh "`C k  Lsub  2  N  i  G  tB H 61"` d  I B̜ "` i  Kadd 2  N  i  J  >tB K 61"` d  L BH "` i  Lload 2  N  i  M  otB N 61"` d  O BФ "` i  Kadd 2  N  i  P >ltB Q 61"` d  R B "` i  Lload 2  `B S 0D1i| 1 `B T 0D1ml5`B U 0D1m`B VB 0D1 m `B WB 0D1m5`B XB 0D1oit Y 61"` `B Z 0DD1? z  [ ,$D  0`B \ 0DD1N  ] N  i  ^ tB _ 61"` d  ` B "` i  Lload 2  N ? k  a tB b 61"`? k|  c BP "`C k  Lsub  2  `B d 0D1't e 61"`B f@ 0DD1 l,$D  0/z ,<? g ,<?,$D  0`B h 0DD1 c  `B iB 0DD1 ? tB j 61"` J k B蹂 "` O Ksub 2  tB l 61"` I m BP "` N Mload  2  `B n 0D1 J tB o 61"` B  p B‚ "` G  Kadd 2  `B q 0D1 F t r 61"` c `B s 0DD1G  }tB t 61"`  J u Bǂ "`  O Ksub 2  tB v 61"`  I w B˂ "`  N Mload  2  `B x 0D1 J tB y 61"`  B  z BЂ "`  G  Lload 2  `B { 0D1 F t | 61"` ` `B } 0DD1MMtB ~ 61"`9'f  Bӂ "`9"b Ksub 2  tB  61"`:&f  BX؂ "`>!f Ladd  2  `B  0D1MM&t  61"``B  0DD1G ,I`B B 0DD1? ,C tB  61"`1 ^ q  B܂ "`1 Z v Lload 2  tB  61"`:gq  B "`:cv Kadd 2  t  61"` | t  61"``B  0DD1? ? `B B 0DD1@ tB  61"`- #Z   B "`- V  Ksub 2  tB  61"`. "Z   B0 "`2 Z  Mload  2  `B  0D1C C 't  61"` | `B B 0DD1?  B   bE`FNQ&UVW))? XX6381-D81^ DS &{'LO^ D+ YL^0L8]T+ YL7Gn2H+IJ7GI:9]T:I:Q= qR&QJ 7JJ >:*;9>:+$.+] x!+] 6381$ 3-D^ D %D^0L8]TH+ YL^0L8]T7G@8Cn2H+IJI:B,= qR&N7#Q7JK J 7J>:8*;9+ +$ x!+ ] x!+$(,`C0*0*ITNT0*0* BCCloud#" ` ?B   bE`FNQ&UVW))? XX6381-D81^ DS &{'LO^ D+ YL^0L8]T+ YL7Gn2H+IJ7GI:9]T:I:Q= qR&QJ 7JJ >:*;9>:+$.+] x!+] 6381$ 3-D^ D %D^0L8]TH+ YL^0L8]T7G@8Cn2H+IJI:B,= qR&N7#Q7JK J 7J>:8*;9+ +$ x!+ ] x!+$(,`C0*0*ITNT0*0* BCCloud#" `   B   bE`FNQ&UVW))? XX6381-D81^ DS &{'LO^ D+ YL^0L8]T+ YL7Gn2H+IJ7GI:9]T:I:Q= qR&QJ 7JJ >:*;9>:+$.+] x!+] 6381$ 3-D^ D %D^0L8]TH+ YL^0L8]T7G@8Cn2H+IJI:B,= qR&N7#Q7JK J 7J>:8*;9+ +$ x!+ ] x!+$(,`C0*0*ITNT0*0* BCCloud#" ` <Q `B  0DD1R[  `B  0DD1 ` \ `B B 0DD1%` R `B  0DD1  `B B 0DD1Q  B   bE`FNQ&UVW))? XX6381-D81^ DS &{'LO^ D+ YL^0L8]T+ YL7Gn2H+IJ7GI:9]T:I:Q= qR&QJ 7JJ >:*;9>:+$.+] x!+] 6381$ 3-D^ D %D^0L8]TH+ YL^0L8]T7G@8Cn2H+IJI:B,= qR&N7#Q7JK J 7J>:8*;9+ +$ x!+ ] x!+$(,`C0*0*ITNT0*0* BCCloud#" ` B   bE`FNQ&UVW))? XX6381-D81^ DS &{'LO^ D+ YL^0L8]T+ YL7Gn2H+IJ7GI:9]T:I:Q= qR&QJ 7JJ >:*;9>:+$.+] x!+] 6381$ 3-D^ D %D^0L8]TH+ YL^0L8]T7G@8Cn2H+IJI:B,= qR&N7#Q7JK J 7J>:8*;9+ +$ x!+ ] x!+$(,`C0*0*ITNT0*0* BCCloud#" ` S`B  0DD1 `B B 0DD1I`B  0DD1RRqtB  61"`AnE  B "`AjJ Kadd 2  tB  61"`BnD  B< "`FnI Lsub  2  `B  0D1WEWtB  61"`Er=   B "`EnB  Ksub 2  `B  0D1_A_t  61"`[ H  0޽h ? 33___PPT10+O5 Dk'  = @B D&' = @BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*9%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*[%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*f%(