Bug 143146

Summary: Clean up Identifier factories to clarify the meaning of StringImpl*
Product: WebKit Reporter: Yusuke Suzuki <ysuzuki>
Component: New BugsAssignee: Yusuke Suzuki <ysuzuki>
Status: RESOLVED FIXED    
Severity: Normal CC: commit-queue, darin, fpizlo, ggaren
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on:    
Bug Blocks: 141106    
Attachments:
Description Flags
Patch
none
Patch
none
Patch none

Description Yusuke Suzuki 2015-03-27 13:03:48 PDT
Clean up Identifier factories to clarify the meaning of StringImpl*
Comment 1 Yusuke Suzuki 2015-03-27 13:13:35 PDT
Created attachment 249601 [details]
Patch
Comment 2 Yusuke Suzuki 2015-03-27 13:28:33 PDT
Almost all changes in WebKit2 / WebKit / WebCore  are Identifier => Identifier::fromString/Identifier::fromUid.

In WTF, StringImpl* is now cleaned up to explicitly use it as uid.
Renaming isUnique to isSymbol (https://bugs.webkit.org/show_bug.cgi?id=141106#c37)
Introducing 3 string kinds,
        1. StringNormal (non-atomic, non-symbol)
        2. StringAtomic (atomic, non-symbol)
        3. StringSymbol (non-atomic, symbol)

In Identifier, explicitly define 2 factory functions, fromUid and fromString.
Comment 3 Yusuke Suzuki 2015-03-27 13:31:32 PDT
Created attachment 249603 [details]
Patch
Comment 4 Yusuke Suzuki 2015-03-28 02:00:29 PDT
Created attachment 249657 [details]
Patch
Comment 5 Yusuke Suzuki 2015-03-31 11:37:06 PDT
Object.getOwnPropertySymbols patch becomes too large.
So this patch is spawned from it.
Comment 6 Filip Pizlo 2015-03-31 11:44:34 PDT
Performance impact?

Please use Tools/Scripts/run-jsc-benchmarks Baseline:<path to baseline jsc> Mine:<path to jsc with your changes>

Preferably also configure it to run Octane, and post those results.
Comment 7 Yusuke Suzuki 2015-03-31 11:46:27 PDT
(In reply to comment #6)
> Performance impact?
> 
> Please use Tools/Scripts/run-jsc-benchmarks Baseline:<path to baseline jsc>
> Mine:<path to jsc with your changes>
> 
> Preferably also configure it to run Octane, and post those results.

Thanks! I'll take it.
Comment 8 Yusuke Suzuki 2015-03-31 12:29:21 PDT
First result, not using Octane. I'll setup environment to run Octane in run-jsc-benchmarks

Benchmark report for SunSpider, LongSpider, V8Spider, and JSRegress on yusuke (MacBookPro8,2).

VMs tested:
"Baseline" at /Users/yusuke/dev/WebKit/WebKitBuild/Release/jsc
"Mine" at /Users/yusuke/dev/WebKit/WebKitBuild/identifier/Release/jsc

Collected 4 samples per benchmark/VM, with 4 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.

                                                      Baseline                    Mine                                       
SunSpider:
   3d-cube                                         5.6353+-0.8267            5.4421+-0.2245          might be 1.0355x faster
   3d-morph                                        6.0991+-0.1264            6.0425+-0.0250        
   3d-raytrace                                     7.3867+-1.3110            6.8843+-0.2270          might be 1.0730x faster
   access-binary-trees                             2.4324+-0.0666     ?      2.4432+-0.1645        ?
   access-fannkuch                                 6.5162+-0.1185     ?      6.5640+-0.1765        ?
   access-nbody                                    3.1632+-0.4174     ?      3.1801+-0.6810        ?
   access-nsieve                                   3.3439+-0.1437     ?      3.3710+-0.0997        ?
   bitops-3bit-bits-in-byte                        1.9228+-0.0555            1.9150+-0.0400        
   bitops-bits-in-byte                             3.6048+-0.0783            3.5626+-0.0873          might be 1.0119x faster
   bitops-bitwise-and                              2.3672+-0.1876     ?      2.3697+-0.1335        ?
   bitops-nsieve-bits                              5.6820+-2.9908            4.6463+-1.3994          might be 1.2229x faster
   controlflow-recursive                           2.3619+-0.0920     ?      2.3641+-0.1382        ?
   crypto-aes                                      5.2573+-2.5325            4.6362+-0.2642          might be 1.1340x faster
   crypto-md5                                      2.6955+-0.0563            2.6624+-0.0451          might be 1.0124x faster
   crypto-sha1                                     2.8760+-0.2136            2.8194+-0.2818          might be 1.0201x faster
   date-format-tofte                               9.8620+-0.2264            9.7141+-0.3831          might be 1.0152x faster
   date-format-xparb                               5.5468+-0.0819            5.5127+-0.1552        
   math-cordic                                     3.4692+-0.0961            3.4542+-0.1008        
   math-partial-sums                               6.6200+-3.6915     ?      7.2188+-3.1253        ? might be 1.0904x slower
   math-spectral-norm                              2.3818+-0.0517     ?      2.3848+-0.0923        ?
   regexp-dna                                      9.0883+-4.1359            7.4827+-0.1531          might be 1.2146x faster
   string-base64                                   5.8726+-2.9952            4.8553+-0.1943          might be 1.2095x faster
   string-fasta                                    7.1832+-0.2976     ?      7.2688+-0.1834        ? might be 1.0119x slower
   string-tagcloud                                10.3871+-0.2510     ?     10.7244+-1.5029        ? might be 1.0325x slower
   string-unpack-code                             22.9854+-6.1520           22.3551+-4.2903          might be 1.0282x faster
   string-validate-input                           5.1447+-0.0773     ?      5.3025+-0.1813        ? might be 1.0307x slower

   <arithmetic>                                    5.7648+-0.1618            5.5837+-0.2443          might be 1.0324x faster

                                                      Baseline                    Mine                                       
LongSpider:
   3d-cube                                       937.5034+-28.5713    !    983.3462+-8.7573        ! definitely 1.0489x slower
   3d-morph                                     1590.1312+-4.7993     ?   1596.8079+-5.8036        ?
   3d-raytrace                                   819.1777+-17.7360    ?    834.9861+-19.5181       ? might be 1.0193x slower
   access-binary-trees                          1141.2209+-20.5716    ?   1151.3492+-8.5751        ?
   access-fannkuch                               355.6476+-28.1854         354.8389+-16.5104       
   access-nbody                                  675.2780+-3.6932     ^    666.6944+-2.3261        ^ definitely 1.0129x faster
   access-nsieve                                 955.2313+-29.9591         948.9088+-25.1972       
   bitops-3bit-bits-in-byte                       52.2550+-0.8546     ?     52.9308+-2.7214        ? might be 1.0129x slower
   bitops-bits-in-byte                           104.7086+-12.9789         101.7750+-4.9805          might be 1.0288x faster
   bitops-nsieve-bits                            811.8054+-16.8935    ?    822.7943+-21.4909       ? might be 1.0135x slower
   controlflow-recursive                         525.1616+-6.3043     !    534.5832+-2.3200        ! definitely 1.0179x slower
   crypto-aes                                    778.6168+-13.1455    ?    779.4603+-18.0428       ?
   crypto-md5                                    645.5275+-4.0026     ?    647.6222+-13.4067       ?
   crypto-sha1                                   739.7191+-14.2289    ?    748.9631+-36.3434       ? might be 1.0125x slower
   date-format-tofte                             844.8108+-41.1818         819.2424+-36.6379         might be 1.0312x faster
   date-format-xparb                             794.2470+-37.3342         792.3867+-71.9792       
   math-cordic                                   658.2045+-5.8346          657.2531+-2.8058        
   math-partial-sums                             594.8108+-22.7876    ?    600.8997+-28.3040       ? might be 1.0102x slower
   math-spectral-norm                            905.7029+-5.4484     ?    911.6506+-13.6982       ?
   string-base64                                 422.6147+-22.4303         414.5021+-13.2196         might be 1.0196x faster
   string-fasta                                  484.1487+-6.3226          482.7860+-9.8633        
   string-tagcloud                               234.5778+-13.3018    ?    238.8315+-1.6006        ? might be 1.0181x slower

   <geometric>                                   562.2380+-4.6091     ?    564.0316+-2.5589        ? might be 1.0032x slower

                                                      Baseline                    Mine                                       
V8Spider:
   crypto                                         63.4139+-2.4498           61.9439+-3.0494          might be 1.0237x faster
   deltablue                                     101.8953+-4.4657           96.8514+-16.4290         might be 1.0521x faster
   earley-boyer                                   45.6738+-1.2495     ?     45.6927+-1.1642        ?
   raytrace                                       41.2145+-2.3192           39.7695+-2.1257          might be 1.0363x faster
   regexp                                         74.3088+-3.2638     ?     74.6990+-5.3181        ?
   richards                                       84.6373+-4.7250     ?     90.2291+-5.7002        ? might be 1.0661x slower
   splay                                          42.7302+-3.5544           40.4140+-4.0788          might be 1.0573x faster

   <geometric>                                    61.3216+-1.0692           60.4458+-1.8795          might be 1.0145x faster

                                                      Baseline                    Mine                                       
JSRegress:
   abs-boolean                                     3.1035+-0.1283     ?      3.2075+-0.1012        ? might be 1.0335x slower
   adapt-to-double-divide                         17.1965+-0.6752           17.1837+-0.5172        
   aliased-arguments-getbyval                      1.2579+-0.0593     ?      1.4305+-0.5950        ? might be 1.1372x slower
   allocate-big-object                             2.7850+-0.1101            2.7781+-0.0495        
   arguments-named-and-reflective                 14.0236+-3.7189           13.5850+-2.7831          might be 1.0323x faster
   arguments-out-of-bounds                        15.9777+-0.7605     ?     16.1884+-2.3050        ? might be 1.0132x slower
   arguments-strict-mode                          12.6647+-2.4461           11.7845+-0.2569          might be 1.0747x faster
   arguments                                      11.4329+-3.3660     ?     11.6825+-2.9243        ? might be 1.0218x slower
   arity-mismatch-inlining                         0.9380+-0.0447     ?      0.9843+-0.2069        ? might be 1.0493x slower
   array-access-polymorphic-structure              7.3102+-0.6834     ?      9.6050+-4.3327        ? might be 1.3139x slower
   array-nonarray-polymorhpic-access              40.1147+-1.9214     ?     41.7183+-0.9603        ? might be 1.0400x slower
   array-prototype-every                         100.4833+-3.5329     ?    102.1475+-7.4441        ? might be 1.0166x slower
   array-prototype-forEach                        97.0215+-3.4324     ?     99.3673+-5.8660        ? might be 1.0242x slower
   array-prototype-map                           118.4540+-10.4749         111.4524+-9.8444          might be 1.0628x faster
   array-prototype-some                          100.6805+-6.0608     ?    102.4485+-8.3114        ? might be 1.0176x slower
   array-splice-contiguous                        48.4435+-2.5237           47.7895+-4.8558          might be 1.0137x faster
   array-with-double-add                           4.4432+-0.2995            4.4421+-0.1642        
   array-with-double-increment                     3.7227+-0.1572     ?      3.8392+-0.1810        ? might be 1.0313x slower
   array-with-double-mul-add                       5.2820+-0.1885            5.2496+-0.1389        
   array-with-double-sum                           3.4246+-0.1155     ?      3.4357+-0.1269        ?
   array-with-int32-add-sub                        7.7073+-0.0502            7.6254+-0.0663          might be 1.0107x faster
   array-with-int32-or-double-sum                  3.4621+-0.0380     ?      3.5204+-0.1001        ? might be 1.0169x slower
   ArrayBuffer-DataView-alloc-large-long-lived
                                                  40.6982+-4.0840           40.0147+-3.5477          might be 1.0171x faster
   ArrayBuffer-DataView-alloc-long-lived          16.8784+-3.5450     ?     17.5261+-4.4258        ? might be 1.0384x slower
   ArrayBuffer-Int32Array-byteOffset               4.0253+-0.1910            4.0235+-0.1830        
   ArrayBuffer-Int8Array-alloc-large-long-lived
                                                  42.0272+-4.9528     ?     43.0339+-7.6263        ? might be 1.0240x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer
                                                  28.6893+-4.9279     ?     29.0190+-5.5475        ? might be 1.0115x slower
   ArrayBuffer-Int8Array-alloc-long-lived         16.2690+-4.8019           15.1385+-0.3821          might be 1.0747x faster
   ArrayBuffer-Int8Array-alloc                    15.5809+-6.2996     ?     15.6381+-5.0596        ?
   asmjs_bool_bug                                  7.8658+-0.0987     ?      9.1540+-3.8345        ? might be 1.1638x slower
   assign-custom-setter-polymorphic                3.2542+-0.1005     ?      3.3127+-0.1421        ? might be 1.0180x slower
   assign-custom-setter                            4.3877+-0.1720     ?      4.7025+-0.2670        ? might be 1.0718x slower
   basic-set                                       9.5545+-0.3787     ?      9.8511+-0.5647        ? might be 1.0310x slower
   big-int-mul                                     4.5270+-0.1025            4.4946+-0.3037        
   boolean-test                                    3.4167+-0.1510            3.3578+-0.1334          might be 1.0175x faster
   branch-fold                                     4.1937+-0.0446     ?      4.2535+-0.1148        ? might be 1.0143x slower
   by-val-generic                                  8.6541+-0.1751     ?      8.7014+-0.1352        ?
   call-spread-apply                              36.3522+-4.4309           35.9220+-4.5184          might be 1.0120x faster
   call-spread-call                               26.2310+-0.4139     ?     28.4358+-4.0530        ? might be 1.0841x slower
   captured-assignments                            0.4978+-0.0275            0.4824+-0.0313          might be 1.0319x faster
   cast-int-to-double                              5.5855+-0.0378     ?      5.5998+-0.0518        ?
   cell-argument                                   8.7169+-0.2207     ?      8.9020+-0.7139        ? might be 1.0212x slower
   cfg-simplify                                    3.1686+-0.1111            3.0804+-0.0293          might be 1.0286x faster
   chain-getter-access                            11.4119+-0.1681           11.3120+-0.1248        
   cmpeq-obj-to-obj-other                         12.4672+-2.0397           11.8927+-1.1730          might be 1.0483x faster
   constant-test                                   5.2326+-0.0310     ?      5.3173+-0.1953        ? might be 1.0162x slower
   DataView-custom-properties                     48.2158+-4.9422           47.7755+-4.0560        
   deconstructing-parameters-overridden-by-function
                                                   0.5242+-0.0229            0.5222+-0.0271        
   delay-tear-off-arguments-strictmode            16.4005+-6.0962           16.0378+-2.3497          might be 1.0226x faster
   deltablue-varargs                             220.6406+-6.6187          217.3112+-2.6375          might be 1.0153x faster
   destructuring-arguments                        19.3137+-3.5145           18.2872+-0.4229          might be 1.0561x faster
   destructuring-swap                              5.3704+-0.0561     ?      5.4240+-0.1927        ?
   direct-arguments-getbyval                       1.2928+-0.0921            1.2174+-0.0273          might be 1.0620x faster
   div-boolean-double                              5.4901+-0.0285            5.4852+-0.0388        
   div-boolean                                     8.1672+-0.2507     ?      8.3152+-0.6649        ? might be 1.0181x slower
   double-get-by-val-out-of-bounds                 4.9183+-0.1857            4.8932+-0.1566        
   double-pollution-getbyval                       9.0648+-0.1611            9.0345+-0.0823        
   double-pollution-putbyoffset                    4.6896+-0.0618            4.6486+-0.3254        
   double-to-int32-typed-array-no-inline           2.3485+-0.0542     ?      2.4542+-0.0639        ? might be 1.0450x slower
   double-to-int32-typed-array                     2.1347+-0.0534            2.1020+-0.0202          might be 1.0156x faster
   double-to-uint32-typed-array-no-inline          2.4545+-0.0274            2.4208+-0.0318          might be 1.0139x faster
   double-to-uint32-typed-array                    2.1401+-0.0224     ?      2.1575+-0.0842        ?
   elidable-new-object-dag                        49.1843+-4.1354     ?     51.7391+-1.5152        ? might be 1.0519x slower
   elidable-new-object-roflcopter                 53.4616+-4.3610     ?     56.7514+-7.6762        ? might be 1.0615x slower
   elidable-new-object-then-call                  48.7101+-3.9136           43.9800+-1.8016          might be 1.1076x faster
   elidable-new-object-tree                       56.1705+-7.0712           52.7722+-7.4781          might be 1.0644x faster
   empty-string-plus-int                           6.1521+-0.0884     ?      7.0362+-2.8177        ? might be 1.1437x slower
   emscripten-cube2hash                           44.7760+-0.6143           42.1935+-2.6936          might be 1.0612x faster
   exit-length-on-plain-object                    17.4562+-4.8086           16.4266+-4.4949          might be 1.0627x faster
   external-arguments-getbyval                     1.4322+-0.2876            1.2967+-0.0686          might be 1.1045x faster
   external-arguments-putbyval                     2.5953+-0.3427            2.5742+-0.1653        
   fixed-typed-array-storage-var-index             1.3791+-0.1180            1.3417+-0.0092          might be 1.0278x faster
   fixed-typed-array-storage                       0.9464+-0.0417            0.9403+-0.0241        
   Float32Array-matrix-mult                        6.2306+-2.1290            5.0540+-1.4541          might be 1.2328x faster
   Float32Array-to-Float64Array-set               60.0915+-5.2168           59.0541+-0.4491          might be 1.0176x faster
   Float64Array-alloc-long-lived                  79.8263+-1.0316     ?     83.1487+-7.4699        ? might be 1.0416x slower
   Float64Array-to-Int16Array-set                 76.9496+-5.5973     ?     78.4128+-0.7445        ? might be 1.0190x slower
   fold-double-to-int                             19.5172+-4.4922           18.1194+-0.4046          might be 1.0771x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int
                                                  11.2448+-1.0320     ?     12.8923+-1.2184        ? might be 1.1465x slower
   fold-get-by-id-to-multi-get-by-offset          10.6040+-0.8930           10.3243+-0.9165          might be 1.0271x faster
   fold-multi-get-by-offset-to-get-by-offset
                                                   9.8237+-1.6383            8.1026+-1.4574          might be 1.2124x faster
   fold-multi-get-by-offset-to-poly-get-by-offset
                                                   9.2824+-1.6501            9.0139+-1.6936          might be 1.0298x faster
   fold-multi-put-by-offset-to-poly-put-by-offset
                                                   8.6982+-1.0872     ?      9.1117+-1.3450        ? might be 1.0475x slower
   fold-multi-put-by-offset-to-put-by-offset
                                                   7.0565+-0.2315            5.6555+-1.6786          might be 1.2477x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset
                                                   9.9478+-0.3631     ?     10.1312+-0.3726        ? might be 1.0184x slower
   fold-put-by-id-to-multi-put-by-offset           9.8533+-1.1582            9.7422+-0.5855          might be 1.0114x faster
   fold-put-structure                              6.5596+-0.4639     ?      6.9060+-0.2761        ? might be 1.0528x slower
   for-of-iterate-array-entries                    5.0867+-0.1666            4.9739+-0.1810          might be 1.0227x faster
   for-of-iterate-array-keys                       4.2391+-0.4874            4.1625+-0.1699          might be 1.0184x faster
   for-of-iterate-array-values                     4.5025+-1.7383            4.0420+-0.2186          might be 1.1139x faster
   fround                                         19.6874+-0.5512           19.6602+-0.9341        
   ftl-library-inlining-dataview                  82.2327+-1.1729     !     91.3588+-5.6098        ! definitely 1.1110x slower
   ftl-library-inlining                          122.0204+-0.2226     ?    124.5643+-4.9804        ? might be 1.0208x slower
   function-dot-apply                              2.4053+-0.0209     ?      2.4434+-0.0656        ? might be 1.0158x slower
   function-test                                   3.6534+-0.0336            3.5992+-0.0221          might be 1.0150x faster
   function-with-eval                            108.9006+-7.9284          108.3831+-10.8178       
   gcse-poly-get-less-obvious                     20.0575+-2.5796     ?     20.1475+-2.0557        ?
   gcse-poly-get                                  21.6545+-1.9699     ?     23.1320+-1.4453        ? might be 1.0682x slower
   gcse                                            5.4515+-0.9360            5.2843+-0.8276          might be 1.0316x faster
   get-by-id-bimorphic-check-structure-elimination-simple
                                                   2.9257+-0.1420            2.9203+-0.1181        
   get-by-id-bimorphic-check-structure-elimination
                                                   6.9590+-0.0480     ?      7.0366+-0.1031        ? might be 1.0111x slower
   get-by-id-chain-from-try-block                  8.3402+-1.3704            8.0314+-1.8365          might be 1.0384x faster
   get-by-id-check-structure-elimination           5.8215+-0.7354            5.6588+-0.1336          might be 1.0288x faster
   get-by-id-proto-or-self                        18.4210+-2.1207           18.0952+-0.3754          might be 1.0180x faster
   get-by-id-quadmorphic-check-structure-elimination-simple
                                                   3.1259+-0.0291     ?      3.1664+-0.1394        ? might be 1.0130x slower
   get-by-id-self-or-proto                        18.2165+-0.5793     ?     21.1044+-6.0733        ? might be 1.1585x slower
   get-by-val-out-of-bounds                        4.6213+-0.0537     ?      4.7836+-0.2365        ? might be 1.0351x slower
   get_callee_monomorphic                          3.8990+-0.0856     ?      4.0343+-0.1411        ? might be 1.0347x slower
   get_callee_polymorphic                          3.6251+-0.1576     ?      3.6612+-0.1286        ?
   getter-no-activation                            5.8008+-0.3469            5.6454+-0.0855          might be 1.0275x faster
   getter-richards                               134.3784+-6.8125          130.0661+-7.2308          might be 1.0332x faster
   getter                                          5.9849+-0.2921            5.8763+-0.0387          might be 1.0185x faster
   global-var-const-infer-fire-from-opt            0.9294+-0.0470     ?      1.0386+-0.1692        ? might be 1.1175x slower
   global-var-const-infer                          0.9825+-0.1066            0.9015+-0.1614          might be 1.0899x faster
   HashMap-put-get-iterate-keys                   30.0208+-0.8611     ?     30.0811+-3.2542        ?
   HashMap-put-get-iterate                        29.4758+-1.4352           29.3298+-0.8124        
   HashMap-string-put-get-iterate                 30.6875+-2.0476           30.2630+-2.1260          might be 1.0140x faster
   hoist-make-rope                                12.5938+-1.8461     ?     13.4195+-0.3229        ? might be 1.0656x slower
   hoist-poly-check-structure-effectful-loop
                                                   5.5029+-0.0200     ?      5.5180+-0.0349        ?
   hoist-poly-check-structure                      3.9716+-0.1314     ?      4.0153+-0.1963        ? might be 1.0110x slower
   imul-double-only                                7.9608+-0.3337     ?      8.6046+-2.0358        ? might be 1.0809x slower
   imul-int-only                                  10.4820+-0.3285     ?     10.8361+-0.7690        ? might be 1.0338x slower
   imul-mixed                                      8.5332+-0.1705            8.2173+-0.9343          might be 1.0384x faster
   in-four-cases                                  19.9512+-0.4652           19.8315+-0.3785        
   in-one-case-false                              10.7075+-0.1518           10.6578+-0.0949        
   in-one-case-true                               10.6724+-0.1953           10.6334+-0.0582        
   in-two-cases                                   10.9909+-0.2134     ?     11.0800+-0.4116        ?
   indexed-properties-in-objects                   3.3408+-0.4288            3.1584+-0.0544          might be 1.0578x faster
   infer-closure-const-then-mov-no-inline          4.1874+-0.1841            4.1086+-0.1407          might be 1.0192x faster
   infer-closure-const-then-mov                   18.2084+-0.5326           17.8945+-0.4736          might be 1.0175x faster
   infer-closure-const-then-put-to-scope-no-inline
                                                  13.3309+-0.6924           13.2189+-0.6054        
   infer-closure-const-then-put-to-scope          23.9834+-0.4736     ?     24.0350+-0.4838        ?
   infer-closure-const-then-reenter-no-inline
                                                  56.2847+-4.7050           56.1269+-3.2945        
   infer-closure-const-then-reenter              138.2108+-10.4181    ?    139.2700+-6.6778        ?
   infer-constant-global-property                 31.6315+-1.1774           31.5061+-0.9609        
   infer-constant-property                         2.9818+-0.1056            2.9785+-0.1164        
   infer-one-time-closure-ten-vars                13.2581+-0.8302     ?     13.9448+-4.2653        ? might be 1.0518x slower
   infer-one-time-closure-two-vars                12.5753+-0.6067     ?     13.3019+-1.9465        ? might be 1.0578x slower
   infer-one-time-closure                         12.4528+-0.4170           12.3430+-0.3875        
   infer-one-time-deep-closure                    23.0263+-4.6302           21.3444+-0.5841          might be 1.0788x faster
   inline-arguments-access                         4.7427+-0.2010            4.5918+-0.1666          might be 1.0329x faster
   inline-arguments-aliased-access                 4.6186+-0.2595     ?      4.6206+-0.1660        ?
   inline-arguments-local-escape                   4.6634+-0.1099     ?      4.8917+-0.6974        ? might be 1.0490x slower
   inline-get-scoped-var                           5.5990+-0.0192            5.5920+-0.0302        
   inlined-put-by-id-transition                   12.7468+-2.0369           11.6516+-0.7181          might be 1.0940x faster
   int-or-other-abs-then-get-by-val                5.6766+-0.0161     ?      5.6777+-0.1007        ?
   int-or-other-abs-zero-then-get-by-val          20.0916+-1.6161           20.0161+-3.4022        
   int-or-other-add-then-get-by-val                5.5697+-0.0264     ?      5.5908+-0.0717        ?
   int-or-other-add                                5.6411+-0.0895     ?      5.7104+-0.1988        ? might be 1.0123x slower
   int-or-other-div-then-get-by-val                4.7087+-0.0256            4.6896+-0.0269        
   int-or-other-max-then-get-by-val                4.7458+-0.0435            4.7438+-0.0364        
   int-or-other-min-then-get-by-val                4.7317+-0.0601            4.7131+-0.0791        
   int-or-other-mod-then-get-by-val                4.4659+-0.0777            4.4448+-0.0327        
   int-or-other-mul-then-get-by-val                4.4262+-0.0648            4.4016+-0.0071        
   int-or-other-neg-then-get-by-val                5.1699+-0.0188            5.1487+-0.0181        
   int-or-other-neg-zero-then-get-by-val          23.1425+-4.9950           20.8040+-3.7329          might be 1.1124x faster
   int-or-other-sub-then-get-by-val                5.6215+-0.0352            5.5522+-0.0422          might be 1.0125x faster
   int-or-other-sub                                4.1865+-0.0591            4.1251+-0.0380          might be 1.0149x faster
   int-overflow-local                              5.1078+-0.0657            5.0924+-0.0252        
   Int16Array-alloc-long-lived                    61.8057+-3.8693           61.0450+-6.1071          might be 1.0125x faster
   Int16Array-bubble-sort-with-byteLength         23.1740+-0.9370     ?     25.0162+-4.8986        ? might be 1.0795x slower
   Int16Array-bubble-sort                         24.1298+-2.7438           24.1125+-2.1742        
   Int16Array-load-int-mul                         1.7117+-0.0704            1.6995+-0.0560        
   Int16Array-to-Int32Array-set                   60.3849+-0.1494     !     66.5259+-4.7829        ! definitely 1.1017x slower
   Int32Array-alloc-large                         30.2036+-3.4240     ?     30.9112+-2.6073        ? might be 1.0234x slower
   Int32Array-alloc-long-lived                    65.2349+-4.7380     ?     66.0720+-3.1060        ? might be 1.0128x slower
   Int32Array-alloc                                3.6672+-0.0960     ?      5.9087+-2.2374        ? might be 1.6112x slower
   Int32Array-Int8Array-view-alloc                10.7181+-5.0646     ?     13.1228+-0.9455        ? might be 1.2244x slower
   int52-spill                                     7.0837+-0.2048     ?      7.1232+-0.1400        ?
   Int8Array-alloc-long-lived                     53.8125+-4.1864           52.7590+-4.5165          might be 1.0200x faster
   Int8Array-load-with-byteLength                  4.0134+-0.1780            3.8881+-0.0350          might be 1.0322x faster
   Int8Array-load                                  3.9625+-0.1613     ?      4.0686+-0.2255        ? might be 1.0268x slower
   integer-divide                                 13.4788+-1.7422           12.8658+-0.2347          might be 1.0476x faster
   integer-modulo                                  2.3658+-0.1452            2.3003+-0.0503          might be 1.0285x faster
   large-int-captured                              5.9592+-0.2072            5.8726+-0.0236          might be 1.0147x faster
   large-int-neg                                  17.7653+-0.4935     ?     18.8929+-3.6260        ? might be 1.0635x slower
   large-int                                      17.3626+-2.6058     ?     17.8676+-3.5841        ? might be 1.0291x slower
   logical-not                                     5.1319+-0.1070     ?      5.2973+-0.6646        ? might be 1.0322x slower
   lots-of-fields                                 14.2731+-0.9803           13.8617+-0.6443          might be 1.0297x faster
   make-indexed-storage                            3.2538+-0.2688     ?      3.4366+-0.2006        ? might be 1.0562x slower
   make-rope-cse                                   6.6190+-1.9970            6.4431+-2.0791          might be 1.0273x faster
   marsaglia-larger-ints                          47.5090+-5.2656           46.2736+-1.5693          might be 1.0267x faster
   marsaglia-osr-entry                            27.9537+-5.1668           25.9082+-2.8556          might be 1.0790x faster
   max-boolean                                     3.0325+-0.1551     ?      3.0408+-0.1853        ?
   method-on-number                               19.1545+-0.8813           19.1463+-0.3896        
   min-boolean                                     2.9884+-0.1160            2.9415+-0.0935          might be 1.0160x faster
   minus-boolean-double                            3.3685+-0.0783            3.2651+-0.1103          might be 1.0317x faster
   minus-boolean                                   2.7172+-0.0104     ?      2.7502+-0.0732        ? might be 1.0121x slower
   misc-strict-eq                                 42.0126+-3.8514           40.5999+-1.2340          might be 1.0348x faster
   mod-boolean-double                             11.5218+-1.1092     ?     11.5757+-0.5961        ?
   mod-boolean                                     8.2332+-0.1853     ?      8.8418+-2.1457        ? might be 1.0739x slower
   mul-boolean-double                              3.9012+-0.1704            3.7795+-0.0095          might be 1.0322x faster
   mul-boolean                                     2.9899+-0.1366            2.9445+-0.0214          might be 1.0154x faster
   neg-boolean                                     3.2233+-0.0331     ?      3.2497+-0.0381        ?
   negative-zero-divide                            0.3837+-0.0170            0.3813+-0.0134        
   negative-zero-modulo                            0.4669+-0.1534            0.3840+-0.0123          might be 1.2158x faster
   negative-zero-negate                            0.3695+-0.0585            0.3544+-0.0117          might be 1.0425x faster
   nested-function-parsing                        43.8337+-3.9877     ?     43.9905+-5.4256        ?
   new-array-buffer-dead                           3.3653+-0.0299            3.3430+-0.0452        
   new-array-buffer-push                           7.3150+-0.6778            7.0754+-0.2874          might be 1.0339x faster
   new-array-dead                                 13.4354+-0.8845           13.2428+-0.6179          might be 1.0145x faster
   new-array-push                                  4.4493+-0.0530     ?      4.4738+-0.0712        ?
   number-test                                     3.3275+-0.1070            3.3135+-0.1552        
   object-closure-call                             6.9162+-0.1029     ?      7.0329+-0.2323        ? might be 1.0169x slower
   object-test                                     3.4256+-0.1103     ?      3.4492+-0.1277        ?
   obvious-sink-pathology-taken                  163.9227+-7.7855     ?    166.1490+-4.3187        ? might be 1.0136x slower
   obvious-sink-pathology                        164.3690+-2.9504          164.1571+-9.4036        
   obviously-elidable-new-object                  39.5768+-0.4746     ?     44.5896+-5.5277        ? might be 1.1267x slower
   plus-boolean-arith                              2.9264+-0.1476            2.8796+-0.1734          might be 1.0162x faster
   plus-boolean-double                             3.2928+-0.1670     ?      3.3339+-0.1839        ? might be 1.0125x slower
   plus-boolean                                    2.9635+-0.0679     ?      3.0045+-0.0884        ? might be 1.0138x slower
   poly-chain-access-different-prototypes-simple
                                                   3.4810+-0.1838            3.3849+-0.0177          might be 1.0284x faster
   poly-chain-access-different-prototypes          2.9150+-0.0781     ?      3.0085+-0.0304        ? might be 1.0321x slower
   poly-chain-access-simpler                       3.5714+-0.5142            3.4380+-0.1423          might be 1.0388x faster
   poly-chain-access                               2.9126+-0.1115     ?      3.0053+-0.0938        ? might be 1.0318x slower
   poly-stricteq                                  60.1942+-0.2081     ?     63.7119+-5.9754        ? might be 1.0584x slower
   polymorphic-array-call                          1.4264+-0.1519            1.3713+-0.2092          might be 1.0402x faster
   polymorphic-get-by-id                           3.3870+-0.2178            3.3234+-0.0277          might be 1.0191x faster
   polymorphic-put-by-id                          33.8445+-8.3492           33.6788+-0.8851        
   polymorphic-structure                          19.7099+-3.3952     ?     20.6815+-4.7565        ? might be 1.0493x slower
   polyvariant-monomorphic-get-by-id               9.5603+-0.1780            9.4493+-0.1603          might be 1.0117x faster
   proto-getter-access                            11.4162+-0.3120           11.3123+-0.3887        
   put-by-id-replace-and-transition                9.2173+-0.4414     ?      9.5267+-0.3840        ? might be 1.0336x slower
   put-by-id-slightly-polymorphic                  3.0734+-0.1503     ?      3.0945+-0.1081        ?
   put-by-id                                      15.3000+-0.6690           14.6467+-0.2349          might be 1.0446x faster
   put-by-val-direct                               0.7552+-0.3102            0.6527+-0.0158          might be 1.1570x faster
   put-by-val-large-index-blank-indexing-type
                                                   7.3573+-3.0658     ?      8.7888+-4.4129        ? might be 1.1946x slower
   put-by-val-machine-int                          2.8520+-0.0821            2.7844+-0.1138          might be 1.0243x faster
   rare-osr-exit-on-local                         16.4058+-0.3885     ?     16.5670+-0.2899        ?
   register-pressure-from-osr                     25.3573+-3.3192           23.2443+-0.1175          might be 1.0909x faster
   setter                                          5.8979+-0.3759     ?      6.1323+-1.1367        ? might be 1.0397x slower
   simple-activation-demo                         28.2433+-3.2177           26.4990+-0.4997          might be 1.0658x faster
   simple-getter-access                           14.3135+-0.8034     ?     15.3601+-2.3712        ? might be 1.0731x slower
   simple-poly-call-nested                         8.4711+-0.3251     ?      8.5092+-0.3024        ?
   simple-poly-call                                1.4924+-0.1187     ?      1.5095+-0.2155        ? might be 1.0115x slower
   sin-boolean                                    20.3177+-2.7400     ?     22.1544+-0.5473        ? might be 1.0904x slower
   sinkable-new-object-dag                        77.7684+-3.2921     ?     80.7810+-2.8404        ? might be 1.0387x slower
   sinkable-new-object-taken                      57.4024+-3.1972     ?     58.3740+-4.7410        ? might be 1.0169x slower
   sinkable-new-object                            43.4047+-4.4606           42.8701+-2.3468          might be 1.0125x faster
   slow-array-profile-convergence                  3.0512+-0.1816     ?      3.0845+-0.0573        ? might be 1.0109x slower
   slow-convergence                                3.5784+-0.1208     ?      3.6047+-0.2576        ?
   sparse-conditional                              1.3474+-0.1510            1.3110+-0.0146          might be 1.0277x faster
   splice-to-remove                               21.1516+-4.5606           18.0931+-0.2807          might be 1.1690x faster
   string-char-code-at                            17.9282+-4.3536           17.2486+-1.5261          might be 1.0394x faster
   string-concat-object                            2.8364+-0.9674            2.7655+-0.5849          might be 1.0256x faster
   string-concat-pair-object                       2.7239+-0.5591     ?      2.7786+-0.9421        ? might be 1.0201x slower
   string-concat-pair-simple                      14.9527+-2.8256     ?     15.5881+-4.4191        ? might be 1.0425x slower
   string-concat-simple                           15.6957+-3.1500           15.1970+-3.2209          might be 1.0328x faster
   string-cons-repeat                             10.3460+-3.6113            8.9625+-0.9730          might be 1.1544x faster
   string-cons-tower                               8.8694+-1.6195     ?      9.4406+-1.8179        ? might be 1.0644x slower
   string-equality                                18.2830+-0.2797     ?     18.4494+-0.3666        ?
   string-get-by-val-big-char                      8.5414+-0.3911            8.3685+-0.0901          might be 1.0207x faster
   string-get-by-val-out-of-bounds-insane          4.0970+-0.0686     !      4.3585+-0.1524        ! definitely 1.0638x slower
   string-get-by-val-out-of-bounds                 5.6566+-0.0698            5.4665+-0.2672          might be 1.0348x faster
   string-get-by-val                               3.8069+-0.1616     ?      3.9148+-0.2430        ? might be 1.0283x slower
   string-hash                                     2.2851+-0.0521            2.2841+-0.0512        
   string-long-ident-equality                     15.9465+-1.6368           15.1943+-0.4562          might be 1.0495x faster
   string-out-of-bounds                           15.8334+-0.5343     ?     16.7520+-3.2657        ? might be 1.0580x slower
   string-repeat-arith                            37.4462+-6.8180     ?     40.4728+-4.9967        ? might be 1.0808x slower
   string-sub                                     76.6371+-12.7550    ?     80.0655+-3.6973        ? might be 1.0447x slower
   string-test                                     3.2250+-0.1923     ?      3.2500+-0.0607        ?
   string-var-equality                            32.2584+-0.5086           31.9219+-0.2123          might be 1.0105x faster
   structure-hoist-over-transitions                2.8644+-0.0642            2.8514+-0.1325        
   substring-concat-weird                         47.0954+-4.1738           46.1545+-3.8281          might be 1.0204x faster
   substring-concat                               46.0593+-1.7405     ?     47.5220+-4.8934        ? might be 1.0318x slower
   substring                                      54.2322+-5.3613           53.3533+-5.7962          might be 1.0165x faster
   switch-char-constant                            2.9285+-0.0333     ?      2.9991+-0.2037        ? might be 1.0241x slower
   switch-char                                     6.6383+-0.0172     ?      7.1362+-1.1726        ? might be 1.0750x slower
   switch-constant                                 9.0099+-0.4350            8.8519+-0.0471          might be 1.0179x faster
   switch-string-basic-big-var                    17.3363+-3.7032     ?     17.4444+-4.3102        ?
   switch-string-basic-big                        15.1542+-1.0470           14.6340+-0.7916          might be 1.0356x faster
   switch-string-basic-var                        15.6473+-0.1915     ?     17.0310+-4.3118        ? might be 1.0884x slower
   switch-string-basic                            14.9706+-3.5054           13.6093+-0.2441          might be 1.1000x faster
   switch-string-big-length-tower-var             22.0668+-4.0533     ?     23.5825+-4.1871        ? might be 1.0687x slower
   switch-string-length-tower-var                 17.7955+-3.6107           16.9992+-0.2881          might be 1.0468x faster
   switch-string-length-tower                     13.4550+-0.2795     ?     14.2233+-3.0091        ? might be 1.0571x slower
   switch-string-short                            14.6580+-3.9526           13.1605+-0.1527          might be 1.1138x faster
   switch                                         13.3792+-0.7334     ?     13.5033+-0.5131        ?
   tear-off-arguments-simple                       3.5458+-0.1247     ?      3.5955+-0.0545        ? might be 1.0140x slower
   tear-off-arguments                              4.9512+-0.0778            4.9085+-0.0244        
   temporal-structure                             14.3898+-0.3566     ?     14.5500+-0.2584        ? might be 1.0111x slower
   to-int32-boolean                               16.4320+-0.9564     ?     16.5020+-1.0607        ?
   try-catch-get-by-val-cloned-arguments          17.1218+-7.0712           15.1038+-0.3700          might be 1.1336x faster
   try-catch-get-by-val-direct-arguments           7.7912+-4.2721     ?      9.5403+-4.9859        ? might be 1.2245x slower
   try-catch-get-by-val-scoped-arguments           7.7432+-0.2950     ?     10.1133+-4.5481        ? might be 1.3061x slower
   undefined-property-access                     412.0018+-3.3692          411.4041+-10.6943       
   undefined-test                                  3.3794+-0.1142            3.2518+-0.0249          might be 1.0392x faster
   unprofiled-licm                                23.8595+-1.6782           23.2005+-0.4740          might be 1.0284x faster
   varargs-call                                   15.8480+-0.2993     ?     16.6425+-2.0972        ? might be 1.0501x slower
   varargs-construct-inline                       24.3516+-0.4137     ?     24.4457+-2.2781        ?
   varargs-construct                              35.4243+-3.9162           34.4066+-0.4665          might be 1.0296x faster
   varargs-inline                                  9.3729+-0.1935            9.3037+-0.1563        
   varargs-strict-mode                            10.5999+-1.2984           10.1732+-0.1570          might be 1.0419x faster
   varargs                                        10.4940+-0.6783     ?     11.9133+-4.1850        ? might be 1.1353x slower
   weird-inlining-const-prop                       2.4048+-0.0822            2.3920+-0.1220        

   <geometric>                                     9.4536+-0.0906     ?      9.4818+-0.0443        ? might be 1.0030x slower

                                                      Baseline                    Mine                                       

                                                      Baseline                    Mine                                       
Geomean of preferred means:
   <scaled-result>                                37.0221+-0.1656           36.6503+-0.2423          might be 1.0101x faster
Comment 9 Filip Pizlo 2015-03-31 12:30:36 PDT
Results look very promising so far
Comment 10 Yusuke Suzuki 2015-03-31 12:47:25 PDT
OK. I've checked out Octane r31 (Octane2), set up .run-jsc-benchmarks OctanePath and run-jsc-benchmarks --octane.

Here is the result.

Benchmark report for Octane on yusuke (MacBookPro8,2).

VMs tested:
"Baseline" at /Users/yusuke/dev/WebKit/WebKitBuild/Release/jsc
"Mine" at /Users/yusuke/dev/WebKit/WebKitBuild/identifier/Release/jsc

Collected 4 samples per benchmark/VM, with 4 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.

                            Baseline                    Mine                                       

encrypt                 0.25831+-0.00168    ?     0.25918+-0.00367       ?
decrypt                 4.43019+-0.04410          4.41634+-0.04528       
deltablue      x2       0.22831+-0.00633          0.22479+-0.00636         might be 1.0157x faster
earley                  0.66089+-0.00957    ?     0.66644+-0.01086       ?
boyer                   7.34057+-0.08287    ?     7.34485+-0.04041       ?
navier-stokes  x2       5.40476+-0.05512    ?     5.42682+-0.08338       ?
raytrace       x2       1.43530+-0.08010          1.41643+-0.08197         might be 1.0133x faster
richards       x2       0.12240+-0.00251    ?     0.12294+-0.00341       ?
splay          x2       0.41684+-0.00369          0.41299+-0.00451       
regexp         x2      35.95270+-0.46315         35.86742+-0.55205       
pdfjs          x2      49.29292+-1.37956         48.88469+-0.78112       
mandreel       x2      59.80098+-0.54078         59.53940+-1.39673       
gbemu          x2      43.88240+-0.30637         43.43907+-0.82390         might be 1.0102x faster
closure                 0.58956+-0.00742    ?     0.59907+-0.00715       ? might be 1.0161x slower
jquery                  7.50632+-0.06683    ?     7.57204+-0.06387       ?
box2d          x2      13.63611+-0.41038         13.48633+-0.17487         might be 1.0111x faster
zlib           x2     429.82747+-30.28566       427.36043+-5.33524       
typescript     x2     881.30328+-20.24660   ?   885.94214+-17.78960      ?

<geometric>             7.39157+-0.03937          7.36756+-0.02529         might be 1.0033x faster
Comment 11 Filip Pizlo 2015-03-31 12:49:19 PDT
Comment on attachment 249657 [details]
Patch

r=me
Comment 12 Yusuke Suzuki 2015-03-31 13:37:47 PDT
Comment on attachment 249657 [details]
Patch

Thank you! I've set cq+
Comment 13 WebKit Commit Bot 2015-03-31 14:26:03 PDT
Comment on attachment 249657 [details]
Patch

Clearing flags on attachment: 249657

Committed r182205: <http://trac.webkit.org/changeset/182205>
Comment 14 WebKit Commit Bot 2015-03-31 14:26:08 PDT
All reviewed patches have been landed.  Closing bug.
Comment 15 Alexey Proskuryakov 2015-03-31 16:05:09 PDT
This patch was made with an old checkout, and broke bindings generation tests: https://build.webkit.org/builders/Apple%20Yosemite%20Release%20WK2%20%28Tests%29/builds/4075/steps/bindings-generation-tests/logs/stdio

I'll update the results.
Comment 16 Yusuke Suzuki 2015-03-31 21:43:07 PDT
(In reply to comment #15)
> This patch was made with an old checkout, and broke bindings generation
> tests:
> https://build.webkit.org/builders/
> Apple%20Yosemite%20Release%20WK2%20%28Tests%29/builds/4075/steps/bindings-
> generation-tests/logs/stdio
> 
> I'll update the results.

Oops! Thank you for your fix. http://trac.webkit.org/changeset/182205
It seems that when rebasing the patch I failed to merge http://trac.webkit.org/changeset/181156.
Comment 17 Alexey Proskuryakov 2015-03-31 23:18:11 PDT
Comment on attachment 249657 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=249657&action=review

> Source/WTF/wtf/text/StringImpl.h:744
> +    WTF_EXPORT_STRING_API StringImpl& extractFoldedStringInSymbol()

This broke some builds. A function cannot be both exported and inline.

I'll fix it now.
Comment 18 Yusuke Suzuki 2015-03-31 23:54:25 PDT
(In reply to comment #17)
> Comment on attachment 249657 [details]
> Patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=249657&action=review
> 
> > Source/WTF/wtf/text/StringImpl.h:744
> > +    WTF_EXPORT_STRING_API StringImpl& extractFoldedStringInSymbol()
> 
> This broke some builds. A function cannot be both exported and inline.
> 
> I'll fix it now.

Thanks! Sorry for troubling you.