<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>143489</bug_id>
          
          <creation_ts>2015-04-07 11:21:51 -0700</creation_ts>
          <short_desc>Make it possible to enable LLVM FastISel</short_desc>
          <delta_ts>2015-04-10 08:10:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>ggaren</cc>
    
    <cc>juergen</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1083356</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 11:21:51 -0700</bug_when>
    <thetext>Make it possible to enable LLVM FastISel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083357</commentid>
    <comment_count>1</comment_count>
      <attachid>250279</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 11:23:33 -0700</bug_when>
    <thetext>Created attachment 250279
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083359</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 11:23:54 -0700</bug_when>
    <thetext>*** Bug 138523 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083361</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 11:23:59 -0700</bug_when>
    <thetext>*** Bug 138625 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083362</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 11:24:45 -0700</bug_when>
    <thetext>We don&apos;t want to enable it on X86.  Testing ARM64 next.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on bigmac (MacPro5,1).

VMs tested:
&quot;SelectionDAG&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r182200)
    export JSC_enableLLVMFastISel=false
&quot;FastISel&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r182200)
    export JSC_enableLLVMFastISel=true

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                       SelectionDAG                FastISel                                     
SunSpider:
   3d-cube                                            8.5997+-0.1195            8.5895+-0.1445        
   3d-morph                                          12.2763+-0.1741     ?     12.3106+-0.2126        ?
   3d-raytrace                                       11.5169+-0.3377           11.3405+-0.2460          might be 1.0156x faster
   access-binary-trees                                3.7450+-0.1578     ?      3.7637+-0.0961        ?
   access-fannkuch                                   10.4689+-0.2421           10.4601+-0.2007        
   access-nbody                                       5.5993+-0.1232            5.5437+-0.1534          might be 1.0100x faster
   access-nsieve                                      5.4593+-0.1355     ?      5.5930+-0.1514        ? might be 1.0245x slower
   bitops-3bit-bits-in-byte                           2.3904+-0.0906            2.3597+-0.0927          might be 1.0130x faster
   bitops-bits-in-byte                                6.5479+-0.1260     ?      6.5771+-0.0715        ?
   bitops-bitwise-and                                 3.1172+-0.0945     ?      3.1272+-0.0485        ?
   bitops-nsieve-bits                                 6.8454+-0.2556     ?      6.8559+-0.1393        ?
   controlflow-recursive                              3.6220+-0.1463            3.5868+-0.1118        
   crypto-aes                                         7.3588+-0.2070            7.3105+-0.2618        
   crypto-md5                                         4.5729+-0.1534     ?      4.5764+-0.0761        ?
   crypto-sha1                                        4.3040+-0.1828     ?      4.3196+-0.1671        ?
   date-format-tofte                                 17.3472+-0.6758     ?     17.5007+-0.6940        ?
   date-format-xparb                                 10.1877+-0.3588           10.1772+-0.2082        
   math-cordic                                        5.6974+-0.0890            5.6133+-0.0586          might be 1.0150x faster
   math-partial-sums                                 11.7185+-0.1635     ?     11.8821+-0.1650        ? might be 1.0140x slower
   math-spectral-norm                                 3.6212+-0.1360     ?      3.6368+-0.1478        ?
   regexp-dna                                        11.3943+-0.2059     ?     11.5802+-0.3477        ? might be 1.0163x slower
   string-base64                                      7.8936+-0.1848            7.8191+-0.0877        
   string-fasta                                      12.9583+-0.3164     ?     13.1183+-0.2116        ? might be 1.0123x slower
   string-tagcloud                                   18.3916+-0.1808     ?     18.7413+-0.4576        ? might be 1.0190x slower
   string-unpack-code                                38.0065+-0.8955     ?     38.3133+-0.9858        ?
   string-validate-input                              9.0782+-0.2968            9.0472+-0.2819        

   &lt;arithmetic&gt;                                       9.3353+-0.0584     ?      9.3748+-0.0652        ? might be 1.0042x slower

                                                       SelectionDAG                FastISel                                     
LongSpider:
   3d-cube                                         1865.0443+-17.8014    !   3507.5431+-14.3836       ! definitely 1.8807x slower
   3d-morph                                        2007.0619+-17.2373        1995.2124+-14.1488       
   3d-raytrace                                     1542.9008+-16.4015    !   1707.3601+-18.2749       ! definitely 1.1066x slower
   access-binary-trees                             1915.8303+-5.4544     ?   1920.4260+-28.0326       ?
   access-fannkuch                                  597.0572+-19.2605    ?    620.9979+-11.7437       ? might be 1.0401x slower
   access-nbody                                    1495.5085+-12.0595    !   1516.1370+-7.5472        ! definitely 1.0138x slower
   access-nsieve                                   1882.1476+-24.7522    ?   1892.9358+-7.6270        ?
   bitops-3bit-bits-in-byte                          62.9661+-0.5505     ^     60.7209+-0.5645        ^ definitely 1.0370x faster
   bitops-bits-in-byte                              376.5118+-2.2567     !    404.2630+-3.3823        ! definitely 1.0737x slower
   bitops-nsieve-bits                              1464.5593+-11.0922    ?   1470.9776+-14.3860       ?
   controlflow-recursive                           1051.7330+-11.5337    !   1125.2125+-6.3360        ! definitely 1.0699x slower
   crypto-aes                                      1336.9211+-7.1115     !   1469.7300+-10.5137       ! definitely 1.0993x slower
   crypto-md5                                       986.2363+-12.4707    !   1111.2268+-6.2500        ! definitely 1.1267x slower
   crypto-sha1                                     1347.7334+-33.7064    !   1521.0999+-17.3160       ! definitely 1.1286x slower
   date-format-tofte                               1527.1635+-26.0328    ?   1543.5298+-10.7866       ? might be 1.0107x slower
   date-format-xparb                               1403.5752+-10.1330    ?   1416.6774+-17.2525       ?
   math-cordic                                     1066.8608+-5.4891     !   1324.9700+-14.1726       ! definitely 1.2419x slower
   math-partial-sums                               1316.3061+-7.1068     !   1410.8193+-8.6652        ! definitely 1.0718x slower
   math-spectral-norm                              1227.9100+-12.3159    !   1876.5701+-8.5793        ! definitely 1.5283x slower
   string-base64                                    651.0180+-3.9562     ?    656.2692+-4.8383        ?
   string-fasta                                     921.2173+-4.5239     !    951.3451+-25.4720       ! definitely 1.0327x slower
   string-tagcloud                                  441.7861+-7.8164          436.7946+-6.1052          might be 1.0114x faster

   &lt;geometric&gt;                                     1007.5604+-2.8817     !   1102.9033+-1.7548        ! definitely 1.0946x slower

                                                       SelectionDAG                FastISel                                     
V8Spider:
   crypto                                           101.9584+-1.2954     ^     96.1765+-0.5681        ^ definitely 1.0601x faster
   deltablue                                        123.3252+-2.6895          122.9685+-2.4337        
   earley-boyer                                      82.4085+-0.9499           82.1640+-0.7160        
   raytrace                                          51.5650+-1.2099           50.9358+-1.0471          might be 1.0124x faster
   regexp                                           129.0633+-1.4601          128.9525+-2.3959        
   richards                                         129.0986+-1.4271     ?    130.7869+-1.3377        ? might be 1.0131x slower
   splay                                             65.2642+-1.9563     ?     67.4703+-5.1693        ? might be 1.0338x slower

   &lt;geometric&gt;                                       92.5256+-0.5210           92.0957+-1.1748          might be 1.0047x faster

                                                       SelectionDAG                FastISel                                     
Octane:
   encrypt                                           0.42148+-0.00427    !     0.45383+-0.00398       ! definitely 1.0767x slower
   decrypt                                           7.24277+-0.08315    !     8.24161+-0.11025       ! definitely 1.1379x slower
   deltablue                                x2       0.39034+-0.01019    !     0.43766+-0.00331       ! definitely 1.1212x slower
   earley                                            1.10494+-0.03167    ?     1.15498+-0.03285       ? might be 1.0453x slower
   boyer                                            14.22936+-0.06135         14.22274+-0.11674       
   navier-stokes                            x2       7.61319+-0.06497    !     9.22806+-0.11794       ! definitely 1.2121x slower
   raytrace                                 x2       2.43427+-0.09611    !     3.00558+-0.15251       ! definitely 1.2347x slower
   richards                                 x2       0.26589+-0.00362    !     0.29973+-0.00216       ! definitely 1.1273x slower
   splay                                    x2       0.67113+-0.01137    ?     0.68897+-0.00727       ? might be 1.0266x slower
   regexp                                   x2      64.99142+-0.63005         64.82059+-0.91023       
   pdfjs                                    x2      89.93591+-0.70553    ?    89.95927+-2.13850       ?
   mandreel                                 x2     103.11619+-0.67479    !   124.36555+-2.69942       ! definitely 1.2061x slower
   gbemu                                    x2      93.50565+-2.94178    ?    96.67965+-5.55520       ? might be 1.0339x slower
   closure                                           0.99198+-0.01036    ?     1.00270+-0.00929       ? might be 1.0108x slower
   jquery                                           12.43881+-0.18042    ?    12.56416+-0.17672       ? might be 1.0101x slower
   box2d                                    x2      26.71514+-0.32637    !    27.46626+-0.28792       ! definitely 1.0281x slower
   zlib                                     x2     722.86532+-7.93585    !   776.68334+-5.32801       ! definitely 1.0745x slower
   typescript                               x2    1436.81160+-20.80254   ?  1460.83370+-14.59704      ? might be 1.0167x slower

   &lt;geometric&gt;                                      12.96284+-0.05750    !    13.97779+-0.05568       ! definitely 1.0783x slower

                                                       SelectionDAG                FastISel                                     
Kraken:
   ai-astar                                          830.397+-4.090            827.543+-9.930         
   audio-beat-detection                              211.438+-2.595      !     254.782+-1.764         ! definitely 1.2050x slower
   audio-dft                                         290.277+-13.465     ?     322.441+-31.892        ? might be 1.1108x slower
   audio-fft                                         158.454+-2.326      !     182.535+-3.608         ! definitely 1.1520x slower
   audio-oscillator                                  376.803+-3.511      !     385.914+-2.721         ! definitely 1.0242x slower
   imaging-darkroom                                  177.480+-2.060      !     195.769+-2.804         ! definitely 1.1031x slower
   imaging-desaturate                                147.688+-1.339      !     159.703+-0.667         ! definitely 1.0814x slower
   imaging-gaussian-blur                             225.622+-2.266      !     252.286+-2.925         ! definitely 1.1182x slower
   json-parse-financial                               97.533+-1.838             96.247+-2.062           might be 1.0134x faster
   json-stringify-tinderbox                          108.371+-0.734      ?     109.008+-1.757         ?
   stanford-crypto-aes                               123.952+-2.862            123.632+-1.813         
   stanford-crypto-ccm                                99.472+-11.188     ?     108.617+-12.698        ? might be 1.0919x slower
   stanford-crypto-pbkdf2                            311.025+-4.970      ?     312.564+-4.749         ?
   stanford-crypto-sha256-iterative                   95.663+-1.213      ?      97.736+-3.373         ? might be 1.0217x slower

   &lt;arithmetic&gt;                                      232.441+-1.180      !     244.913+-2.327         ! definitely 1.0537x slower

                                                       SelectionDAG                FastISel                                     
JSRegress:
   abs-boolean                                        4.6894+-0.1020     ?      4.7036+-0.0833        ?
   adapt-to-double-divide                            20.2448+-0.4708           19.7487+-0.5439          might be 1.0251x faster
   aliased-arguments-getbyval                         1.8922+-0.2338     ?      2.0666+-0.1937        ? might be 1.0922x slower
   allocate-big-object                                4.7758+-0.4891            4.5614+-0.0379          might be 1.0470x faster
   arguments-named-and-reflective                    21.3042+-0.2437     ^     20.0065+-0.3491        ^ definitely 1.0649x faster
   arguments-out-of-bounds                           22.3727+-0.2905     ^     21.3520+-0.2289        ^ definitely 1.0478x faster
   arguments-strict-mode                             19.1051+-0.7753           18.7394+-0.5312          might be 1.0195x faster
   arguments                                         17.1198+-0.3580           16.4279+-0.3454          might be 1.0421x faster
   arity-mismatch-inlining                            1.3113+-0.0678     ?      1.3475+-0.1414        ? might be 1.0276x slower
   array-access-polymorphic-structure                14.5345+-0.1525     ?     14.6381+-0.2875        ?
   array-nonarray-polymorhpic-access                 66.6090+-3.9166     ?     68.4310+-3.0869        ? might be 1.0274x slower
   array-prototype-every                            190.6930+-2.1282          189.0092+-4.1653        
   array-prototype-forEach                          186.8407+-0.8638          185.9291+-1.5337        
   array-prototype-map                              204.8980+-1.3233     ?    210.5504+-7.9014        ? might be 1.0276x slower
   array-prototype-some                             189.7626+-1.8481          189.0440+-2.3175        
   array-splice-contiguous                           89.2187+-2.0189           87.6331+-1.1110          might be 1.0181x faster
   array-with-double-add                              7.6195+-0.1441     ?      7.6444+-0.1527        ?
   array-with-double-increment                        5.6081+-0.1280     ?      5.6687+-0.0907        ? might be 1.0108x slower
   array-with-double-mul-add                         11.8791+-0.1340     ?     11.9427+-0.1200        ?
   array-with-double-sum                              5.5305+-0.1448     ?      5.5979+-0.1219        ? might be 1.0122x slower
   array-with-int32-add-sub                          13.4411+-0.1726           13.3357+-0.1621        
   array-with-int32-or-double-sum                     5.4254+-0.0556     ?      5.5384+-0.1262        ? might be 1.0208x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     74.0944+-3.5205           72.7228+-2.5277          might be 1.0189x faster
   ArrayBuffer-DataView-alloc-long-lived             33.3169+-1.3638           33.0926+-1.7570        
   ArrayBuffer-Int32Array-byteOffset                  5.2727+-0.0950     ?      5.2962+-0.0907        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     71.1624+-1.6337     ?     72.3822+-2.6428        ? might be 1.0171x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     55.3926+-1.5904     ?     57.4735+-2.6402        ? might be 1.0376x slower
   ArrayBuffer-Int8Array-alloc-long-lived            28.9157+-1.3897           28.2915+-1.7676          might be 1.0221x faster
   ArrayBuffer-Int8Array-alloc                       26.8741+-2.2263           24.6380+-2.4678          might be 1.0908x faster
   asmjs_bool_bug                                    13.5028+-0.2613           13.3617+-0.1222          might be 1.0106x faster
   assign-custom-setter-polymorphic                   6.2513+-0.2151     ?      6.2782+-0.0857        ?
   assign-custom-setter                               8.4838+-0.1920            8.2903+-0.0717          might be 1.0233x faster
   basic-set                                         16.1321+-0.3143     ?     16.3488+-0.1665        ? might be 1.0134x slower
   big-int-mul                                        7.8496+-0.1435     ?      7.8939+-0.1602        ?
   boolean-test                                       4.9461+-0.1076     ?      5.0277+-0.1087        ? might be 1.0165x slower
   branch-fold                                        5.3185+-0.1288     ?      5.3487+-0.1252        ?
   by-val-generic                                    15.7998+-0.9126     ?     15.8211+-0.7306        ?
   call-spread-apply                                 62.7080+-1.8914     ?     63.1357+-1.5990        ?
   call-spread-call                                  49.0560+-0.9004           48.8023+-0.6716        
   captured-assignments                               0.8283+-0.0941     ?      0.8475+-0.0911        ? might be 1.0231x slower
   cast-int-to-double                                 8.8052+-0.0954            8.8002+-0.1694        
   cell-argument                                     13.0802+-0.2886     ^     12.4643+-0.2344        ^ definitely 1.0494x faster
   cfg-simplify                                       4.0194+-0.1285     ?      4.0521+-0.1350        ?
   chain-getter-access                               17.5015+-0.1375     ^     16.8215+-0.0950        ^ definitely 1.0404x faster
   cmpeq-obj-to-obj-other                            17.3470+-0.2989           17.3003+-0.2790        
   constant-test                                      8.2842+-0.1503            8.2405+-0.0809        
   create-lots-of-functions                          42.0282+-0.6981     ?     42.1368+-0.6535        ?
   DataView-custom-properties                        81.4009+-1.4057     ?     83.4624+-3.2204        ? might be 1.0253x slower
   deconstructing-parameters-overridden-by-function   
                                                      0.9823+-0.0918     ^      0.8286+-0.0469        ^ definitely 1.1856x faster
   delay-tear-off-arguments-strictmode               27.5980+-0.3574     ?     27.8925+-0.3613        ? might be 1.0107x slower
   deltablue-varargs                                367.8245+-3.7122          362.6208+-2.4074          might be 1.0144x faster
   destructuring-arguments                           28.1412+-0.2704     ?     28.2227+-0.4707        ?
   destructuring-swap                                 8.5175+-0.1123            8.4937+-0.0791        
   direct-arguments-getbyval                          1.7555+-0.0468     ?      1.9189+-0.1735        ? might be 1.0931x slower
   div-boolean-double                                 5.9800+-0.1507            5.9572+-0.1543        
   div-boolean                                       10.3669+-0.1949     ?     10.4093+-0.1528        ?
   double-get-by-val-out-of-bounds                    8.4616+-0.3658            8.3654+-0.1671          might be 1.0115x faster
   double-pollution-getbyval                         10.2407+-0.1459           10.1699+-0.1249        
   double-pollution-putbyoffset                       8.3648+-0.2522     ?      8.4335+-0.2016        ?
   double-to-int32-typed-array-no-inline              3.7060+-0.0990            3.6746+-0.1320        
   double-to-int32-typed-array                        3.2898+-0.1397            3.2819+-0.0496        
   double-to-uint32-typed-array-no-inline             3.8522+-0.1382     ?      3.8795+-0.1561        ?
   double-to-uint32-typed-array                       3.3427+-0.1091     ?      3.4029+-0.1288        ? might be 1.0180x slower
   elidable-new-object-dag                           67.2061+-0.9196     !     69.4036+-0.9192        ! definitely 1.0327x slower
   elidable-new-object-roflcopter                    73.4537+-0.6774           72.4845+-0.8684          might be 1.0134x faster
   elidable-new-object-then-call                     70.5998+-3.4176     ^     62.2038+-1.1127        ^ definitely 1.1350x faster
   elidable-new-object-tree                          74.9192+-0.5778     ^     73.0699+-0.5764        ^ definitely 1.0253x faster
   empty-string-plus-int                             10.1955+-0.2286     ?     10.2614+-0.1194        ?
   emscripten-cube2hash                              58.1526+-0.6014           57.1345+-0.8926          might be 1.0178x faster
   exit-length-on-plain-object                       32.0852+-1.0174     ?     32.1013+-1.4017        ?
   external-arguments-getbyval                        2.0430+-0.1689     ?      2.2134+-0.1246        ? might be 1.0834x slower
   external-arguments-putbyval                        3.9580+-0.1141     ?      4.0547+-0.0786        ? might be 1.0244x slower
   fixed-typed-array-storage-var-index                1.9548+-0.0962            1.9411+-0.0821        
   fixed-typed-array-storage                          1.4196+-0.0847     ?      1.4597+-0.1049        ? might be 1.0282x slower
   Float32Array-matrix-mult                           8.1877+-0.1977     ?      8.2923+-0.2134        ? might be 1.0128x slower
   Float32Array-to-Float64Array-set                 120.3352+-2.8371     ?    121.0543+-1.5252        ?
   Float64Array-alloc-long-lived                    116.3851+-1.2076     ?    116.8838+-1.1062        ?
   Float64Array-to-Int16Array-set                   145.8976+-1.4129          145.6190+-1.6514        
   fold-double-to-int                                28.2958+-0.2904     ^     27.2797+-0.4792        ^ definitely 1.0372x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     14.6296+-0.4682           14.5572+-0.3576        
   fold-get-by-id-to-multi-get-by-offset             12.6135+-0.4332     ?     12.7499+-0.3171        ? might be 1.0108x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                     11.9594+-0.2257           11.8476+-0.7804        
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     12.1622+-0.1302           11.9609+-0.4659          might be 1.0168x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.8218+-0.6512           10.7195+-0.7266        
   fold-multi-put-by-offset-to-put-by-offset   
                                                      9.1284+-0.6866            8.6495+-0.8552          might be 1.0554x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     17.6037+-0.5242           17.5820+-0.2417        
   fold-put-by-id-to-multi-put-by-offset             11.7725+-0.5786           11.4432+-0.4677          might be 1.0288x faster
   fold-put-structure                                 8.7777+-0.7611            8.5015+-0.5916          might be 1.0325x faster
   for-of-iterate-array-entries                       8.7133+-0.0709     ?      8.7412+-0.1949        ?
   for-of-iterate-array-keys                          7.4320+-0.1207            7.3796+-0.1987        
   for-of-iterate-array-values                        6.8846+-0.1477     ?      7.1204+-0.1382        ? might be 1.0342x slower
   fround                                            27.4575+-0.3182     ^     25.5948+-0.5197        ^ definitely 1.0728x faster
   ftl-library-inlining-dataview                    147.3132+-0.4472          147.1323+-2.0459        
   ftl-library-inlining                             149.7279+-1.4417     ?    151.7170+-0.8484        ? might be 1.0133x slower
   function-dot-apply                                 3.7060+-0.1414     ?      3.7896+-0.1066        ? might be 1.0226x slower
   function-test                                      5.4785+-0.0698     ?      5.5520+-0.1121        ? might be 1.0134x slower
   function-with-eval                               178.6155+-9.1548          173.7661+-0.8569          might be 1.0279x faster
   gcse-poly-get-less-obvious                        36.9332+-0.2872           36.5610+-1.0432          might be 1.0102x faster
   gcse-poly-get                                     37.5935+-0.2065           37.3721+-0.5449        
   gcse                                               9.3281+-0.1099            9.3197+-0.1727        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      4.1269+-0.1155            4.1267+-0.1270        
   get-by-id-bimorphic-check-structure-elimination   
                                                     12.3902+-0.1096     ?     12.5017+-0.2098        ?
   get-by-id-chain-from-try-block                    14.0478+-0.1678           13.9646+-0.1584        
   get-by-id-check-structure-elimination             11.1002+-0.1011           11.0998+-0.0637        
   get-by-id-proto-or-self                           34.9756+-3.0700           31.8979+-1.8802          might be 1.0965x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      5.3534+-0.0499     ?      5.3537+-0.0844        ?
   get-by-id-self-or-proto                           34.4309+-2.5821           33.1685+-2.3244          might be 1.0381x faster
   get-by-val-out-of-bounds                           8.0806+-0.1625     ?      8.1885+-0.1784        ? might be 1.0133x slower
   get_callee_monomorphic                             6.3323+-0.2880     ?      6.4347+-0.2403        ? might be 1.0162x slower
   get_callee_polymorphic                             5.6858+-0.1022            5.6506+-0.1697        
   getter-no-activation                               6.4304+-0.1613     ?      6.4935+-0.1432        ?
   getter-richards                                  178.0033+-3.2880     ?    181.4618+-4.4789        ? might be 1.0194x slower
   getter                                            10.0794+-0.0987     ?     10.1272+-0.0822        ?
   global-var-const-infer-fire-from-opt               1.8322+-0.1369            1.6978+-0.0880          might be 1.0792x faster
   global-var-const-infer                             1.5197+-0.1066     ?      1.5834+-0.1721        ? might be 1.0419x slower
   HashMap-put-get-iterate-keys                      50.3003+-0.9066           49.6560+-0.3964          might be 1.0130x faster
   HashMap-put-get-iterate                           49.0870+-0.5173     ?     49.3398+-0.6486        ?
   HashMap-string-put-get-iterate                    51.1516+-0.8312           50.6290+-0.5082          might be 1.0103x faster
   hoist-make-rope                                   19.5199+-1.2816     ^     16.5275+-1.3628        ^ definitely 1.1811x faster
   hoist-poly-check-structure-effectful-loop   
                                                      9.8179+-0.0921            9.7946+-0.1395        
   hoist-poly-check-structure                         6.4805+-0.0654     ?      6.5111+-0.1663        ?
   imul-double-only                                  14.7276+-0.3495     ^     12.5468+-0.8325        ^ definitely 1.1738x faster
   imul-int-only                                     14.8087+-0.1429           14.4719+-0.4361          might be 1.0233x faster
   imul-mixed                                        13.8275+-0.7548     ^     12.0864+-0.4622        ^ definitely 1.1441x faster
   in-four-cases                                     35.8693+-0.4690           35.1101+-0.3447          might be 1.0216x faster
   in-one-case-false                                 18.8662+-0.2755     ?     18.9657+-0.2189        ?
   in-one-case-true                                  18.7217+-0.2440     ?     18.9977+-0.2512        ? might be 1.0147x slower
   in-two-cases                                      19.3696+-0.2470     ?     19.4438+-0.2785        ?
   indexed-properties-in-objects                      4.7735+-0.0540            4.7137+-0.0892          might be 1.0127x faster
   infer-closure-const-then-mov-no-inline             6.1501+-0.0687     ?      6.1858+-0.1273        ?
   infer-closure-const-then-mov                      27.7511+-0.5943     ^     22.8807+-0.6616        ^ definitely 1.2129x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     19.5283+-0.2381           19.3764+-0.2582        
   infer-closure-const-then-put-to-scope             31.5698+-0.2451           31.1210+-0.4440          might be 1.0144x faster
   infer-closure-const-then-reenter-no-inline   
                                                     93.0436+-0.7589     !     95.4198+-0.8972        ! definitely 1.0255x slower
   infer-closure-const-then-reenter                 231.1912+-3.4959     ?    233.6228+-0.5816        ? might be 1.0105x slower
   infer-constant-global-property                    39.4675+-0.4140           39.4182+-0.2149        
   infer-constant-property                            3.7176+-0.1036            3.6945+-0.0803        
   infer-one-time-closure-ten-vars                   18.3456+-0.2120     ^     17.6279+-0.3604        ^ definitely 1.0407x faster
   infer-one-time-closure-two-vars                   17.6565+-0.1556     ^     17.0547+-0.3666        ^ definitely 1.0353x faster
   infer-one-time-closure                            17.5772+-0.1623     ^     17.0557+-0.2671        ^ definitely 1.0306x faster
   infer-one-time-deep-closure                       31.0248+-0.2441     ^     30.2749+-0.1668        ^ definitely 1.0248x faster
   inline-arguments-access                            7.0294+-0.1914            7.0182+-0.1282        
   inline-arguments-aliased-access                    7.1417+-0.1101            7.0667+-0.0838          might be 1.0106x faster
   inline-arguments-local-escape                      7.3002+-0.2146            7.2275+-0.2263          might be 1.0101x faster
   inline-get-scoped-var                              6.0265+-0.0786     ?      6.0536+-0.1425        ?
   inlined-put-by-id-transition                      17.8819+-0.2240     ?     18.2325+-0.2201        ? might be 1.0196x slower
   int-or-other-abs-then-get-by-val                   9.6504+-0.0782     ?      9.6875+-0.1583        ?
   int-or-other-abs-zero-then-get-by-val             34.2129+-0.2819           34.1840+-0.5952        
   int-or-other-add-then-get-by-val                   8.6727+-0.1049     ?      8.7348+-0.1442        ?
   int-or-other-add                                   9.2454+-0.0683            9.2063+-0.1664        
   int-or-other-div-then-get-by-val                   6.6267+-0.1768     ?      6.6848+-0.1199        ?
   int-or-other-max-then-get-by-val                   7.3953+-0.1760     ?      7.4728+-0.1138        ? might be 1.0105x slower
   int-or-other-min-then-get-by-val                   7.4847+-0.1070            7.3523+-0.0983          might be 1.0180x faster
   int-or-other-mod-then-get-by-val                   6.2106+-0.1448     ?      6.2990+-0.1011        ? might be 1.0142x slower
   int-or-other-mul-then-get-by-val                   6.7827+-0.1100     ?      6.8452+-0.1446        ?
   int-or-other-neg-then-get-by-val                   8.2593+-0.1484     ?      8.4526+-0.1202        ? might be 1.0234x slower
   int-or-other-neg-zero-then-get-by-val             34.2902+-0.3664     ?     34.3126+-0.3569        ?
   int-or-other-sub-then-get-by-val                   9.2069+-0.1346            9.1265+-0.1468        
   int-or-other-sub                                   5.7812+-0.0712            5.7740+-0.0870        
   int-overflow-local                                 8.2546+-0.1608     ?      8.2580+-0.0828        ?
   Int16Array-alloc-long-lived                       82.5020+-0.9122     ?     82.6247+-0.6534        ?
   Int16Array-bubble-sort-with-byteLength            52.0377+-0.6363           51.9418+-0.5616        
   Int16Array-bubble-sort                            50.2659+-0.4678           50.1385+-1.2946        
   Int16Array-load-int-mul                            2.3125+-0.1125            2.2966+-0.0408        
   Int16Array-to-Int32Array-set                     113.6869+-0.9490     ?    114.7040+-0.7833        ?
   Int32Array-alloc-large                            38.0277+-0.8765     ?     38.2511+-0.8850        ?
   Int32Array-alloc-long-lived                       91.1698+-0.6881     ?     91.6479+-0.9127        ?
   Int32Array-alloc                                   5.5246+-0.1722     ?      5.5702+-0.1681        ?
   Int32Array-Int8Array-view-alloc                   15.8805+-0.4929           15.3928+-0.2661          might be 1.0317x faster
   int52-spill                                       12.2472+-0.2581     ?     12.2904+-0.2831        ?
   Int8Array-alloc-long-lived                        75.6414+-1.0315           75.5951+-0.8525        
   Int8Array-load-with-byteLength                     5.2231+-0.1188            5.2195+-0.1305        
   Int8Array-load                                     5.2445+-0.0815            5.1987+-0.0987        
   integer-divide                                    19.5997+-0.1575     ?     19.7310+-0.2281        ?
   integer-modulo                                     3.6654+-0.2039            3.5684+-0.1223          might be 1.0272x faster
   large-int-captured                                10.2194+-0.3193           10.0739+-0.1696          might be 1.0145x faster
   large-int-neg                                     31.7052+-0.3500     ?     32.1844+-0.5373        ? might be 1.0151x slower
   large-int                                         28.2292+-0.3419     ?     28.3281+-0.2415        ?
   logical-not                                        8.2285+-0.1733            8.2257+-0.0871        
   lots-of-fields                                    23.7387+-0.1998     ?     23.9305+-0.2467        ?
   make-indexed-storage                               5.6999+-0.2224            5.5838+-0.4229          might be 1.0208x faster
   make-rope-cse                                      7.4395+-0.1881     ?      7.4797+-0.1587        ?
   marsaglia-larger-ints                             64.6115+-0.5563     !     67.8317+-0.5070        ! definitely 1.0498x slower
   marsaglia-osr-entry                               36.2752+-0.8264     !     38.1157+-0.5739        ! definitely 1.0507x slower
   max-boolean                                        4.0587+-0.1348     ?      4.2760+-0.5059        ? might be 1.0535x slower
   method-on-number                                  34.2976+-1.3779     ?     34.5450+-0.5705        ?
   min-boolean                                        3.8831+-0.0867            3.7958+-0.0924          might be 1.0230x faster
   minus-boolean-double                               4.4181+-0.0886     ?      4.4392+-0.0750        ?
   minus-boolean                                      3.6857+-0.0990     ?      3.8219+-0.1021        ? might be 1.0370x slower
   misc-strict-eq                                    76.9371+-5.7151           69.6841+-3.3935          might be 1.1041x faster
   mod-boolean-double                                14.5115+-0.2081     ?     14.5239+-0.1009        ?
   mod-boolean                                        9.3303+-0.0428     ?      9.3874+-0.0565        ?
   mul-boolean-double                                 5.0826+-0.0742            5.0790+-0.0507        
   mul-boolean                                        4.0833+-0.0463            4.0574+-0.0961        
   neg-boolean                                        4.7247+-0.1031            4.6320+-0.0828          might be 1.0200x faster
   negative-zero-divide                               0.6345+-0.0875     ?      0.6430+-0.0890        ? might be 1.0133x slower
   negative-zero-modulo                               0.6419+-0.0852            0.6416+-0.0856        
   negative-zero-negate                               0.5625+-0.0787            0.5168+-0.0166          might be 1.0884x faster
   nested-function-parsing                           72.5534+-0.7649           72.4578+-0.7705        
   new-array-buffer-dead                              4.1733+-0.1565            4.1412+-0.1059        
   new-array-buffer-push                             10.4566+-0.2856     ?     10.6333+-0.2344        ? might be 1.0169x slower
   new-array-dead                                    18.5350+-0.5539           17.5635+-0.4374          might be 1.0553x faster
   new-array-push                                     6.7718+-0.1904            6.7287+-0.1598        
   no-inline-constructor                            185.8405+-1.1437     ?    186.2167+-1.6442        ?
   number-test                                        4.9538+-0.1234     ?      4.9563+-0.0772        ?
   object-closure-call                               10.6423+-0.1428           10.5911+-0.1815        
   object-test                                        5.3088+-0.0746     ?      5.3118+-0.0490        ?
   obvious-sink-pathology-taken                     224.5919+-1.9574     !    239.9729+-1.2429        ! definitely 1.0685x slower
   obvious-sink-pathology                           207.1306+-2.1107     ?    209.7955+-1.8423        ? might be 1.0129x slower
   obviously-elidable-new-object                     59.7957+-0.8936           57.6697+-2.6974          might be 1.0369x faster
   plus-boolean-arith                                 4.1835+-0.1298            4.0886+-0.0991          might be 1.0232x faster
   plus-boolean-double                                4.5261+-0.0773            4.4631+-0.0527          might be 1.0141x faster
   plus-boolean                                       3.6762+-0.0699     ?      3.6972+-0.1180        ?
   poly-chain-access-different-prototypes-simple   
                                                      5.4100+-0.2087            5.3170+-0.0694          might be 1.0175x faster
   poly-chain-access-different-prototypes             3.9245+-0.1244     ?      3.9889+-0.0744        ? might be 1.0164x slower
   poly-chain-access-simpler                          5.2791+-0.0767     ?      5.3349+-0.0920        ? might be 1.0106x slower
   poly-chain-access                                  3.9854+-0.1055            3.9816+-0.0847        
   poly-stricteq                                    101.2163+-0.9053     ?    102.2290+-0.3011        ? might be 1.0100x slower
   polymorphic-array-call                             2.6107+-0.2761            2.5710+-0.2081          might be 1.0154x faster
   polymorphic-get-by-id                              5.3105+-0.0866     ?      5.3501+-0.1189        ?
   polymorphic-put-by-id                             46.8473+-2.0091     ?     47.1553+-2.5377        ?
   polymorphic-structure                             30.6224+-0.9654     ?     31.1726+-0.6363        ? might be 1.0180x slower
   polyvariant-monomorphic-get-by-id                 17.7112+-0.1965           17.5722+-0.5159        
   proto-getter-access                               17.1846+-0.1480     ^     16.7629+-0.2553        ^ definitely 1.0252x faster
   put-by-id-replace-and-transition                  14.8277+-0.2224     ?     15.0968+-0.4135        ? might be 1.0181x slower
   put-by-id-slightly-polymorphic                     4.0701+-0.0575     ?      4.1465+-0.0979        ? might be 1.0188x slower
   put-by-id                                         20.8864+-0.4660     ?     21.0407+-0.3754        ?
   put-by-val-direct                                  1.1365+-0.0813            1.1037+-0.0826          might be 1.0297x faster
   put-by-val-large-index-blank-indexing-type   
                                                     11.7750+-0.6287           11.6176+-0.6512          might be 1.0135x faster
   put-by-val-machine-int                             4.4420+-0.1052     ?      4.5068+-0.1145        ? might be 1.0146x slower
   rare-osr-exit-on-local                            25.9587+-0.2790           25.9373+-0.1749        
   register-pressure-from-osr                        38.6895+-0.4197     ?     38.8131+-0.3164        ?
   setter                                             7.7931+-0.0714     ?      7.7939+-0.1163        ?
   simple-activation-demo                            41.3110+-0.5326           41.1925+-0.3382        
   simple-getter-access                              21.9587+-0.5853     !     23.4349+-0.3350        ! definitely 1.0672x slower
   simple-poly-call-nested                           13.4834+-0.3536     ?     13.6738+-0.2535        ? might be 1.0141x slower
   simple-poly-call                                   2.2957+-0.2115     ?      2.3490+-0.1711        ? might be 1.0232x slower
   sin-boolean                                       30.7915+-0.4586           29.4427+-1.0075          might be 1.0458x faster
   singleton-scope                                  130.6710+-1.8339          129.4368+-1.2777        
   sinkable-new-object-dag                          116.7161+-0.6658     !    131.4027+-1.3962        ! definitely 1.1258x slower
   sinkable-new-object-taken                         89.3175+-3.8291     !    103.1487+-0.7717        ! definitely 1.1549x slower
   sinkable-new-object                               63.9858+-0.5780     ^     62.0129+-0.5843        ^ definitely 1.0318x faster
   slow-array-profile-convergence                     5.2005+-0.1081            5.0825+-0.2109          might be 1.0232x faster
   slow-convergence                                   5.8536+-0.1389     ?      5.9589+-0.1895        ? might be 1.0180x slower
   sparse-conditional                                 1.8931+-0.1123     ?      1.9236+-0.0993        ? might be 1.0161x slower
   splice-to-remove                                  34.0475+-1.5103     ?     34.6749+-1.3049        ? might be 1.0184x slower
   string-char-code-at                               29.9552+-0.2873           29.7500+-0.2287        
   string-concat-object                               4.0517+-0.2457            4.0291+-0.3002        
   string-concat-pair-object                          3.7623+-0.2735     ?      3.9700+-0.1561        ? might be 1.0552x slower
   string-concat-pair-simple                         20.3565+-0.4312           20.1445+-0.5254          might be 1.0105x faster
   string-concat-simple                              20.7802+-0.1630     ?     21.0522+-0.3823        ? might be 1.0131x slower
   string-cons-repeat                                13.0412+-0.1751           12.8580+-0.1634          might be 1.0142x faster
   string-cons-tower                                 13.1147+-0.2616     ?     13.1979+-0.3825        ?
   string-equality                                   33.1228+-0.4960           32.7658+-0.3679          might be 1.0109x faster
   string-get-by-val-big-char                        13.8846+-0.0974     ?     14.0727+-0.3712        ? might be 1.0135x slower
   string-get-by-val-out-of-bounds-insane             8.0847+-0.1462            8.0760+-0.0878        
   string-get-by-val-out-of-bounds                    9.6835+-0.1373            9.5571+-0.1409          might be 1.0132x faster
   string-get-by-val                                  6.7431+-0.1197     ?      6.8752+-0.0953        ? might be 1.0196x slower
   string-hash                                        3.5725+-0.0895     ?      3.5977+-0.0805        ?
   string-long-ident-equality                        26.2828+-0.3446     ?     26.4396+-0.3625        ?
   string-out-of-bounds                              22.6351+-0.3147     ^     21.2159+-0.2664        ^ definitely 1.0669x faster
   string-repeat-arith                               62.6082+-0.3941     ?     62.6716+-0.4003        ?
   string-sub                                       119.4828+-0.6511     ?    119.7570+-0.9638        ?
   string-test                                        4.9519+-0.1880            4.9075+-0.1531        
   string-var-equality                               61.6142+-0.7637           61.3372+-0.4645        
   structure-hoist-over-transitions                   4.2059+-0.2620            4.1911+-0.1554        
   substring-concat-weird                            74.9517+-0.3501     ?     75.2542+-1.2201        ?
   substring-concat                                  79.3645+-1.0033     ?     79.6346+-0.8790        ?
   substring                                         90.4904+-0.7933     ?     90.8223+-0.9722        ?
   switch-char-constant                               3.8668+-0.0792            3.7979+-0.0752          might be 1.0181x faster
   switch-char                                       11.3082+-0.1620     ?     11.5399+-0.4236        ? might be 1.0205x slower
   switch-constant                                   14.8455+-0.1959           14.6940+-0.5171          might be 1.0103x faster
   switch-string-basic-big-var                       31.3233+-1.6646           30.3767+-1.1267          might be 1.0312x faster
   switch-string-basic-big                           24.7890+-0.7978           24.3688+-1.0018          might be 1.0172x faster
   switch-string-basic-var                           33.3917+-1.4025           32.6048+-0.8702          might be 1.0241x faster
   switch-string-basic                               24.9836+-2.3076           24.4477+-1.6871          might be 1.0219x faster
   switch-string-big-length-tower-var                30.7263+-0.3658           30.5112+-0.0930        
   switch-string-length-tower-var                    26.5222+-0.2905           26.3319+-0.2350        
   switch-string-length-tower                        21.9843+-1.4445     ?     22.3167+-1.4779        ? might be 1.0151x slower
   switch-string-short                               20.6147+-0.2382     ?     20.8482+-0.3281        ? might be 1.0113x slower
   switch                                            21.0638+-0.3814     ?     21.3770+-0.3676        ? might be 1.0149x slower
   tear-off-arguments-simple                          5.6965+-0.2921            5.5304+-0.2056          might be 1.0300x faster
   tear-off-arguments                                 7.9628+-0.1787            7.8462+-0.1498          might be 1.0149x faster
   temporal-structure                                19.9055+-0.1879           19.8280+-0.2108        
   to-int32-boolean                                  25.4525+-0.3122     ?     25.5382+-0.2572        ?
   try-catch-get-by-val-cloned-arguments             28.6984+-0.5083           28.4295+-0.3145        
   try-catch-get-by-val-direct-arguments             11.6765+-1.3606           11.5554+-1.1812          might be 1.0105x faster
   try-catch-get-by-val-scoped-arguments             13.7115+-0.1727     ?     13.7313+-0.2693        ?
   undefined-property-access                        597.6775+-5.0579     ^    589.1895+-2.1319        ^ definitely 1.0144x faster
   undefined-test                                     5.0271+-0.0844     ?      5.1060+-0.1872        ? might be 1.0157x slower
   unprofiled-licm                                   36.6673+-0.2296     ^     34.4048+-0.8722        ^ definitely 1.0658x faster
   varargs-call                                      24.8457+-0.2608     ?     24.9020+-0.2522        ?
   varargs-construct-inline                          38.5220+-0.3151           38.3725+-0.3708        
   varargs-construct                                 57.5459+-0.9338     ?     59.3946+-0.9615        ? might be 1.0321x slower
   varargs-inline                                    15.6607+-0.2578     ^     14.7590+-0.1916        ^ definitely 1.0611x faster
   varargs-strict-mode                               18.0523+-0.3413     ?     18.1833+-0.3542        ?
   varargs                                           17.7978+-0.2294     ?     18.1201+-0.1917        ? might be 1.0181x slower
   weird-inlining-const-prop                          3.7823+-0.1819     ?      3.8913+-0.2240        ? might be 1.0288x slower

   &lt;geometric&gt;                                       14.9237+-0.0240     ^     14.8598+-0.0340        ^ definitely 1.0043x faster

                                                       SelectionDAG                FastISel                                     
AsmBench:
   bigfib.cpp                                       887.0988+-8.6434     !   1099.3190+-12.8987       ! definitely 1.2392x slower
   cray.c                                           875.6460+-6.4732     !    948.3042+-9.0611        ! definitely 1.0830x slower
   dry.c                                           1038.3807+-11.1271    !   1174.2063+-10.1666       ! definitely 1.1308x slower
   FloatMM.c                                       1296.5059+-5.7447     !   1424.7773+-11.2949       ! definitely 1.0989x slower
   gcc-loops.cpp                                   8230.2213+-59.3281    !  10292.2275+-28.3838       ! definitely 1.2505x slower
   n-body.c                                        2467.5656+-12.5657    !   2647.4965+-10.3973       ! definitely 1.0729x slower
   Quicksort.c                                      714.0405+-13.2013    !    764.2223+-6.4279        ! definitely 1.0703x slower
   stepanov_container.cpp                          6364.0815+-151.5082   !   6774.4578+-178.0046      ! definitely 1.0645x slower
   Towers.c                                         610.3955+-4.0709     !    629.9341+-5.0971        ! definitely 1.0320x slower

   &lt;geometric&gt;                                     1572.7714+-6.5098     !   1751.2524+-9.2044        ! definitely 1.1135x slower

                                                       SelectionDAG                FastISel                                     
CompressionBench:
   huffman                                          783.6010+-7.8806          780.8865+-12.5274       
   arithmetic-simple                                723.0556+-3.1654     !    750.0397+-3.4141        ! definitely 1.0373x slower
   arithmetic-precise                               556.8846+-5.2662     !    571.9472+-5.1301        ! definitely 1.0270x slower
   arithmetic-complex-precise                       556.9940+-4.9284     !    573.0284+-3.7072        ! definitely 1.0288x slower
   arithmetic-precise-order-0                       789.6442+-15.5094    ?    798.1486+-8.8324        ? might be 1.0108x slower
   arithmetic-precise-order-1                       586.8455+-5.0994     !    624.7945+-18.9340       ! definitely 1.0647x slower
   arithmetic-precise-order-2                       661.7862+-11.5918    !    687.3401+-12.8577       ! definitely 1.0386x slower
   arithmetic-simple-order-1                        714.2471+-5.7002     !    742.1235+-7.0381        ! definitely 1.0390x slower
   arithmetic-simple-order-2                        793.6716+-12.7723    !    827.5933+-12.2754       ! definitely 1.0427x slower
   lz-string                                        636.9012+-29.5865         618.1506+-38.2922         might be 1.0303x faster

   &lt;geometric&gt;                                      674.3033+-2.5072     !    691.3106+-5.5432        ! definitely 1.0252x slower

                                                       SelectionDAG                FastISel                                     

                                                       SelectionDAG                FastISel                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                  119.4692+-0.1742     !    124.7443+-0.3773        ! definitely 1.0442x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083363</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 11:25:49 -0700</bug_when>
    <thetext>Note that this currently conflates enabling FastISel and using basic RA.  Maybe that&apos;s not optimal for X86.  But anyway, my next move is to test this on ARM64 and see what happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083367</commentid>
    <comment_count>6</comment_count>
    <who name="Juergen Ributzka">juergen</who>
    <bug_when>2015-04-07 11:37:20 -0700</bug_when>
    <thetext>FastISel for X86 hasn&apos;t been optimized for Javascript yet.

Testing Basic RA and/or disabling the Machine Instruction Scheduler is worth giving a try on X86.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083377</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 12:22:59 -0700</bug_when>
    <thetext>And it&apos;s profitable for ARM64.


Benchmark report for SunSpider, Octane, Kraken, and AsmBench.

VMs tested:
&quot;SelectionDAG&quot; at /Volumes/Data/pizlo/secondary/OpenSource/JscArmBuild/Release-iphoneos/JavaScriptCore.framework/Resources/jsc
    export JSC_enableLLVMFastISel=false
&quot;FastISel&quot; at /Volumes/Data/pizlo/secondary/OpenSource/JscArmBuild/Release-iphoneos/JavaScriptCore.framework/Resources/jsc
    export JSC_enableLLVMFastISel=true

Collected 3 samples per benchmark/VM, with 3 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to
get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                               SelectionDAG                FastISel                                     
SunSpider:
   3d-cube                                   19.1584+-1.5976           19.0782+-1.5476        
   3d-morph                                  18.4647+-0.4147     ?     18.5917+-0.5864        ?
   3d-raytrace                               19.8375+-0.9101     ?     21.0723+-3.9045        ? might be 1.0622x slower
   access-binary-trees                        6.2598+-0.6093            6.2017+-0.4173        
   access-fannkuch                           15.0500+-1.9685     ?     15.7166+-4.2463        ? might be 1.0443x slower
   access-nbody                               8.7649+-0.0676     ?      8.9951+-0.8798        ? might be 1.0263x slower
   access-nsieve                              6.5923+-0.2791     ?      6.6240+-0.3910        ?
   bitops-3bit-bits-in-byte                   3.0800+-0.3071     ?      3.1207+-0.2709        ? might be 1.0132x slower
   bitops-bits-in-byte                       10.9430+-0.5485     ?     10.9932+-1.7605        ?
   bitops-bitwise-and                         6.0168+-0.2334            5.9670+-0.1393        
   bitops-nsieve-bits                         8.4460+-0.0802     ?      8.5463+-0.2661        ? might be 1.0119x slower
   controlflow-recursive                      5.6418+-0.1320     ?      6.3622+-2.9473        ? might be 1.1277x slower
   crypto-aes                                13.1012+-0.7841     ?     13.2612+-1.5332        ? might be 1.0122x slower
   crypto-md5                                 8.8907+-7.9512     ?      9.6057+-8.0888        ? might be 1.0804x slower
   crypto-sha1                                7.0814+-0.3844     ?      7.2605+-0.1854        ? might be 1.0253x slower
   date-format-tofte                         26.3088+-2.7523           25.8010+-0.7791          might be 1.0197x faster
   date-format-xparb                         16.2147+-0.9355     ?     17.3440+-4.6970        ? might be 1.0696x slower
   math-cordic                                9.5390+-0.1404     ?      9.7357+-0.6370        ? might be 1.0206x slower
   math-partial-sums                         15.1840+-0.7492     ?     15.2391+-0.6273        ?
   math-spectral-norm                         5.1752+-0.6829     ?      8.9093+-3.1804        ? might be 1.7215x slower
   regexp-dna                                18.8178+-0.6276           18.5535+-0.9504          might be 1.0142x faster
   string-base64                             11.7364+-1.0907           11.4598+-0.3804          might be 1.0241x faster
   string-fasta                              16.9639+-0.8497           16.5520+-0.1265          might be 1.0249x faster
   string-tagcloud                           30.1510+-1.6947     ?     30.1854+-5.0598        ?
   string-unpack-code                        69.5977+-2.1304           67.7461+-1.9471          might be 1.0273x faster
   string-validate-input                     13.4931+-0.4232     ?     14.2054+-2.0545        ? might be 1.0528x slower

   &lt;arithmetic&gt;                              15.0196+-0.2969     ?     15.2742+-0.3394        ? might be 1.0169x slower

                                               SelectionDAG                FastISel                                     
Octane:
   encrypt                                   0.53884+-0.00167    !     0.56236+-0.00388       ! definitely 1.0437x slower
   decrypt                                  10.09786+-0.08573    ^     9.73540+-0.06686       ^ definitely 1.0372x faster
   deltablue                        x2       0.47122+-0.09774          0.44781+-0.03957         might be 1.0523x faster
   earley                                    1.60465+-0.13677          1.57417+-0.04395         might be 1.0194x faster
   boyer                                    16.84935+-0.30842    ?    17.00140+-0.23350       ?
   navier-stokes                    x2      21.06951+-0.59193         20.95475+-0.10441       
   raytrace                         x2       4.24897+-0.21862    ?     4.28543+-4.21308       ?
   richards                         x2       0.23855+-0.00981    !     0.25425+-0.00457       ! definitely 1.0658x slower
   splay                            x2       1.76973+-0.03330          1.76386+-0.00131       
   regexp                           x2     108.57046+-2.92004        108.21400+-3.05217       
   pdfjs                            x2     133.58375+-1.69675    ?   133.71515+-3.14950       ?
   mandreel                         x2     221.21532+-9.45257        212.11890+-8.92153         might be 1.0429x faster
   gbemu                            x2     187.78388+-32.53771       185.41156+-33.68148        might be 1.0128x faster
   closure                                   1.40434+-0.01542    ?     1.42800+-0.07583       ? might be 1.0169x slower
   jquery                                   19.49726+-0.19485    ?    19.54411+-0.21783       ?
   box2d                            x2      72.95358+-10.28726        69.47765+-4.32754         might be 1.0500x faster
   zlib                             x2    1250.08369+-392.99709     1199.90525+-342.64089       might be 1.0418x faster
   typescript                       x2    3081.99731+-30.42784      3008.99984+-58.76044        might be 1.0243x faster

   &lt;geometric&gt;                              22.48137+-0.20623         22.19825+-1.64422         might be 1.0128x faster

                                               SelectionDAG                FastISel                                     
Kraken:
   ai-astar                                  861.540+-191.400          853.498+-253.910       
   audio-beat-detection                      280.905+-28.173     ?     306.554+-30.146        ? might be 1.0913x slower
   audio-dft                                 757.085+-14.864     ?     766.236+-4.890         ? might be 1.0121x slower
   audio-fft                                 190.076+-5.799            178.430+-11.966          might be 1.0653x faster
   audio-oscillator                          497.191+-26.893           469.066+-9.328           might be 1.0600x faster
   imaging-darkroom                          309.485+-10.596           308.856+-8.454         
   imaging-desaturate                        163.043+-3.425      ^     152.891+-1.342         ^ definitely 1.0664x faster
   imaging-gaussian-blur                     230.257+-10.870           217.556+-10.133          might be 1.0584x faster
   json-parse-financial                      119.880+-2.326      ?     120.091+-0.324         ?
   json-stringify-tinderbox                  126.949+-3.036      ?     127.377+-2.736         ?
   stanford-crypto-aes                       170.821+-15.293           162.193+-13.150          might be 1.0532x faster
   stanford-crypto-ccm                       115.358+-6.060      ?     122.424+-47.992        ? might be 1.0612x slower
   stanford-crypto-pbkdf2                    438.124+-5.427      ?     438.525+-5.339         ?
   stanford-crypto-sha256-iterative          144.810+-1.107      ?     146.090+-1.826         ?

   &lt;arithmetic&gt;                              314.680+-19.245           312.128+-20.173          might be 1.0082x faster

                                               SelectionDAG                FastISel                                     
AsmBench:
   bigfib.cpp                              1614.4840+-87.2817        1478.4010+-247.9110        might be 1.0920x faster
   cray.c                                  1196.2056+-48.0512    ^   1109.1813+-35.6899       ^ definitely 1.0785x faster
   dry.c                                    848.3123+-20.4077    ?    849.0481+-18.3524       ?
   FloatMM.c                               1411.4184+-5.6955     ^   1398.0672+-1.5206        ^ definitely 1.0095x faster
   gcc-loops.cpp                           9130.2301+-126.0490   ^   8407.3656+-87.8810       ^ definitely 1.0860x faster
   n-body.c                                2686.2397+-6.8112         2674.9181+-7.1344        
   Quicksort.c                             1064.3299+-3.9816         1058.7861+-20.2545       
   stepanov_container.cpp                 12733.0667+-286.4764      12402.7603+-45.8994         might be 1.0266x faster
   Towers.c                                 560.9787+-8.8784          545.6500+-18.0831         might be 1.0281x faster

   &lt;geometric&gt;                             1962.1021+-8.6012     ^   1893.7075+-33.6412       ^ definitely 1.0361x faster

                                               SelectionDAG                FastISel                                     

                                               SelectionDAG                FastISel                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                          120.1578+-2.3493          118.9667+-1.9308          might be 1.0100x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083381</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 12:27:50 -0700</bug_when>
    <thetext>Ossy: this patch enables FastISel on iOS/ARM64.  I believe that it is broadly profitable on any ARM64 because:

- LLVM&apos;s FastISel backend generates code more quickly than the SelectionDAG backend.
- ARM64 is an easy-enough target to generate code for that SelectionDAG&apos;s throughput benefits don&apos;t materialize; the code from FastISel is good enough.
- This also switches to a simpler register allocator on ARM64, because ARM64 has so many registers.

The only downside of enabling it is that it requires a new-enough LLVM.  I believe that 3.6 is new enough.

I suspect it would be better to just enable this on all ARM64 and not have any PLATFORM(IOS) condition.

Are you OK with this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083387</commentid>
    <comment_count>9</comment_count>
      <attachid>250279</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-04-07 12:37:51 -0700</bug_when>
    <thetext>Comment on attachment 250279
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083388</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 12:42:34 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/182483</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084308</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-04-10 08:10:15 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Ossy: this patch enables FastISel on iOS/ARM64.  I believe that it is
&gt; broadly profitable on any ARM64 because:
&gt; 
&gt; - LLVM&apos;s FastISel backend generates code more quickly than the SelectionDAG
&gt; backend.
&gt; - ARM64 is an easy-enough target to generate code for that SelectionDAG&apos;s
&gt; throughput benefits don&apos;t materialize; the code from FastISel is good enough.
&gt; - This also switches to a simpler register allocator on ARM64, because ARM64
&gt; has so many registers.
&gt; 
&gt; The only downside of enabling it is that it requires a new-enough LLVM.  I
&gt; believe that 3.6 is new enough.
&gt; 
&gt; I suspect it would be better to just enable this on all ARM64 and not have
&gt; any PLATFORM(IOS) condition.
&gt; 
&gt; Are you OK with this?

Thanks for the heads up. I filed a new bug report for it: bug143606.
(But unfortunately we still have a blocker issue to bump 
to LLVM 3.6, we should fix it first.)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250279</attachid>
            <date>2015-04-07 11:23:33 -0700</date>
            <delta_ts>2015-04-07 12:37:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143489-20150407112243.patch</filename>
            <type>text/plain</type>
            <size>17245</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyNDgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE1LTA0LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TWFrZSBpdCBwb3NzaWJsZSB0byBlbmFibGUgTExWTSBGYXN0SVNlbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzNDg5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGRlY2lzaW9uIHRvIGVuYWJsZSBG
YXN0SVNlbCBpcyBtYWRlIGJ5IE9wdGlvbnMuaHxjcHAsIGJ1dCB0aGUgTExWTSBsaWJyYXJ5IGNh
biBkaXNhYmxlIGl0IGlmIGl0IGZpbmRzIHRoYXQgaXQgaXMgYnVpbHQKKyAgICAgICAgYWdhaW5z
dCBhIHZlcnNpb24gb2YgTExWTSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBpdC4gVGhlcmVhZnRlciwg
SlNDOjplbmFibGVMTFZNRmFzdElTZWwgaXMgdGhlIGZsYWcgdGhhdCB0ZWxscyB0aGUgc3lzdGVt
CisgICAgICAgIGlmIHdlIHNob3VsZCBlbmFibGUgaXQuCisKKyAgICAgICAgKiBmdGwvRlRMQ29t
cGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFTZWN0aW9uKToKKyAg
ICAgICAgKiBsbHZtL0luaXRpYWxpemVMTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6
ZUxMVk1JbXBsKToKKyAgICAgICAgKiBsbHZtL0luaXRpYWxpemVMTFZNLmg6CisgICAgICAgICog
bGx2bS9Jbml0aWFsaXplTExWTUxpbnV4LmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0TExWTUluaXRp
YWxpemVyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjppbml0aWFsaXplTExWTUltcGwpOiBEZWxl
dGVkLgorICAgICAgICAqIGxsdm0vSW5pdGlhbGl6ZUxMVk1NYWMuY3BwOgorICAgICAgICAoSlND
OjpnZXRMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVM
TFZNSW1wbCk6IERlbGV0ZWQuCisgICAgICAgICogbGx2bS9Jbml0aWFsaXplTExWTVBPU0lYLmNw
cDoKKyAgICAgICAgKEpTQzo6Z2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb25QT1NJWCk6CisgICAg
ICAgIChKU0M6OmluaXRpYWxpemVMTFZNUE9TSVgpOiBEZWxldGVkLgorICAgICAgICAqIGxsdm0v
SW5pdGlhbGl6ZUxMVk1QT1NJWC5oOgorICAgICAgICAqIGxsdm0vSW5pdGlhbGl6ZUxMVk1XaW4u
Y3BwOgorICAgICAgICAoSlNDOjpnZXRMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OmluaXRpYWxpemVMTFZNSW1wbCk6IERlbGV0ZWQuCisgICAgICAgICogbGx2bS9MTFZN
QVBJLmNwcDoKKyAgICAgICAgKiBsbHZtL0xMVk1BUEkuaDoKKyAgICAgICAgKiBsbHZtL2xpYnJh
cnkvTExWTUV4cG9ydHMuY3BwOgorICAgICAgICAoaW5pdENvbW1hbmRMaW5lKToKKyAgICAgICAg
KGluaXRpYWxpemVBbmRHZXRKU0NMTFZNQVBJKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKwogMjAxNS0wNC0wNiAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBwdXRfYnlf
dmFsX2RpcmVjdCBuZWVkIHRvIGNoZWNrIHRoZSBwcm9wZXJ0eSBpcyBpbmRleCBvciBub3QgZm9y
IHVzaW5nIHB1dERpcmVjdCAvIHB1dERpcmVjdEluZGV4CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2NSwxMyAr
NjY1LDEzIEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAg
ICAgb3B0aW9ucy5Ob0ZyYW1lUG9pbnRlckVsaW0gPSB0cnVlOwogICAgICAgICBpZiAoT3B0aW9u
czo6dXNlTExWTVNtYWxsQ29kZU1vZGVsKCkpCiAgICAgICAgICAgICBvcHRpb25zLkNvZGVNb2Rl
bCA9IExMVk1Db2RlTW9kZWxTbWFsbDsKLSAgICAgICAgb3B0aW9ucy5FbmFibGVGYXN0SVNlbCA9
IE9wdGlvbnM6OmVuYWJsZUxMVk1GYXN0SVNlbCgpOworICAgICAgICBvcHRpb25zLkVuYWJsZUZh
c3RJU2VsID0gZW5hYmxlTExWTUZhc3RJU2VsOwogICAgICAgICBvcHRpb25zLk1DSk1NID0gbGx2
bS0+Q3JlYXRlU2ltcGxlTUNKSVRNZW1vcnlNYW5hZ2VyKAogICAgICAgICAgICAgJnN0YXRlLCBt
bUFsbG9jYXRlQ29kZVNlY3Rpb24sIG1tQWxsb2NhdGVEYXRhU2VjdGlvbiwgbW1BcHBseVBlcm1p
c3Npb25zLCBtbURlc3Ryb3kpOwogICAgIAogICAgICAgICBMTFZNRXhlY3V0aW9uRW5naW5lUmVm
IGVuZ2luZTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgIGlmIChp
c0FSTTY0KCkpIHsKICNpZiBPUyhEQVJXSU4pCiAgICAgICAgICAgICBsbHZtLT5TZXRUYXJnZXQo
c3RhdGUubW9kdWxlLCAiYXJtNjQtYXBwbGUtaW9zIik7CiAjZWxpZiBPUyhMSU5VWCkKQEAgLTY3
OSw2ICs2NzksNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAj
ZWxzZQogI2Vycm9yICJVbnJlY29nbml6ZWQgT1MiCiAjZW5kaWYKKyAgICAgICAgfQogCiAgICAg
ICAgIGlmIChsbHZtLT5DcmVhdGVNQ0pJVENvbXBpbGVyRm9yTW9kdWxlKCZlbmdpbmUsIHN0YXRl
Lm1vZHVsZSwgJm9wdGlvbnMsIHNpemVvZihvcHRpb25zKSwgJmVycm9yKSkgewogICAgICAgICAg
ICAgZGF0YUxvZygiRkFUQUw6IENvdWxkIG5vdCBjcmVhdGUgTExWTSBleGVjdXRpb24gZW5naW5l
OiAiLCBlcnJvciwgIlxuIik7CkBAIC03MTksNiArNzIwLDkgQEAgdm9pZCBjb21waWxlKFN0YXRl
JiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgICAgICAgICAgbGx2bS0+QWRkR1ZOUGFzcyhtb2R1
bGVQYXNzZXMpOwogICAgICAgICAgICAgbGx2bS0+QWRkQ0ZHU2ltcGxpZmljYXRpb25QYXNzKG1v
ZHVsZVBhc3Nlcyk7CiAgICAgICAgICAgICBsbHZtLT5BZGREZWFkU3RvcmVFbGltaW5hdGlvblBh
c3MobW9kdWxlUGFzc2VzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGVuYWJsZUxM
Vk1GYXN0SVNlbCkKKyAgICAgICAgICAgICAgICBsbHZtLT5BZGRMb3dlclN3aXRjaFBhc3MobW9k
dWxlUGFzc2VzKTsKIAogICAgICAgICAgICAgbGx2bS0+UnVuUGFzc01hbmFnZXIobW9kdWxlUGFz
c2VzLCBtb2R1bGUpOwogICAgICAgICB9IGVsc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNLmNwcAkocmV2aXNpb24gMTgyMjAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI5LDEyICsyOSw0MiBAQAogI2lmIEhBVkUoTExWTSkKIAogI2luY2x1ZGUgIkxMVk1B
UEkuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1
ZGUgPHd0Zi9EYXRhTG9nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgcHRocmVhZF9v
bmNlX3QgaW5pdGlhbGl6ZUxMVk1PbmNlS2V5ID0gUFRIUkVBRF9PTkNFX0lOSVQ7CiAKK3N0YXRp
YyB2b2lkIGluaXRpYWxpemVMTFZNSW1wbCgpCit7CisgICAgY29uc3QgYm9vbCB2ZXJib3NlID0K
KyAgICAgICAgT3B0aW9uczo6dmVyYm9zZUZUTENvbXBpbGF0aW9uKCkKKyAgICAgICAgfHwgT3B0
aW9uczo6c2hvd0ZUTERpc2Fzc2VtYmx5KCkKKyAgICAgICAgfHwgT3B0aW9uczo6dmVyYm9zZUZU
TEZhaWx1cmUoKQorICAgICAgICB8fCBPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb24oKQorICAg
ICAgICB8fCBPcHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25z
OjpzaG93RGlzYXNzZW1ibHkoKTsKKyAgICAKKyAgICBMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbiBp
bml0aWFsaXplciA9IGdldExMVk1Jbml0aWFsaXplckZ1bmN0aW9uKHZlcmJvc2UpOworICAgIGlm
ICghaW5pdGlhbGl6ZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBib29sIGVuYWJsZUZh
c3RJU2VsID0gT3B0aW9uczo6ZW5hYmxlTExWTUZhc3RJU2VsKCk7CisgICAgbGx2bSA9IGluaXRp
YWxpemVyKFdURkxvZ0Fsd2F5c0FuZENyYXNoLCAmZW5hYmxlRmFzdElTZWwpOworICAgIGlmICgh
bGx2bSkgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkxMVk0g
aW5pdGlsaXphdGlvbiBmYWlsZWQuXG4iKTsKKyAgICB9CisgICAgaWYgKE9wdGlvbnM6OmVuYWJs
ZUxMVk1GYXN0SVNlbCgpICYmICFlbmFibGVGYXN0SVNlbCkgeworICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkZhc3QgSVNlbCByZXF1ZXN0ZWQgYnV0IExMVk0gbm90
IG5ldyBlbm91Z2guXG4iKTsKKyAgICB9CisgICAgCisgICAgZW5hYmxlTExWTUZhc3RJU2VsID0g
ZW5hYmxlRmFzdElTZWw7Cit9CisKIGJvb2wgaW5pdGlhbGl6ZUxMVk0oKQogewogICAgIHB0aHJl
YWRfb25jZSgmaW5pdGlhbGl6ZUxMVk1PbmNlS2V5LCBpbml0aWFsaXplTExWTUltcGwpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTS5oCShyZXZpc2lv
biAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDE2ICsyOCwyMCBAQAogCiAjaWYgSEFWRShMTFZNKQog
CisjaW5jbHVkZSAiTExWTUFQSS5oIgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIGluaXRpYWxpemVMTFZN
SW1wbCgpOwordHlwZWRlZiB2b2lkICgqTG9nZ2VyRnVuY3Rpb24pKGNvbnN0IGNoYXIqLCAuLi4p
IFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpOwordHlwZWRlZiBMTFZNQVBJKiAoKkxMVk1Jbml0
aWFsaXplckZ1bmN0aW9uKShMb2dnZXJGdW5jdGlvbiwgYm9vbCogZW5hYmxlRmFzdElTZWwpOwor
CitMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbiBnZXRMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbihib29s
IHZlcmJvc2UpOwogCiBleHRlcm4gY29uc3QgQ1N0cmluZyogbGx2bUJpdGNvZGVMaWJyYXJ5Rm9y
SW5saW5pbmdQYXRoOwogCi0vLyBZb3UgbXN1dCBjYWxsIHRoaXMgYmVmb3JlIHVzaW5nIEpTQzo6
bGx2bS4gSXQncyBzYWZlIHRvIGNhbGwgdGhpcyBtdWx0aXBsZSB0aW1lcy4KKy8vIFlvdSBtdXN0
IGNhbGwgdGhpcyBiZWZvcmUgdXNpbmcgSlNDOjpsbHZtLiBJdCdzIHNhZmUgdG8gY2FsbCB0aGlz
IG11bHRpcGxlIHRpbWVzLgogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHN1Y2Nlc3NmdWxseSBsb2Fk
ZWQgTExWTS4gUmV0dXJucyBmYWxzZSBpZiB3ZSBkaWRuJ3QuCiBib29sIGluaXRpYWxpemVMTFZN
KCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNTGlu
dXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxp
emVMTFZNTGludXguY3BwCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGx2bS9Jbml0aWFsaXplTExWTUxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJv
bmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMzLDkgKzM0LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgaW5pdGlhbGl6ZUxM
Vk1JbXBsKCkKK0xMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGdldExMVk1Jbml0aWFsaXplckZ1bmN0
aW9uKGJvb2wgdmVyYm9zZSkKIHsKLSAgICBpbml0aWFsaXplTExWTVBPU0lYKCJsaWJsbHZtRm9y
SlNDLnNvIik7CisgICAgcmV0dXJuIGdldExMVk1Jbml0aWFsaXplckZ1bmN0aW9uUE9TSVgoImxp
Ymxsdm1Gb3JKU0Muc28iLCB2ZXJib3NlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTU1hYy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk1NYWMuY3Bw
CShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFs
aXplTExWTU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDkgKzM3LDkgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLXZvaWQgaW5pdGlhbGl6ZUxMVk1JbXBsKCkKK0xMVk1Jbml0aWFsaXplckZ1bmN0
aW9uIGdldExMVk1Jbml0aWFsaXplckZ1bmN0aW9uKGJvb2wgdmVyYm9zZSkKIHsKLSAgICBpbml0
aWFsaXplTExWTVBPU0lYKHRvQ1N0cmluZyhidW5kbGVQYXRoKCkuZGF0YSgpLCAiL0xpYnJhcmll
cy9saWJsbHZtRm9ySlNDLmR5bGliIikuZGF0YSgpKTsKKyAgICByZXR1cm4gZ2V0TExWTUluaXRp
YWxpemVyRnVuY3Rpb25QT1NJWCh0b0NTdHJpbmcoYnVuZGxlUGF0aCgpLmRhdGEoKSwgIi9MaWJy
YXJpZXMvbGlibGx2bUZvckpTQy5keWxpYiIpLmRhdGEoKSwgdmVyYm9zZSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6
ZUxMVk1QT1NJWC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0v
SW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHAJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNUE9TSVguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM1LDE5ICszNSw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi10eXBlZGVmIHZvaWQgKCpM
b2dnZXJGdW5jdGlvbikoY29uc3QgY2hhciosIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMSwg
Mik7Ci10eXBlZGVmIExMVk1BUEkqICgqSW5pdGlhbGl6ZXJGdW5jdGlvbikoTG9nZ2VyRnVuY3Rp
b24pOwotCi12b2lkIGluaXRpYWxpemVMTFZNUE9TSVgoY29uc3QgY2hhciogbGlicmFyeU5hbWUp
CitMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbiBnZXRMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvblBPU0lY
KGNvbnN0IGNoYXIqIGxpYnJhcnlOYW1lLCBib29sIHZlcmJvc2UpCiB7Ci0gICAgY29uc3QgYm9v
bCB2ZXJib3NlID0KLSAgICAgICAgT3B0aW9uczo6dmVyYm9zZUZUTENvbXBpbGF0aW9uKCkKLSAg
ICAgICAgfHwgT3B0aW9uczo6c2hvd0ZUTERpc2Fzc2VtYmx5KCkKLSAgICAgICAgfHwgT3B0aW9u
czo6dmVyYm9zZUZUTEZhaWx1cmUoKQotICAgICAgICB8fCBPcHRpb25zOjp2ZXJib3NlQ29tcGls
YXRpb24oKQotICAgICAgICB8fCBPcHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHkoKQotICAgICAg
ICB8fCBPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKTsKLSAgICAKICAgICBpbnQgZmxhZ3MgPSBS
VExEX05PVzsKICAgICAKICNpZiBPUyhMSU5VWCkKQEAgLTYzLDIzICs1MiwxOSBAQCB2b2lkIGlu
aXRpYWxpemVMTFZNUE9TSVgoY29uc3QgY2hhciogbGliCiAgICAgaWYgKCFsaWJyYXJ5KSB7CiAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiRmFpbGVkIHRvIGxvYWQg
TExWTSBsaWJyYXJ5IGF0ICIsIGxpYnJhcnlOYW1lLCAiOiAiLCBkbGVycm9yKCksICJcbiIpOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAg
ICBjb25zdCBjaGFyKiBzeW1ib2xOYW1lID0gImluaXRpYWxpemVBbmRHZXRKU0NMTFZNQVBJIjsK
LSAgICBJbml0aWFsaXplckZ1bmN0aW9uIGluaXRpYWxpemVyID0gYml0d2lzZV9jYXN0PEluaXRp
YWxpemVyRnVuY3Rpb24+KAorICAgIExMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGluaXRpYWxpemVy
ID0gYml0d2lzZV9jYXN0PExMVk1Jbml0aWFsaXplckZ1bmN0aW9uPigKICAgICAgICAgZGxzeW0o
bGlicmFyeSwgc3ltYm9sTmFtZSkpOwogICAgIGlmICghaW5pdGlhbGl6ZXIpIHsKICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJGYWlsZWQgdG8gZmluZCAiLCBzeW1i
b2xOYW1lLCAiIGluICIsIGxpYnJhcnlOYW1lLCAiOiAiLCBkbGVycm9yKCkpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKLSAgICBsbHZtID0g
aW5pdGlhbGl6ZXIoV1RGTG9nQWx3YXlzQW5kQ3Jhc2gpOwotICAgIGlmICghbGx2bSkgewotICAg
ICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxMVk0gaW5pdGlsaXphdGlv
biBmYWlsZWQuXG4iKTsKLSAgICB9CisgICAgcmV0dXJuIGluaXRpYWxpemVyOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxp
emVMTFZNUE9TSVguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9J
bml0aWFsaXplTExWTVBPU0lYLmgJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNUE9TSVguaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsOSAr
MjgsMTEgQEAKIAogI2lmIEhBVkUoTExWTSkKIAorI2luY2x1ZGUgIkluaXRpYWxpemVMTFZNLmgi
CisKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIGluaXRpYWxpemVMTFZNUE9TSVgoY29uc3QgY2hh
ciogbGlicmFyeU5hbWUpOworTExWTUluaXRpYWxpemVyRnVuY3Rpb24gZ2V0TExWTUluaXRpYWxp
emVyRnVuY3Rpb25QT1NJWChjb25zdCBjaGFyKiBsaWJyYXJ5TmFtZSwgYm9vbCB2ZXJib3NlKTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZt
L0luaXRpYWxpemVMTFZNV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGx2bS9Jbml0aWFsaXplTExWTVdpbi5jcHAJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzMsMjEgKzMzLDE3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi10eXBlZGVmIExMVk1BUEkq
ICgqSW5pdGlhbGl6ZXJGdW5jdGlvbikodm9pZCgqKShjb25zdCBjaGFyKiwgLi4uKSk7Ci0KLXZv
aWQgaW5pdGlhbGl6ZUxMVk1JbXBsKCkKK0xMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGdldExMVk1J
bml0aWFsaXplckZ1bmN0aW9uKGJvb2wgLyogdmVyYm9zZSAqLykKIHsKICAgICBjb25zdCB3Y2hh
cl90KiBsaWJyYXJ5TmFtZSA9IEwibGlibGx2bUZvckpTQy5kbGwiOwogCiAgICAgSE1PRFVMRSBs
aWJyYXJ5ID0gOjpMb2FkTGlicmFyeShsaWJyYXJ5TmFtZSk7CiAKICAgICBpZiAoIWxpYnJhcnkp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBjb25zdCBj
aGFyKiBzeW1ib2xOYW1lID0gImluaXRpYWxpemVBbmRHZXRKU0NMTFZNQVBJIjsKLSAgICBJbml0
aWFsaXplckZ1bmN0aW9uIGluaXRpYWxpemVyID0gYml0d2lzZV9jYXN0PEluaXRpYWxpemVyRnVu
Y3Rpb24+KEdldFByb2NBZGRyZXNzKGxpYnJhcnksIHN5bWJvbE5hbWUpKTsKLSAgICBpZiAoaW5p
dGlhbGl6ZXIpCi0gICAgICAgIGxsdm0gPSBpbml0aWFsaXplcihXVEZMb2dBbHdheXNBbmRDcmFz
aCk7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbj4oR2V0
UHJvY0FkZHJlc3MobGlicmFyeSwgc3ltYm9sTmFtZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUEkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUEkuY3BwCShyZXZpc2lvbiAx
ODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNQVBJLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIExMVk1BUEkqIGxsdm07
Citib29sIGVuYWJsZUxMVk1GYXN0SVNlbDsKIAogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGx2bS9MTFZNQVBJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsdm0vTExWTUFQSS5oCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGx2bS9MTFZNQVBJLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDkgKzM4LDEzIEBAIHN0cnVjdCBM
TFZNQVBJIHsKICAgICByZXR1cm5UeXBlICgqbmFtZSkgc2lnbmF0dXJlOwogICAgIEZPUl9FQUNI
X0xMVk1fQVBJX0ZVTkNUSU9OKExMVk1fQVBJX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKQogI3VuZGVm
IExMVk1fQVBJX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OCisgICAgCisgICAgLy8gRnVuY3Rpb25zIHRo
YXQgd2UgYWRkIGNvbmRpdGlvbmFsbHkuCisgICAgdm9pZCAoKkFkZExvd2VyU3dpdGNoUGFzcyko
TExWTVBhc3NNYW5hZ2VyUmVmIFBNKTsKIH07CiAKIGV4dGVybiBMTFZNQVBJKiBsbHZtOworZXh0
ZXJuIGJvb2wgZW5hYmxlTExWTUZhc3RJU2VsOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNRXhwb3J0cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNRXhwb3J0
cy5jcHAJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xp
YnJhcnkvTExWTUV4cG9ydHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNCArNTQsMjQgQEAK
ICN1bmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCiAKIHN0YXRpYyB2b2lkIGxsdm1DcmFzaChj
b25zdCBjaGFyKikgTk9fUkVUVVJOOwotZXh0ZXJuICJDIiBXVEZfRVhQT1JUX1BSSVZBVEUgSlND
OjpMTFZNQVBJKiBpbml0aWFsaXplQW5kR2V0SlNDTExWTUFQSSh2b2lkICgqKShjb25zdCBjaGFy
KiwgLi4uKSBOT19SRVRVUk4pOworZXh0ZXJuICJDIiBXVEZfRVhQT1JUX1BSSVZBVEUgSlNDOjpM
TFZNQVBJKiBpbml0aWFsaXplQW5kR2V0SlNDTExWTUFQSSgKKyAgICB2b2lkICgqKShjb25zdCBj
aGFyKiwgLi4uKSBOT19SRVRVUk4sIGJvb2wqIGVuYWJsZUZhc3RJU2VsKTsKIAogc3RhdGljIHZv
aWQgbGx2bUNyYXNoKGNvbnN0IGNoYXIqIHJlYXNvbikKIHsKICAgICBnX2xsdm1UcmFwQ2FsbGJh
Y2soIkxMVk0gZmF0YWwgZXJyb3I6ICVzIiwgcmVhc29uKTsKIH0KIAotZXh0ZXJuICJDIiBKU0M6
OkxMVk1BUEkqIGluaXRpYWxpemVBbmRHZXRKU0NMTFZNQVBJKHZvaWQgKCpjYWxsYmFjaykoY29u
c3QgY2hhciosIC4uLikgTk9fUkVUVVJOKQordGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KK3Zv
aWQgaW5pdENvbW1hbmRMaW5lKEFyZ3MuLi4gYXJncykKK3sKKyAgICBjb25zdCBjaGFyKiB0aGVB
cmdzW10gPSB7IGFyZ3MuLi4gfTsKKyAgICBsbHZtOjpjbDo6UGFyc2VDb21tYW5kTGluZU9wdGlv
bnMoc2l6ZW9mKHRoZUFyZ3MpIC8gc2l6ZW9mKGNvbnN0IGNoYXIqKSwgdGhlQXJncyk7Cit9CisK
K2V4dGVybiAiQyIgSlNDOjpMTFZNQVBJKiBpbml0aWFsaXplQW5kR2V0SlNDTExWTUFQSSgKKyAg
ICB2b2lkICgqY2FsbGJhY2spKGNvbnN0IGNoYXIqLCAuLi4pIE5PX1JFVFVSTiwKKyAgICBib29s
KiBlbmFibGVGYXN0SVNlbCkKIHsKICAgICBnX2xsdm1UcmFwQ2FsbGJhY2sgPSBjYWxsYmFjazsK
ICAgICAKQEAgLTk5LDE5ICsxMDksMzMgQEAgZXh0ZXJuICJDIiBKU0M6OkxMVk1BUEkqIGluaXRp
YWxpemVBbmRHZQogICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogI2VuZGlmCiAgICAg
Ci0gICAgY29uc3QgY2hhciogYXJnc1tdID0gewotICAgICAgICAibGx2bUZvckpTQy5keWxpYiIs
Ci0gICAgICAgICItZW5hYmxlLXBhdGNocG9pbnQtbGl2ZW5lc3M9dHJ1ZSIKLSAgICB9OwotICAg
IGxsdm06OmNsOjpQYXJzZUNvbW1hbmRMaW5lT3B0aW9ucyhzaXplb2YoYXJncykgLyBzaXplb2Yo
Y29uc3QgY2hhciopLCBhcmdzKTsKKyNpZiBMTFZNX1ZFUlNJT05fTUFKT1IgPj0gNCB8fCAoTExW
TV9WRVJTSU9OX01BSk9SID09IDMgJiYgTExWTV9WRVJTSU9OX01JTk9SID49IDYpCisgICAgLy8g
SXQncyBPSyB0byBoYXZlIGZhc3QgSVNlbCwgaWYgaXQgd2FzIHJlcXVlc3RlZC4KKyNlbHNlCisg
ICAgLy8gV2UgZG9uJ3QgaGF2ZSBlbm91Z2ggc3VwcG9ydCBmb3IgZmFzdCBJU2VsLiBEaXNhYmxl
IGl0LgorICAgICplbmFibGVGYXN0SVNlbCA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAoKmVu
YWJsZUZhc3RJU2VsKQorICAgICAgICBpbml0Q29tbWFuZExpbmUoImxsdm1Gb3JKU0MuZHlsaWIi
LCAiLWVuYWJsZS1taXNjaGVkPWZhbHNlIiwgIi1yZWdhbGxvYz1iYXNpYyIpOworICAgIGVsc2UK
KyAgICAgICAgaW5pdENvbW1hbmRMaW5lKCJsbHZtRm9ySlNDLmR5bGliIiwgIi1lbmFibGUtcGF0
Y2hwb2ludC1saXZlbmVzcz10cnVlIik7CiAgICAgCiAgICAgSlNDOjpMTFZNQVBJKiByZXN1bHQg
PSBuZXcgSlNDOjpMTFZNQVBJOwogICAgIAorICAgIC8vIEluaXRpYWxpemUgdGhlIHdob2xlIHRo
aW5nIHRvIG51bGwuCisgICAgbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKCpyZXN1bHQpKTsKKyAg
ICAKICNkZWZpbmUgTExWTV9BUElfRlVOQ1RJT05fQVNTSUdOTUVOVChyZXR1cm5UeXBlLCBuYW1l
LCBzaWduYXR1cmUpIFwKICAgICByZXN1bHQtPm5hbWUgPSBMTFZNIyNuYW1lOwogICAgIEZPUl9F
QUNIX0xMVk1fQVBJX0ZVTkNUSU9OKExMVk1fQVBJX0ZVTkNUSU9OX0FTU0lHTk1FTlQpOwogI3Vu
ZGVmIExMVk1fQVBJX0ZVTkNUSU9OX0FTU0lHTk1FTlQKICAgICAKKyAgICAvLyBIYW5kbGUgY29u
ZGl0aW9uYWxseSBhdmFpbGFibGUgZnVuY3Rpb25zLgorI2lmIExMVk1fVkVSU0lPTl9NQUpPUiA+
PSA0IHx8IChMTFZNX1ZFUlNJT05fTUFKT1IgPT0gMyAmJiBMTFZNX1ZFUlNJT05fTUlOT1IgPj0g
NikKKyAgICByZXN1bHQtPkFkZExvd2VyU3dpdGNoUGFzcyA9IExMVk1BZGRMb3dlclN3aXRjaFBh
c3M7CisjZW5kaWYKKyAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMTgyMjAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3NCw2ICsyNzQsMTEgQEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKICAgICBuYW1l
XygpID0gZGVmYXVsdFZhbHVlXzsKICAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJT04pCiAj
dW5kZWYgRk9SX0VBQ0hfT1BUSU9OCisgICAgCisgICAgLy8gSXQgKnByb2JhYmx5KiBtYWtlcyBz
ZW5zZSBmb3Igb3RoZXIgcGxhdGZvcm1zIHRvIGVuYWJsZSB0aGlzLgorI2lmIFBMQVRGT1JNKElP
UykgJiYgQ1BVKEFSTTY0KQorICAgIGVuYWJsZUxMVk1GYXN0SVNlbCgpID0gdHJ1ZTsKKyNlbmRp
ZgogICAgICAgICAKICAgICAvLyBBbGxvdyBlbnZpcm9ubWVudCB2YXJzIHRvIG92ZXJyaWRlIG9w
dGlvbnMgaWYgYXBwbGljYWJsZS4KICAgICAvLyBUaGUgZXZuIHZhciBzaG91bGQgYmUgdGhlIG5h
bWUgb2YgdGhlIG9wdGlvbiBwcmVmaXhlZCB3aXRoCg==
</data>
<flag name="review"
          id="275095"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>