RESOLVED FIXED Bug 139229
DFG Tries using an inner object's getter/setter when one hasn't been defined
https://bugs.webkit.org/show_bug.cgi?id=139229
Summary DFG Tries using an inner object's getter/setter when one hasn't been defined
Michael Saboff
Reported 2014-12-03 11:16:42 PST
The test case below crashes in the DFG trying to call the inner getter (which doesn't exist). <script> function InnerObject() { this._enabled = false; } InnerObject.prototype = { set enabled(x) { this._enabled = x; } } function OuterObject(inner) { this._innerObject = inner; } OuterObject.prototype = { get enabled() { return this._innerObject.enabled; }, set enabled(x) { this._innerObject = x; } } var inner = new InnerObject; var outer = new OuterObject(inner); for (var i = 0; i < 500; ++i) { console.log(outer.enabled); } </script> <rdar://problem/18890847>
Attachments
Patch (8.91 KB, patch)
2014-12-04 23:37 PST, Michael Saboff
msaboff: review-
Patch using undefined function class for missing getters and setters (44.73 KB, patch)
2014-12-08 15:17 PST, Michael Saboff
ggaren: review-
buildbot: commit-queue-
Archive of layout-test-results from ews100 for mac-mountainlion (1.24 MB, application/zip)
2014-12-08 16:25 PST, Build Bot
no flags
Patch with suggested changes and fix for test failures (45.42 KB, patch)
2014-12-09 03:34 PST, Michael Saboff
fpizlo: review+
Michael Saboff
Comment 1 2014-12-03 11:41:42 PST
There isn't a crash when there isn't nesting of objects.
Michael Saboff
Comment 2 2014-12-04 23:37:43 PST
Created attachment 242620 [details] Patch Performance test results: Generating benchmark report at /Volumes/Data/src/webkit/Baseline_FixedGetterSetter_SunSpiderLongSpiderV8SpiderOctaneKrakenJSRegressAsmBenchCompressionBench_msaboff-mini-2_20141204_2324_report.txt And raw data at /Volumes/Data/src/webkit/Baseline_FixedGetterSetter_SunSpiderLongSpiderV8SpiderOctaneKrakenJSRegressAsmBenchCompressionBench_msaboff-mini-2_20141204_2324.json Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on msaboff-mini-2 (Macmini6,2). VMs tested: "Baseline" at /Volumes/Data/src/webkit.work/WebKitBuild/Release/jsc (r176831) "FixedGetterSetter" at /Volumes/Data/src/webkit/WebKitBuild/Release/jsc (r176831) 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 FixedGetterSetter SunSpider: 3d-cube 5.1812+-0.5312 5.1505+-0.3448 3d-morph 6.2981+-0.0890 ? 6.4315+-0.4586 ? might be 1.0212x slower 3d-raytrace 6.5369+-0.1375 ? 6.5934+-0.3854 ? access-binary-trees 2.1967+-0.2882 2.1403+-0.0498 might be 1.0264x faster access-fannkuch 6.0130+-0.1884 5.9993+-0.1461 access-nbody 3.1089+-0.3881 3.0245+-0.0746 might be 1.0279x faster access-nsieve 3.8430+-0.0818 3.8339+-0.1358 bitops-3bit-bits-in-byte 1.6650+-0.0217 1.6422+-0.0588 might be 1.0139x faster bitops-bits-in-byte 3.5934+-0.1201 3.5908+-0.0906 bitops-bitwise-and 2.1530+-0.0252 ? 2.2003+-0.1336 ? might be 1.0219x slower bitops-nsieve-bits 3.9822+-0.2125 3.7758+-0.0815 might be 1.0547x faster controlflow-recursive 2.3048+-0.0505 ? 2.3712+-0.1328 ? might be 1.0288x slower crypto-aes 4.5496+-0.3884 4.4566+-0.6833 might be 1.0209x faster crypto-md5 2.5148+-0.0871 ? 2.5256+-0.0559 ? crypto-sha1 2.7612+-0.3240 2.7377+-0.3274 date-format-tofte 9.5891+-0.3786 ? 9.6378+-0.2001 ? date-format-xparb 5.5779+-0.1621 5.5062+-0.1332 might be 1.0130x faster math-cordic 3.1979+-0.0712 ? 3.2524+-0.0337 ? might be 1.0170x slower math-partial-sums 5.4152+-0.0934 5.2665+-0.2216 might be 1.0282x faster math-spectral-norm 2.0325+-0.1247 ? 2.0974+-0.3247 ? might be 1.0319x slower regexp-dna 8.9889+-1.8544 7.6594+-0.3301 might be 1.1736x faster string-base64 4.7609+-0.5413 ? 5.2419+-1.4871 ? might be 1.1010x slower string-fasta 6.5160+-0.1074 ? 6.6525+-0.1972 ? might be 1.0209x slower string-tagcloud 10.2206+-0.3182 ? 10.5682+-1.2833 ? might be 1.0340x slower string-unpack-code 21.9182+-0.2636 ? 21.9720+-1.2732 ? string-validate-input 4.9603+-0.3898 4.8683+-0.1756 might be 1.0189x faster <arithmetic> * 5.3800+-0.1023 5.3537+-0.0711 might be 1.0049x faster <geometric> 4.4499+-0.0852 4.4332+-0.0683 might be 1.0038x faster <harmonic> 3.8134+-0.0773 3.8066+-0.0558 might be 1.0018x faster Baseline FixedGetterSetter LongSpider: 3d-cube 909.4142+-9.7722 ? 918.5630+-20.2487 ? might be 1.0101x slower 3d-morph 1599.6682+-10.1483 1590.5363+-14.3551 3d-raytrace 773.2231+-12.1185 ? 775.1793+-3.7693 ? access-binary-trees 1060.2239+-10.7191 ? 1106.2578+-111.1252 ? might be 1.0434x slower access-fannkuch 346.7938+-17.7958 341.0005+-17.8243 might be 1.0170x faster access-nbody 648.3939+-7.1446 647.1680+-10.6778 access-nsieve 1018.7304+-15.6258 ? 1020.8514+-12.0639 ? bitops-3bit-bits-in-byte 48.4818+-1.8718 ? 48.9299+-0.8470 ? bitops-bits-in-byte 103.8304+-4.1068 ? 105.5810+-8.8113 ? might be 1.0169x slower bitops-nsieve-bits 787.2380+-33.4096 784.0254+-13.5527 controlflow-recursive 526.6383+-1.1765 521.3782+-14.2571 might be 1.0101x faster crypto-aes 732.9152+-11.2249 728.5687+-16.9897 crypto-md5 643.6379+-12.5156 ? 649.3508+-6.9320 ? crypto-sha1 709.0975+-40.3500 ? 716.6497+-19.7855 ? might be 1.0107x slower date-format-tofte 813.1732+-9.3837 ? 833.3309+-40.1960 ? might be 1.0248x slower date-format-xparb 809.9940+-37.9396 776.5413+-10.7712 might be 1.0431x faster math-cordic 631.5779+-17.3402 614.9540+-4.3406 might be 1.0270x faster math-partial-sums 569.6413+-4.5774 ? 574.5883+-6.1548 ? math-spectral-norm 594.7190+-10.4799 593.9833+-10.4808 string-base64 374.8027+-14.0904 ? 379.9797+-12.6341 ? might be 1.0138x slower string-fasta 433.3176+-7.5692 ? 440.9139+-8.4912 ? might be 1.0175x slower string-tagcloud 228.8425+-10.4012 226.3263+-2.4228 might be 1.0111x faster <arithmetic> 652.9252+-4.2382 ? 654.3026+-6.8272 ? might be 1.0021x slower <geometric> * 533.5778+-3.3838 ? 534.5470+-4.8117 ? might be 1.0018x slower <harmonic> 343.8780+-2.7247 ? 345.5797+-4.5580 ? might be 1.0049x slower Baseline FixedGetterSetter V8Spider: crypto 59.6817+-4.5271 ? 60.3123+-2.9092 ? might be 1.0106x slower deltablue 119.2990+-5.0817 ? 120.0697+-4.5012 ? earley-boyer 47.9811+-2.3436 ? 49.9763+-4.4607 ? might be 1.0416x slower raytrace 42.8233+-5.5990 42.3491+-2.5882 might be 1.0112x faster regexp 74.1033+-3.4558 ? 74.1898+-2.2605 ? richards 97.8633+-9.4411 92.2609+-4.7707 might be 1.0607x faster splay 35.8972+-1.7727 35.0169+-1.9652 might be 1.0251x faster <arithmetic> 68.2356+-3.4625 67.7393+-0.3636 might be 1.0073x faster <geometric> * 62.6671+-3.2272 62.3489+-1.1289 might be 1.0051x faster <harmonic> 57.8389+-3.0979 57.6096+-1.5859 might be 1.0040x faster Baseline FixedGetterSetter Octane: encrypt 0.23858+-0.00256 0.23665+-0.00837 decrypt 4.17343+-0.07838 4.15758+-0.04403 deltablue x2 0.20992+-0.00285 ? 0.21143+-0.00477 ? earley 0.74121+-0.01167 ? 0.74861+-0.02824 ? boyer 5.59440+-0.03367 ? 5.60079+-0.03983 ? navier-stokes x2 5.44864+-0.06252 ? 5.47425+-0.12863 ? raytrace x2 1.22466+-0.00406 ? 1.22540+-0.02556 ? richards x2 0.12546+-0.00252 ? 0.12637+-0.00386 ? splay x2 0.41033+-0.00335 0.40609+-0.00590 might be 1.0105x faster regexp x2 35.64118+-0.57842 ? 36.08056+-0.97311 ? might be 1.0123x slower pdfjs x2 60.20433+-18.56792 54.95740+-1.35844 might be 1.0955x faster mandreel x2 57.78782+-1.27663 57.30243+-0.71381 gbemu x2 47.73556+-1.00344 ? 47.90618+-1.31569 ? closure 0.58904+-0.00855 0.58336+-0.00216 jquery 7.67363+-0.12483 7.66635+-0.26221 box2d x2 14.40198+-0.06597 14.36192+-0.17106 zlib x2 502.76868+-4.07070 501.83205+-2.83479 typescript x2 897.31500+-8.35117 ? 897.97119+-7.03010 ? <arithmetic> 108.85191+-1.57826 108.49013+-0.67678 might be 1.0033x faster <geometric> * 7.43945+-0.13346 7.40345+-0.04621 might be 1.0049x faster <harmonic> 0.74177+-0.00695 ? 0.74340+-0.00615 ? might be 1.0022x slower Baseline FixedGetterSetter Kraken: ai-astar 279.751+-6.296 277.375+-7.188 audio-beat-detection 119.034+-4.142 ? 119.935+-5.016 ? audio-dft 203.215+-6.845 ? 205.205+-3.259 ? audio-fft 79.496+-1.145 ? 80.073+-2.352 ? audio-oscillator 255.330+-7.186 254.629+-4.790 imaging-darkroom 191.633+-7.580 185.473+-1.727 might be 1.0332x faster imaging-desaturate 65.286+-0.789 ? 66.195+-3.149 ? might be 1.0139x slower imaging-gaussian-blur 120.418+-10.352 117.126+-2.745 might be 1.0281x faster json-parse-financial 49.005+-3.543 47.697+-2.410 might be 1.0274x faster json-stringify-tinderbox 62.558+-2.580 62.066+-4.993 stanford-crypto-aes 61.061+-1.260 ? 61.105+-1.359 ? stanford-crypto-ccm 57.038+-12.949 ? 61.842+-11.657 ? might be 1.0842x slower stanford-crypto-pbkdf2 181.352+-3.830 ? 182.003+-4.739 ? stanford-crypto-sha256-iterative 57.096+-2.240 57.000+-3.171 <arithmetic> * 127.305+-0.472 126.980+-0.823 might be 1.0026x faster <geometric> 106.010+-1.624 ? 106.145+-2.046 ? might be 1.0013x slower <harmonic> 89.818+-2.591 ? 90.235+-2.922 ? might be 1.0046x slower Baseline FixedGetterSetter JSRegress: abs-boolean 2.8937+-0.0854 2.8565+-0.1081 might be 1.0130x faster adapt-to-double-divide 17.2599+-0.4412 ? 18.1332+-1.0994 ? might be 1.0506x slower aliased-arguments-getbyval 1.2381+-0.0204 ? 1.2606+-0.1760 ? might be 1.0182x slower allocate-big-object 2.6882+-0.4862 ? 2.7046+-0.4916 ? arity-mismatch-inlining 0.8815+-0.0717 ? 1.0210+-0.1576 ? might be 1.1583x slower array-access-polymorphic-structure 6.7226+-0.2637 ? 6.9746+-0.8922 ? might be 1.0375x slower array-nonarray-polymorhpic-access 37.4880+-2.9396 36.5718+-1.0808 might be 1.0251x faster array-prototype-every 81.2198+-6.5871 ? 82.2753+-1.6910 ? might be 1.0130x slower array-prototype-forEach 78.4529+-2.1014 ? 79.7128+-3.4672 ? might be 1.0161x slower array-prototype-map 98.1790+-1.2101 ? 98.6912+-4.2506 ? array-prototype-some 82.0997+-5.3794 80.5990+-5.8183 might be 1.0186x faster array-splice-contiguous 44.2072+-2.8319 43.0702+-0.8641 might be 1.0264x faster array-with-double-add 4.2394+-0.0725 4.2092+-0.0918 array-with-double-increment 3.3388+-0.0239 3.3378+-0.0661 array-with-double-mul-add 5.0803+-0.0544 ? 5.3243+-0.2232 ? might be 1.0480x slower array-with-double-sum 3.3576+-0.0352 ? 3.3657+-0.0734 ? array-with-int32-add-sub 7.0633+-0.3713 7.0025+-0.3020 array-with-int32-or-double-sum 3.5143+-0.2703 3.4540+-0.0352 might be 1.0175x faster ArrayBuffer-DataView-alloc-large-long-lived 35.0818+-2.9228 ? 35.6885+-1.0417 ? might be 1.0173x slower ArrayBuffer-DataView-alloc-long-lived 13.7243+-0.1322 ? 15.2186+-2.0128 ? might be 1.1089x slower ArrayBuffer-Int32Array-byteOffset 3.5710+-0.0863 ? 3.5826+-0.0911 ? ArrayBuffer-Int8Array-alloc-large-long-lived 37.0104+-6.2550 34.7171+-2.1175 might be 1.0661x faster ArrayBuffer-Int8Array-alloc-long-lived-buffer 24.4967+-3.3199 ? 25.0063+-2.8360 ? might be 1.0208x slower ArrayBuffer-Int8Array-alloc-long-lived 14.9375+-2.5618 14.2695+-2.9022 might be 1.0468x faster ArrayBuffer-Int8Array-alloc 11.7164+-1.7519 ? 11.9228+-2.5573 ? might be 1.0176x slower asmjs_bool_bug 7.7056+-0.4557 7.6011+-0.0588 might be 1.0137x faster assign-custom-setter-polymorphic 3.2011+-0.0677 ? 3.2227+-0.0228 ? assign-custom-setter 4.5717+-0.0936 4.5693+-0.1540 basic-set 10.6462+-0.2700 ? 11.0772+-0.8523 ? might be 1.0405x slower big-int-mul 4.2216+-0.1411 4.1620+-0.0855 might be 1.0143x faster boolean-test 3.1196+-0.0531 3.1152+-0.0861 branch-fold 3.8228+-0.0872 3.7693+-0.0191 might be 1.0142x faster by-val-generic 8.8019+-0.5446 ? 9.3890+-0.7767 ? might be 1.0667x slower call-spread-apply 14.5645+-0.4351 ? 15.5768+-1.8533 ? might be 1.0695x slower call-spread-call 6.4963+-0.2943 ? 7.1999+-2.4346 ? might be 1.1083x slower captured-assignments 0.4816+-0.0189 ? 0.5087+-0.1250 ? might be 1.0563x slower cast-int-to-double 5.4785+-0.1109 5.3972+-0.1005 might be 1.0151x faster cell-argument 9.0778+-1.4891 8.7399+-0.2351 might be 1.0387x faster cfg-simplify 3.1187+-0.1304 3.1144+-0.0918 chain-getter-access 9.8137+-0.1471 ? 10.0356+-0.1782 ? might be 1.0226x slower cmpeq-obj-to-obj-other 12.0103+-2.4035 11.3003+-1.5247 might be 1.0628x faster constant-test 5.0384+-0.0168 4.9863+-0.0404 might be 1.0104x faster DataView-custom-properties 41.6565+-3.6529 40.7935+-0.8148 might be 1.0212x faster delay-tear-off-arguments-strictmode 2.6273+-0.0385 ? 2.6608+-0.1250 ? might be 1.0128x slower destructuring-arguments 5.0533+-0.1447 ? 5.5973+-1.7787 ? might be 1.1077x slower destructuring-swap 5.3728+-0.7052 5.1821+-0.2679 might be 1.0368x faster direct-arguments-getbyval 0.7230+-0.0341 ? 0.7386+-0.0611 ? might be 1.0216x slower div-boolean-double 5.3677+-0.0281 5.3665+-0.0135 div-boolean 8.0267+-0.0103 8.0247+-0.1076 double-get-by-val-out-of-bounds 4.3995+-0.0320 ? 4.5430+-0.2352 ? might be 1.0326x slower double-pollution-getbyval 9.3643+-0.3881 9.1251+-0.0734 might be 1.0262x faster double-pollution-putbyoffset 4.2138+-0.0267 4.2095+-0.0691 double-to-int32-typed-array-no-inline 2.3752+-0.0292 ? 2.5470+-0.4742 ? might be 1.0723x slower double-to-int32-typed-array 1.9874+-0.0325 ? 2.0262+-0.0656 ? might be 1.0196x slower double-to-uint32-typed-array-no-inline 2.5073+-0.4058 ? 2.5135+-0.3537 ? double-to-uint32-typed-array 2.1584+-0.2185 2.1527+-0.2564 elidable-new-object-dag 44.2368+-4.9868 ? 44.5621+-2.0710 ? elidable-new-object-roflcopter 176.4907+-5.9042 ? 176.9672+-5.1727 ? elidable-new-object-then-call 40.0120+-0.5283 39.0586+-2.1165 might be 1.0244x faster elidable-new-object-tree 46.1728+-1.3388 45.5885+-2.5198 might be 1.0128x faster empty-string-plus-int 5.5444+-0.4392 5.3560+-0.1714 might be 1.0352x faster emscripten-cube2hash 38.8311+-2.3011 ? 39.8492+-1.3239 ? might be 1.0262x slower external-arguments-getbyval 1.3785+-0.1141 ? 1.4073+-0.0776 ? might be 1.0209x slower external-arguments-putbyval 2.2087+-0.1596 2.1424+-0.0585 might be 1.0309x faster fixed-typed-array-storage-var-index 1.3281+-0.0462 1.3064+-0.0520 might be 1.0166x faster fixed-typed-array-storage 1.0040+-0.0419 0.9442+-0.0796 might be 1.0633x faster Float32Array-matrix-mult 4.6130+-0.2188 ? 4.6140+-0.5408 ? Float32Array-to-Float64Array-set 58.3112+-5.7631 ? 59.7585+-4.5416 ? might be 1.0248x slower Float64Array-alloc-long-lived 69.6515+-2.2330 ? 71.7714+-2.1959 ? might be 1.0304x slower Float64Array-to-Int16Array-set 73.7551+-0.6639 ? 74.7307+-2.7856 ? might be 1.0132x slower fold-double-to-int 13.9335+-0.6368 ? 14.6158+-2.5311 ? might be 1.0490x slower fold-get-by-id-to-multi-get-by-offset-rare-int 19.3507+-0.9890 18.5907+-0.5061 might be 1.0409x faster fold-get-by-id-to-multi-get-by-offset 18.5320+-1.9839 18.2572+-0.4316 might be 1.0151x faster fold-multi-get-by-offset-to-get-by-offset 13.7043+-1.6996 13.3250+-0.5626 might be 1.0285x faster fold-multi-get-by-offset-to-poly-get-by-offset 14.5027+-3.0556 ? 14.7773+-2.4117 ? might be 1.0189x slower fold-multi-put-by-offset-to-poly-put-by-offset 14.3373+-3.2618 13.8008+-2.0961 might be 1.0389x faster fold-multi-put-by-offset-to-put-by-offset 14.2055+-2.9209 12.9915+-2.4800 might be 1.0934x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 15.8234+-1.8944 ? 16.4402+-0.8428 ? might be 1.0390x slower fold-put-by-id-to-multi-put-by-offset 18.8305+-0.6471 ? 19.3228+-0.8414 ? might be 1.0261x slower fold-put-structure 13.8383+-3.2866 13.7808+-2.9557 for-of-iterate-array-entries 6.1178+-0.6423 6.0703+-0.1235 for-of-iterate-array-keys 3.0122+-0.1799 ? 3.0884+-0.3179 ? might be 1.0253x slower for-of-iterate-array-values 2.6752+-0.1691 ? 2.7450+-0.2841 ? might be 1.0261x slower fround 20.2822+-0.8975 20.2472+-0.8168 ftl-library-inlining-dataview 87.1995+-31.2877 77.0610+-9.9516 might be 1.1316x faster ftl-library-inlining 116.5566+-1.6392 113.7020+-4.4392 might be 1.0251x faster function-dot-apply 1.5562+-0.0400 ? 1.6032+-0.1097 ? might be 1.0302x slower function-test 3.4328+-0.2105 ? 3.4740+-0.1040 ? might be 1.0120x slower function-with-eval 119.5452+-4.6829 118.8300+-4.0601 gcse-poly-get-less-obvious 19.1980+-1.7273 19.0203+-1.1068 gcse-poly-get 22.6228+-2.7445 ^ 18.5276+-0.8839 ^ definitely 1.2210x faster gcse 4.4553+-0.0900 ? 4.4555+-0.0851 ? get-by-id-bimorphic-check-structure-elimination-simple 2.8641+-0.0508 2.8595+-0.0463 get-by-id-bimorphic-check-structure-elimination 6.2897+-0.0535 6.2573+-0.1859 get-by-id-chain-from-try-block 10.4196+-2.4896 10.0552+-2.7017 might be 1.0362x faster get-by-id-check-structure-elimination 5.2535+-0.1386 ? 5.4023+-0.1779 ? might be 1.0283x slower get-by-id-proto-or-self 19.3871+-2.7157 18.8663+-2.8256 might be 1.0276x faster get-by-id-quadmorphic-check-structure-elimination-simple 3.0306+-0.0459 3.0160+-0.0472 get-by-id-self-or-proto 18.1000+-0.8372 ? 19.4643+-2.4406 ? might be 1.0754x slower get-by-val-out-of-bounds 4.3050+-0.0862 ? 4.3127+-0.1478 ? get_callee_monomorphic 4.4832+-1.2861 3.9259+-0.1102 might be 1.1419x faster get_callee_polymorphic 3.9709+-0.4737 3.6625+-0.2337 might be 1.0842x faster getter-no-activation 4.6843+-0.7485 4.5744+-0.3532 might be 1.0240x faster getter-richards 143.5389+-19.9027 ? 154.3790+-13.5284 ? might be 1.0755x slower getter 5.1902+-0.0290 ? 5.3719+-0.3513 ? might be 1.0350x slower global-var-const-infer-fire-from-opt 0.8430+-0.0354 ? 0.8945+-0.1030 ? might be 1.0612x slower global-var-const-infer 0.8704+-0.1468 ? 0.8917+-0.1046 ? might be 1.0245x slower HashMap-put-get-iterate-keys 27.8970+-0.7055 27.7290+-0.2257 HashMap-put-get-iterate 27.7890+-0.5654 ? 28.2391+-3.1308 ? might be 1.0162x slower HashMap-string-put-get-iterate 28.9729+-1.2800 28.9610+-2.7997 hoist-make-rope 11.6932+-0.6449 11.4583+-1.4012 might be 1.0205x faster hoist-poly-check-structure-effectful-loop 5.3780+-0.3989 ? 5.3822+-0.5588 ? hoist-poly-check-structure 3.9290+-0.0848 ? 4.0195+-0.1411 ? might be 1.0230x slower imul-double-only 8.3239+-0.7365 8.2144+-0.9376 might be 1.0133x faster imul-int-only 9.9763+-0.2556 9.9191+-0.2641 imul-mixed 8.3472+-0.1799 8.0938+-0.5473 might be 1.0313x faster in-four-cases 20.1345+-0.9921 19.2179+-0.1791 might be 1.0477x faster in-one-case-false 10.2809+-0.2536 10.2647+-0.1068 in-one-case-true 10.3488+-0.2827 10.2790+-0.1425 in-two-cases 10.6837+-0.4653 ? 10.9374+-1.1071 ? might be 1.0237x slower indexed-properties-in-objects 3.0000+-0.0276 ? 3.0933+-0.1627 ? might be 1.0311x slower infer-closure-const-then-mov-no-inline 3.6000+-0.0808 ? 3.6084+-0.0594 ? infer-closure-const-then-mov 18.5049+-0.2805 ? 19.2965+-2.3151 ? might be 1.0428x slower infer-closure-const-then-put-to-scope-no-inline 13.2083+-2.6862 ? 13.4016+-2.0768 ? might be 1.0146x slower infer-closure-const-then-put-to-scope 20.3851+-1.8549 ? 21.5073+-1.9687 ? might be 1.0550x slower infer-closure-const-then-reenter-no-inline 50.8507+-1.0915 50.5962+-1.2106 infer-closure-const-then-reenter 19.7194+-2.3260 18.8701+-0.7307 might be 1.0450x faster infer-constant-global-property 3.6687+-0.0783 3.6630+-0.0655 infer-constant-property 2.7931+-0.0682 ? 2.8080+-0.0430 ? infer-one-time-closure-ten-vars 13.0016+-1.7552 12.6496+-0.1742 might be 1.0278x faster infer-one-time-closure-two-vars 12.3395+-1.0136 12.2578+-0.3829 infer-one-time-closure 12.2845+-1.2223 ? 12.6868+-2.1214 ? might be 1.0327x slower infer-one-time-deep-closure 21.2827+-0.4163 ? 21.6205+-1.3582 ? might be 1.0159x slower inline-arguments-access 1.5258+-0.1065 1.4473+-0.0305 might be 1.0542x faster inline-arguments-aliased-access 1.7650+-0.0360 1.7323+-0.0311 might be 1.0189x faster inline-arguments-local-escape 12.0000+-0.1043 ? 12.2468+-0.3149 ? might be 1.0206x slower inline-get-scoped-var 4.2722+-0.0192 ? 4.2997+-0.0627 ? inlined-put-by-id-transition 10.1764+-0.9279 9.6442+-0.3707 might be 1.0552x faster int-or-other-abs-then-get-by-val 5.1475+-0.2811 5.1027+-0.0703 int-or-other-abs-zero-then-get-by-val 18.7806+-2.4819 18.1020+-0.9043 might be 1.0375x faster int-or-other-add-then-get-by-val 4.4583+-0.0361 ? 4.4891+-0.0782 ? int-or-other-add 5.5760+-0.5211 5.3870+-0.1053 might be 1.0351x faster int-or-other-div-then-get-by-val 4.4277+-0.0949 4.4180+-0.0160 int-or-other-max-then-get-by-val 4.6453+-0.3533 4.5412+-0.0713 might be 1.0229x faster int-or-other-min-then-get-by-val 4.6141+-0.0661 4.5502+-0.0737 might be 1.0140x faster int-or-other-mod-then-get-by-val 4.0718+-0.2054 3.9988+-0.0501 might be 1.0183x faster int-or-other-mul-then-get-by-val 3.9753+-0.0922 3.9223+-0.0509 might be 1.0135x faster int-or-other-neg-then-get-by-val 4.8748+-0.0336 ? 4.9593+-0.0993 ? might be 1.0173x slower int-or-other-neg-zero-then-get-by-val 18.5466+-0.7053 18.3952+-0.9849 int-or-other-sub-then-get-by-val 4.5229+-0.1958 4.4917+-0.1962 int-or-other-sub 3.6119+-0.1363 ? 3.6624+-0.2504 ? might be 1.0140x slower int-overflow-local 4.4879+-0.1093 ? 4.6140+-0.4635 ? might be 1.0281x slower Int16Array-alloc-long-lived 52.9727+-2.1738 51.3428+-2.6289 might be 1.0317x faster Int16Array-bubble-sort-with-byteLength 23.7325+-2.9324 ? 24.5247+-3.9088 ? might be 1.0334x slower Int16Array-bubble-sort 24.0062+-3.0321 22.8666+-0.5125 might be 1.0498x faster Int16Array-load-int-mul 1.5896+-0.0860 1.5658+-0.0345 might be 1.0152x faster Int16Array-to-Int32Array-set 58.9879+-3.1299 ? 59.2454+-4.3784 ? Int32Array-alloc-large 27.4422+-1.4561 ? 27.7770+-1.6233 ? might be 1.0122x slower Int32Array-alloc-long-lived 57.6760+-2.2711 57.1089+-0.5020 Int32Array-alloc 3.1258+-0.1913 3.0685+-0.0360 might be 1.0187x faster Int32Array-Int8Array-view-alloc 6.7201+-0.2223 6.7071+-0.2975 int52-spill 6.7455+-0.9460 6.4767+-0.2664 might be 1.0415x faster Int8Array-alloc-long-lived 47.8647+-2.1461 ? 48.2247+-2.3947 ? Int8Array-load-with-byteLength 3.4902+-0.0780 3.4710+-0.1047 Int8Array-load 3.4874+-0.0189 3.4756+-0.0617 integer-divide 12.3262+-0.5377 ? 12.6629+-2.1456 ? might be 1.0273x slower integer-modulo 2.2131+-0.1229 ? 2.2258+-0.1079 ? large-int-captured 7.0120+-0.4509 6.8550+-0.2290 might be 1.0229x faster large-int-neg 19.8965+-5.1520 17.1558+-0.6398 might be 1.1598x faster large-int 15.7031+-1.5635 ? 15.9187+-1.2951 ? might be 1.0137x slower logical-not 4.6405+-0.0754 ? 4.7082+-0.2083 ? might be 1.0146x slower lots-of-fields 10.3118+-0.6420 ? 10.6902+-1.9609 ? might be 1.0367x slower make-indexed-storage 3.0957+-0.1030 ? 3.0961+-0.0707 ? make-rope-cse 4.3340+-0.1095 ? 4.3699+-0.2521 ? marsaglia-larger-ints 40.9833+-1.6254 ? 41.0690+-1.5491 ? marsaglia-osr-entry 24.4312+-2.3686 23.3243+-0.5600 might be 1.0475x faster max-boolean 2.7438+-0.0197 2.7033+-0.0425 might be 1.0150x faster method-on-number 18.8301+-2.7501 17.7614+-0.4068 might be 1.0602x faster min-boolean 2.7534+-0.0742 ? 2.7632+-0.0629 ? minus-boolean-double 3.3185+-0.0320 3.2888+-0.0674 minus-boolean 2.5717+-0.0169 ! 2.6382+-0.0453 ! definitely 1.0259x slower misc-strict-eq 39.0355+-0.8934 ? 42.1133+-2.9429 ? might be 1.0788x slower mod-boolean-double 11.5920+-0.8231 11.4979+-0.8932 mod-boolean 8.3177+-0.7083 8.0955+-0.1790 might be 1.0275x faster mul-boolean-double 3.9065+-0.1908 3.8832+-0.0444 mul-boolean 2.9680+-0.0514 ? 2.9973+-0.0144 ? neg-boolean 3.3288+-0.1132 3.2825+-0.0446 might be 1.0141x faster negative-zero-divide 0.3653+-0.0301 0.3521+-0.0147 might be 1.0376x faster negative-zero-modulo 0.3491+-0.0437 ? 0.3610+-0.0687 ? might be 1.0341x slower negative-zero-negate 0.3359+-0.0180 0.3355+-0.0262 nested-function-parsing 23.9456+-0.6197 ? 23.9872+-0.2061 ? new-array-buffer-dead 2.8333+-0.0601 ? 2.9172+-0.2502 ? might be 1.0296x slower new-array-buffer-push 7.9083+-1.7529 7.7606+-1.4067 might be 1.0190x faster new-array-dead 12.4197+-0.4792 ? 12.5087+-0.7846 ? new-array-push 5.4815+-0.2134 ? 5.9891+-1.2325 ? might be 1.0926x slower number-test 3.0518+-0.0496 ? 3.1127+-0.1496 ? might be 1.0200x slower object-closure-call 5.7860+-0.0681 ? 6.1028+-0.6941 ? might be 1.0547x slower object-test 3.2233+-0.1971 3.1581+-0.0747 might be 1.0207x faster obvious-sink-pathology-taken 145.3377+-1.4378 ? 147.7992+-8.0165 ? might be 1.0169x slower obvious-sink-pathology 143.0409+-1.3243 ? 145.5835+-4.4966 ? might be 1.0178x slower obviously-elidable-new-object 36.1315+-2.2530 ? 36.1357+-0.7740 ? plus-boolean-arith 2.6334+-0.0817 ? 2.6445+-0.1403 ? plus-boolean-double 3.4688+-0.3782 3.3262+-0.0474 might be 1.0429x faster plus-boolean 2.6356+-0.0192 ? 2.7340+-0.3475 ? might be 1.0373x slower poly-chain-access-different-prototypes-simple 3.4374+-0.0331 3.4305+-0.1184 poly-chain-access-different-prototypes 2.9180+-0.1433 2.8822+-0.1804 might be 1.0124x faster poly-chain-access-simpler 3.3939+-0.0681 3.3937+-0.0895 poly-chain-access 2.8030+-0.1305 ? 2.8804+-0.1301 ? might be 1.0276x slower poly-stricteq 60.9469+-5.2369 59.2569+-2.5622 might be 1.0285x faster polymorphic-array-call 1.8807+-0.3109 1.8418+-0.0838 might be 1.0211x faster polymorphic-get-by-id 3.3430+-0.1179 3.3347+-0.1681 polymorphic-put-by-id 32.1770+-2.1342 31.3300+-2.0673 might be 1.0270x faster polymorphic-structure 15.5054+-0.8149 ? 16.0948+-1.9141 ? might be 1.0380x slower polyvariant-monomorphic-get-by-id 8.8381+-0.1900 8.8245+-0.4463 proto-getter-access 10.0375+-0.3297 9.7969+-0.3636 might be 1.0246x faster put-by-id-replace-and-transition 9.1693+-0.5664 8.9867+-0.2512 might be 1.0203x faster put-by-id-slightly-polymorphic 2.9630+-0.0658 ? 3.0031+-0.2260 ? might be 1.0135x slower put-by-id 13.4418+-0.7419 13.3488+-0.4723 put-by-val-direct 0.5386+-0.0123 ? 0.5512+-0.0216 ? might be 1.0233x slower put-by-val-large-index-blank-indexing-type 6.0755+-0.4576 ? 6.9391+-1.8096 ? might be 1.1422x slower put-by-val-machine-int 2.6384+-0.0938 ? 2.6775+-0.2396 ? might be 1.0148x slower rare-osr-exit-on-local 15.6924+-0.2425 ? 15.9772+-0.8376 ? might be 1.0181x slower register-pressure-from-osr 22.1503+-0.4718 ? 22.6674+-1.9330 ? might be 1.0233x slower setter 5.3058+-0.0818 ! 5.5634+-0.1237 ! definitely 1.0485x slower simple-activation-demo 26.8131+-0.4409 26.4100+-0.6781 might be 1.0153x faster simple-getter-access 12.7466+-0.3688 12.7267+-0.4397 simple-poly-call-nested 16.9388+-0.5946 ? 17.1368+-0.8593 ? might be 1.0117x slower simple-poly-call 1.3689+-0.1589 1.2852+-0.0695 might be 1.0651x faster sin-boolean 21.9435+-4.5578 ? 23.7475+-0.9647 ? might be 1.0822x slower sinkable-new-object-dag 73.9594+-2.2122 ? 74.3334+-2.3868 ? sinkable-new-object-taken 55.0687+-4.9059 54.6926+-6.3278 sinkable-new-object 40.3417+-1.5998 40.1563+-1.5843 slow-array-profile-convergence 2.8257+-0.0375 ? 2.8647+-0.0957 ? might be 1.0138x slower slow-convergence 3.2377+-0.0494 ? 3.4055+-0.1968 ? might be 1.0518x slower sparse-conditional 1.2253+-0.1078 1.2063+-0.1394 might be 1.0157x faster splice-to-remove 17.4370+-1.4766 ? 18.6082+-3.1062 ? might be 1.0672x slower string-char-code-at 16.6125+-0.8107 16.5755+-0.8493 string-concat-object 2.3048+-0.1991 ? 2.3417+-0.1512 ? might be 1.0160x slower string-concat-pair-object 2.2582+-0.0725 ? 2.4241+-0.6151 ? might be 1.0734x slower string-concat-pair-simple 11.3400+-1.4310 ? 12.0382+-1.6141 ? might be 1.0616x slower string-concat-simple 11.6130+-0.6833 ? 11.8845+-1.1097 ? might be 1.0234x slower string-cons-repeat 7.7600+-0.8355 ? 8.8192+-1.8570 ? might be 1.1365x slower string-cons-tower 7.5788+-0.3463 ? 7.9585+-0.3297 ? might be 1.0501x slower string-equality 18.6591+-1.2140 18.3985+-0.6290 might be 1.0142x faster string-get-by-val-big-char 7.0708+-0.1669 ? 7.2109+-0.5692 ? might be 1.0198x slower string-get-by-val-out-of-bounds-insane 3.8964+-0.2109 ? 3.9271+-0.2465 ? string-get-by-val-out-of-bounds 5.4493+-0.2381 5.4148+-0.2171 string-get-by-val 3.3828+-0.2142 ? 3.4078+-0.1681 ? string-hash 2.1396+-0.0226 ? 2.1516+-0.0556 ? string-long-ident-equality 15.9028+-0.8880 15.5890+-0.8600 might be 1.0201x faster string-repeat-arith 33.0974+-3.0105 ? 35.1883+-1.7871 ? might be 1.0632x slower string-sub 66.6017+-3.3137 ! 73.0602+-3.1375 ! definitely 1.0970x slower string-test 2.9791+-0.0511 ? 3.0018+-0.0793 ? string-var-equality 32.7193+-1.6927 31.8469+-0.5755 might be 1.0274x faster structure-hoist-over-transitions 2.4780+-0.0303 ? 2.6432+-0.2372 ? might be 1.0667x slower substring-concat-weird 40.5710+-2.5567 ? 41.7296+-2.9527 ? might be 1.0286x slower substring-concat 41.3062+-0.4729 ? 41.4225+-0.9574 ? substring 47.4980+-1.2579 ? 49.7775+-1.9400 ? might be 1.0480x slower switch-char-constant 2.7664+-0.0734 ? 2.7907+-0.0595 ? switch-char 7.2636+-1.3894 6.9661+-1.2607 might be 1.0427x faster switch-constant 10.4354+-0.6998 10.0878+-0.6671 might be 1.0345x faster switch-string-basic-big-var 15.6328+-1.9551 15.1189+-0.6547 might be 1.0340x faster switch-string-basic-big 15.1714+-1.2864 15.1672+-2.3967 switch-string-basic-var 14.9333+-0.3045 ? 15.4142+-2.3586 ? might be 1.0322x slower switch-string-basic 13.7217+-0.5259 13.6362+-0.2939 switch-string-big-length-tower-var 21.0521+-1.6542 ? 21.3682+-1.9062 ? might be 1.0150x slower switch-string-length-tower-var 16.2350+-2.0398 ? 16.2440+-2.1641 ? switch-string-length-tower 15.2575+-2.0552 ^ 12.8312+-0.3460 ^ definitely 1.1891x faster switch-string-short 13.6147+-2.0131 13.0396+-0.5093 might be 1.0441x faster switch 13.6429+-2.8427 11.8064+-0.3713 might be 1.1556x faster tear-off-arguments-simple 2.4921+-0.1985 2.4719+-0.1861 tear-off-arguments 3.7617+-0.0321 3.7432+-0.0538 temporal-structure 12.8622+-1.2585 12.4824+-0.4482 might be 1.0304x faster to-int32-boolean 14.2429+-0.6369 ? 14.5908+-1.6261 ? might be 1.0244x slower undefined-property-access 418.9758+-8.2222 418.9640+-10.5094 undefined-test 3.1163+-0.0665 ? 3.1843+-0.2249 ? might be 1.0218x slower unprofiled-licm 23.3995+-0.4968 23.3087+-0.4156 weird-inlining-const-prop 2.2840+-0.3966 2.1098+-0.2027 might be 1.0826x faster <arithmetic> 18.6013+-0.1266 ? 18.6366+-0.0854 ? might be 1.0019x slower <geometric> * 8.4562+-0.0129 ? 8.4685+-0.0563 ? might be 1.0015x slower <harmonic> 4.2255+-0.0332 ? 4.2472+-0.0187 ? might be 1.0051x slower Baseline FixedGetterSetter AsmBench: bigfib.cpp 529.2435+-15.3735 ? 534.5116+-27.0490 ? cray.c 494.3340+-6.1558 492.1143+-3.1522 dry.c 510.2488+-27.7971 ? 517.4300+-19.0930 ? might be 1.0141x slower FloatMM.c 818.1018+-13.2325 813.6372+-3.9387 gcc-loops.cpp 4395.1752+-92.4845 4368.1667+-11.2219 n-body.c 1037.2377+-9.9462 1036.5140+-11.7994 Quicksort.c 461.1207+-4.1784 ? 466.5823+-3.7399 ? might be 1.0118x slower stepanov_container.cpp 3958.6710+-57.1595 3917.7023+-74.4776 might be 1.0105x faster Towers.c 283.8196+-7.1698 ? 284.3759+-5.8903 ? <arithmetic> 1387.5502+-7.6449 1381.2260+-11.2164 might be 1.0046x faster <geometric> * 860.1543+-5.7705 ? 861.1596+-7.0641 ? might be 1.0012x slower <harmonic> 632.3162+-7.4324 ? 634.8839+-4.4267 ? might be 1.0041x slower Baseline FixedGetterSetter CompressionBench: huffman 526.3486+-8.8750 ^ 499.3091+-18.0560 ^ definitely 1.0542x faster arithmetic-simple 453.1933+-2.7737 ? 455.3071+-5.3831 ? arithmetic-precise 335.8572+-3.9895 334.1344+-4.9260 arithmetic-complex-precise 336.1111+-7.4494 ? 339.0927+-14.2661 ? arithmetic-precise-order-0 495.9648+-20.9798 492.3342+-22.6160 arithmetic-precise-order-1 381.3355+-6.7105 381.0755+-9.3926 arithmetic-precise-order-2 424.8180+-10.4692 ? 425.7477+-4.3948 ? arithmetic-simple-order-1 497.2772+-3.7043 496.8344+-2.8407 arithmetic-simple-order-2 554.9897+-6.6450 ? 555.7110+-5.9735 ? lz-string 380.5592+-11.8572 ? 386.6624+-7.3029 ? might be 1.0160x slower <arithmetic> 438.6455+-6.0109 436.6209+-2.2986 might be 1.0046x faster <geometric> * 432.1422+-5.8123 430.6565+-2.0626 might be 1.0034x faster <harmonic> 425.6345+-5.5839 424.6622+-1.9460 might be 1.0023x faster Baseline FixedGetterSetter All benchmarks: <arithmetic> 106.2507+-0.2223 106.1077+-0.4196 might be 1.0013x faster <geometric> 14.0480+-0.0489 ? 14.0537+-0.0582 ? might be 1.0004x slower <harmonic> 3.4910+-0.0140 ? 3.5038+-0.0153 ? might be 1.0037x slower Baseline FixedGetterSetter Geomean of preferred means: <scaled-result> 69.3545+-0.6471 69.2152+-0.1789 might be 1.0020x faster
Filip Pizlo
Comment 3 2014-12-05 10:47:42 PST
Comment on attachment 242620 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=242620&action=review > Source/JavaScriptCore/bytecode/ComplexGetStatus.cpp:85 > + > + if (isValidOffset(result.m_offset)) { > + switch (checkAccessor) { > + case CheckGetter: { > + JSValue gs = currentObject->getDirect(result.m_offset); > + if (gs.isGetterSetter() && !jsCast<GetterSetter*>(gs.asCell())->getter()) > + return takesSlowPath(); > + break; > + } > + case CheckSetter: { > + JSValue gs = currentObject->getDirect(result.m_offset); > + if (gs.isGetterSetter() && !jsCast<GetterSetter*>(gs.asCell())->setter()) > + return takesSlowPath(); > + break; > + } > + default: > + break; > + } > + } This feels like it has to be wrong. 1) Why is this check only needed for the prototype case? 2) Why is this check needed at all? 3) Why is this in ComplexGetStatus? You could do away with the enum and the switch statement if you put it at callsites to ComplexGetStatus.
Michael Saboff
Comment 4 2014-12-05 11:21:24 PST
(In reply to comment #3) > Comment on attachment 242620 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=242620&action=review > > > Source/JavaScriptCore/bytecode/ComplexGetStatus.cpp:85 > > + > > + if (isValidOffset(result.m_offset)) { > > + switch (checkAccessor) { > > + case CheckGetter: { > > + JSValue gs = currentObject->getDirect(result.m_offset); > > + if (gs.isGetterSetter() && !jsCast<GetterSetter*>(gs.asCell())->getter()) > > + return takesSlowPath(); > > + break; > > + } > > + case CheckSetter: { > > + JSValue gs = currentObject->getDirect(result.m_offset); > > + if (gs.isGetterSetter() && !jsCast<GetterSetter*>(gs.asCell())->setter()) > > + return takesSlowPath(); > > + break; > > + } > > + default: > > + break; > > + } > > + } > > This feels like it has to be wrong. > > 1) Why is this check only needed for the prototype case? > > 2) Why is this check needed at all? > > 3) Why is this in ComplexGetStatus? You could do away with the enum and the > switch statement if you put it at callsites to ComplexGetStatus. Discussed this with Phil. Going to change the implementation of GetterSetter to always set both the getter and setter functions to valid values. As part of this, introduce a new "UndefinedFunction" that returns undefined and use that as the function pointer for an unset getter / setter.
Geoffrey Garen
Comment 5 2014-12-05 11:42:33 PST
> Discussed this with Phil. Going to change the implementation of > GetterSetter to always set both the getter and setter functions to valid > values. As part of this, introduce a new "UndefinedFunction" that returns > undefined and use that as the function pointer for an unset getter / setter. I don't think it's correct to return undefined for a missing setter in strict mode; instead, you need to throw a read-only exception.
Michael Saboff
Comment 6 2014-12-08 15:17:28 PST
Created attachment 242853 [details] Patch using undefined function class for missing getters and setters Running performance tests the which of which I'll post when done.
Michael Saboff
Comment 7 2014-12-08 15:56:07 PST
Performance results for latest "UndefinedFunction" patch. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on msaboff-pro (MacPro5,1). VMs tested: "Baseline" at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/jsc (r176969) "UndefinedFunc" at /Volumes/Data/src/webkit/WebKitBuild/Release/jsc (r176969) 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 UndefinedFunc SunSpider: 3d-cube 6.5482+-0.0485 ? 6.6499+-0.1155 ? might be 1.0155x slower 3d-morph 8.2217+-0.3297 ? 8.2994+-0.2325 ? 3d-raytrace 8.3762+-0.6308 ? 8.4463+-0.3626 ? access-binary-trees 2.6332+-0.0600 2.5377+-0.1789 might be 1.0376x faster access-fannkuch 8.0935+-0.1728 8.0453+-0.1338 access-nbody 3.9335+-0.1570 ? 4.0175+-0.1086 ? might be 1.0213x slower access-nsieve 5.1087+-0.1670 5.0298+-0.1483 might be 1.0157x faster bitops-3bit-bits-in-byte 1.8535+-0.0723 1.8168+-0.1046 might be 1.0202x faster bitops-bits-in-byte 5.5181+-0.0781 5.4878+-0.0607 bitops-bitwise-and 2.8538+-0.0727 2.8078+-0.1258 might be 1.0164x faster bitops-nsieve-bits 5.0175+-0.1289 ? 5.1600+-0.1904 ? might be 1.0284x slower controlflow-recursive 2.8411+-0.1627 2.8083+-0.1345 might be 1.0117x faster crypto-aes 5.7318+-0.3966 5.4765+-0.2999 might be 1.0466x faster crypto-md5 3.4705+-0.0837 3.3588+-0.2998 might be 1.0333x faster crypto-sha1 3.1516+-0.0830 ? 3.2389+-0.1542 ? might be 1.0277x slower date-format-tofte 11.6503+-0.2827 11.5569+-0.0755 date-format-xparb 7.0659+-0.1445 6.8660+-0.3680 might be 1.0291x faster math-cordic 4.3198+-0.0173 ^ 4.2057+-0.0454 ^ definitely 1.0271x faster math-partial-sums 8.9890+-0.0531 ? 9.0227+-0.2259 ? math-spectral-norm 2.8215+-0.0498 2.7356+-0.1258 might be 1.0314x faster regexp-dna 9.8810+-0.5334 9.7575+-0.2349 might be 1.0127x faster string-base64 5.5735+-0.2143 5.4975+-0.0169 might be 1.0138x faster string-fasta 8.6810+-0.1587 8.6480+-0.0699 string-tagcloud 13.9245+-0.6746 13.2781+-0.3857 might be 1.0487x faster string-unpack-code 27.0518+-0.8694 26.9590+-0.6536 string-validate-input 6.2625+-0.1305 6.2498+-0.1905 <arithmetic> * 6.9067+-0.0671 6.8445+-0.0341 might be 1.0091x faster <geometric> 5.7277+-0.0344 5.6717+-0.0416 might be 1.0099x faster <harmonic> 4.8689+-0.0220 4.8104+-0.0668 might be 1.0122x faster Baseline UndefinedFunc LongSpider: 3d-cube 1160.9305+-3.9606 ^ 1143.7056+-7.3160 ^ definitely 1.0151x faster 3d-morph 1870.9886+-11.5479 1867.4567+-3.0918 3d-raytrace 1058.0804+-6.0319 1048.4731+-6.3476 access-binary-trees 1350.3644+-10.2302 1342.5153+-6.5554 access-fannkuch 450.7495+-22.3973 438.6076+-21.2812 might be 1.0277x faster access-nbody 1001.5750+-2.8340 1000.3808+-2.4062 access-nsieve 1327.9193+-13.7958 1327.7805+-12.3116 bitops-3bit-bits-in-byte 49.8154+-0.7404 ? 50.4369+-1.4263 ? might be 1.0125x slower bitops-bits-in-byte 318.6658+-15.0729 ? 324.2200+-15.6388 ? might be 1.0174x slower bitops-nsieve-bits 959.0280+-5.9797 ? 961.0540+-6.4928 ? controlflow-recursive 717.6786+-0.6599 ? 717.8885+-2.1278 ? crypto-aes 913.2332+-8.0365 912.7480+-6.1297 crypto-md5 805.3179+-4.5049 ? 806.3229+-6.6626 ? crypto-sha1 950.8820+-22.0724 ? 955.2480+-29.0074 ? date-format-tofte 1007.0717+-4.3555 ? 1033.0526+-81.6697 ? might be 1.0258x slower date-format-xparb 989.1950+-41.4797 941.1365+-21.0949 might be 1.0511x faster math-cordic 677.5341+-7.0522 ? 678.7780+-9.9893 ? math-partial-sums 1034.4470+-11.5892 ? 1038.6185+-2.4713 ? math-spectral-norm 1082.0245+-17.4862 1075.6721+-3.5118 string-base64 469.0518+-3.8432 ? 470.1005+-7.7696 ? string-fasta 581.7630+-4.2540 ? 583.3220+-1.3866 ? string-tagcloud 312.1032+-5.0127 ^ 300.8842+-3.2515 ^ definitely 1.0373x faster <arithmetic> 867.6554+-3.0488 864.4728+-4.1917 might be 1.0037x faster <geometric> * 727.5322+-3.8125 724.8956+-4.0791 might be 1.0036x faster <harmonic> 453.4245+-2.7672 ? 454.1809+-5.3375 ? might be 1.0017x slower Baseline UndefinedFunc V8Spider: crypto 73.3396+-2.0170 72.9153+-1.8281 deltablue 112.0315+-1.0122 110.8862+-0.9209 might be 1.0103x faster earley-boyer 62.2952+-1.3583 ? 62.7997+-0.6564 ? raytrace 39.3480+-0.9496 ? 39.4399+-1.2983 ? regexp 95.9234+-2.2420 ? 96.0132+-1.3919 ? richards 112.3655+-2.9338 ? 112.6780+-5.7984 ? splay 42.4055+-0.8011 ? 44.2395+-2.0996 ? might be 1.0433x slower <arithmetic> 76.8155+-0.5520 ? 76.9960+-0.6818 ? might be 1.0023x slower <geometric> * 71.1172+-0.3394 ? 71.5238+-0.6102 ? might be 1.0057x slower <harmonic> 65.4514+-0.3149 ? 66.0772+-0.6561 ? might be 1.0096x slower Baseline UndefinedFunc Octane: encrypt 0.31733+-0.00646 ? 0.32222+-0.00677 ? might be 1.0154x slower decrypt 5.69149+-0.05691 5.67350+-0.01802 deltablue x2 0.26569+-0.00295 0.26552+-0.00272 earley 1.00014+-0.00633 0.99860+-0.04116 boyer 8.75190+-0.20295 8.65566+-0.17464 might be 1.0111x faster navier-stokes x2 6.41576+-0.01127 ? 6.42037+-0.01959 ? raytrace x2 1.65401+-0.02017 1.64824+-0.02324 richards x2 0.16607+-0.00476 ? 0.16734+-0.00670 ? splay x2 0.52702+-0.00396 ? 0.53644+-0.01093 ? might be 1.0179x slower regexp x2 28.17254+-0.50376 27.93853+-0.49983 pdfjs x2 70.15228+-0.81487 ? 70.31365+-0.35426 ? mandreel x2 73.96336+-1.60287 73.37306+-0.77816 gbemu x2 62.38221+-1.36993 ? 62.58065+-1.29339 ? closure 0.74499+-0.00272 ? 0.74967+-0.00551 ? jquery 9.41841+-0.09424 ? 9.48484+-0.04079 ? box2d x2 18.84716+-0.10900 ^ 18.64826+-0.06257 ^ definitely 1.0107x faster zlib x2 674.69210+-2.14344 650.08142+-75.18092 might be 1.0379x faster typescript x2 1084.48328+-11.76009 1078.47522+-13.22654 <arithmetic> 135.64557+-0.90192 133.55940+-4.81358 might be 1.0156x faster <geometric> * 9.28131+-0.04821 9.25779+-0.09352 might be 1.0025x faster <harmonic> 0.96625+-0.01099 ? 0.97246+-0.01681 ? might be 1.0064x slower Baseline UndefinedFunc Kraken: ai-astar 463.028+-14.896 ? 467.213+-9.941 ? audio-beat-detection 161.136+-2.860 160.390+-0.767 audio-dft 209.515+-0.754 ? 211.380+-2.425 ? audio-fft 107.886+-1.099 107.786+-1.009 audio-oscillator 312.908+-6.432 312.524+-2.545 imaging-darkroom 243.307+-1.691 243.065+-2.794 imaging-desaturate 95.104+-0.392 ? 95.629+-0.296 ? imaging-gaussian-blur 156.635+-0.908 ? 157.893+-1.433 ? json-parse-financial 66.985+-2.417 ? 67.214+-1.440 ? json-stringify-tinderbox 82.668+-1.162 82.025+-0.720 stanford-crypto-aes 82.520+-1.178 ? 83.864+-2.200 ? might be 1.0163x slower stanford-crypto-ccm 74.711+-12.585 74.447+-14.686 stanford-crypto-pbkdf2 227.029+-2.637 ! 234.206+-3.450 ! definitely 1.0316x slower stanford-crypto-sha256-iterative 71.463+-2.377 ? 71.560+-0.315 ? <arithmetic> * 168.207+-0.287 ! 169.228+-0.417 ! definitely 1.0061x slower <geometric> 139.475+-1.244 ? 140.107+-1.743 ? might be 1.0045x slower <harmonic> 118.987+-2.107 ? 119.350+-2.744 ? might be 1.0030x slower Baseline UndefinedFunc JSRegress: abs-boolean 3.6437+-0.0507 3.6231+-0.0917 adapt-to-double-divide 18.0165+-0.4431 18.0063+-0.1670 aliased-arguments-getbyval 1.5870+-0.1077 1.4600+-0.0731 might be 1.0870x faster allocate-big-object 3.0845+-0.3677 3.0483+-0.3014 might be 1.0119x faster arity-mismatch-inlining 1.1570+-0.1525 1.1318+-0.0520 might be 1.0223x faster array-access-polymorphic-structure 8.9622+-0.3222 ? 8.9795+-0.1160 ? array-nonarray-polymorhpic-access 50.9824+-1.0453 ? 51.0234+-0.5355 ? array-prototype-every 105.9952+-5.6501 104.7118+-2.5142 might be 1.0123x faster array-prototype-forEach 105.0527+-6.0033 102.5912+-0.9407 might be 1.0240x faster array-prototype-map 124.8387+-0.7834 ? 125.5502+-1.4239 ? array-prototype-some 108.1491+-3.2707 102.9586+-4.3562 might be 1.0504x faster array-splice-contiguous 57.6777+-0.2437 57.6548+-0.5920 array-with-double-add 5.5385+-0.1238 5.4884+-0.0870 array-with-double-increment 4.1060+-0.1657 4.0327+-0.1533 might be 1.0182x faster array-with-double-mul-add 7.1629+-0.1153 ? 7.1661+-0.0696 ? array-with-double-sum 4.2371+-0.0927 ? 4.3040+-0.1506 ? might be 1.0158x slower array-with-int32-add-sub 9.5091+-0.1613 ? 9.6277+-0.1221 ? might be 1.0125x slower array-with-int32-or-double-sum 4.3884+-0.1210 4.2980+-0.1221 might be 1.0210x faster ArrayBuffer-DataView-alloc-large-long-lived 46.3295+-0.8899 ? 47.5630+-0.7547 ? might be 1.0266x slower ArrayBuffer-DataView-alloc-long-lived 17.7255+-0.4181 ? 18.4174+-0.3047 ? might be 1.0390x slower ArrayBuffer-Int32Array-byteOffset 4.5755+-0.0412 ? 4.6166+-0.1154 ? ArrayBuffer-Int8Array-alloc-large-long-lived 48.6617+-2.5542 ? 49.3763+-1.9072 ? might be 1.0147x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 30.7548+-2.8958 29.5364+-0.3238 might be 1.0413x faster ArrayBuffer-Int8Array-alloc-long-lived 17.1937+-0.3817 17.0978+-0.6630 ArrayBuffer-Int8Array-alloc 14.9796+-1.4415 ? 15.6964+-1.3997 ? might be 1.0479x slower asmjs_bool_bug 8.8042+-0.2064 ? 8.9155+-0.1610 ? might be 1.0126x slower assign-custom-setter-polymorphic 4.0901+-0.0973 ? 4.2201+-0.2971 ? might be 1.0318x slower assign-custom-setter 5.6458+-0.0745 ? 5.6771+-0.2867 ? basic-set 12.9968+-1.0268 ? 13.2637+-0.7372 ? might be 1.0205x slower big-int-mul 5.8283+-0.1598 5.7632+-0.2469 might be 1.0113x faster boolean-test 4.1306+-0.1333 ? 4.2331+-0.2041 ? might be 1.0248x slower branch-fold 4.5650+-0.1636 4.5262+-0.1181 by-val-generic 10.7326+-0.3503 ? 10.9388+-0.2181 ? might be 1.0192x slower call-spread-apply 17.3369+-0.2938 17.2892+-0.3492 call-spread-call 7.7305+-0.2305 ? 7.7571+-0.3026 ? captured-assignments 0.5975+-0.0943 0.5553+-0.0087 might be 1.0761x faster cast-int-to-double 8.1232+-0.1726 ? 8.1888+-0.2947 ? cell-argument 9.9894+-0.1268 ^ 9.7045+-0.0653 ^ definitely 1.0294x faster cfg-simplify 3.6564+-0.1233 3.6299+-0.1658 chain-getter-access 12.7806+-0.1854 ? 12.8400+-0.6138 ? cmpeq-obj-to-obj-other 12.3860+-0.4143 12.1389+-0.3972 might be 1.0204x faster constant-test 7.4893+-0.0552 7.4345+-0.1131 DataView-custom-properties 51.9518+-0.5999 ? 51.9963+-0.3248 ? delay-tear-off-arguments-strictmode 3.4349+-0.2065 ? 3.4808+-0.1269 ? might be 1.0134x slower destructuring-arguments 7.6557+-0.1688 7.5876+-0.1234 destructuring-swap 7.6249+-0.3006 ? 7.7142+-0.2178 ? might be 1.0117x slower direct-arguments-getbyval 0.8962+-0.1053 ? 0.8980+-0.0755 ? div-boolean-double 5.5046+-0.1032 5.4772+-0.1612 div-boolean 9.8295+-0.1630 9.7253+-0.1938 might be 1.0107x faster double-get-by-val-out-of-bounds 5.4697+-0.4374 ? 5.6324+-0.0515 ? might be 1.0297x slower double-pollution-getbyval 9.7147+-0.0597 9.7032+-0.2138 double-pollution-putbyoffset 5.3742+-0.2555 ? 5.4494+-0.1004 ? might be 1.0140x slower double-to-int32-typed-array-no-inline 2.8268+-0.1184 2.8004+-0.1588 double-to-int32-typed-array 2.4543+-0.2451 2.3845+-0.1292 might be 1.0293x faster double-to-uint32-typed-array-no-inline 2.8070+-0.1179 ? 2.8265+-0.1263 ? double-to-uint32-typed-array 2.6685+-0.1791 2.6334+-0.2157 might be 1.0133x faster elidable-new-object-dag 54.9510+-0.9331 ? 55.4106+-0.7029 ? elidable-new-object-roflcopter 202.7885+-5.2648 202.4553+-1.5934 elidable-new-object-then-call 51.2642+-4.1417 49.5212+-1.3355 might be 1.0352x faster elidable-new-object-tree 61.9744+-2.6757 ? 62.9801+-2.5277 ? might be 1.0162x slower empty-string-plus-int 7.2338+-0.4668 ? 7.2801+-0.1876 ? emscripten-cube2hash 46.9266+-1.1506 ? 47.0291+-0.6978 ? external-arguments-getbyval 1.7991+-0.2080 1.7446+-0.1047 might be 1.0312x faster external-arguments-putbyval 2.7684+-0.1340 ? 2.8409+-0.1953 ? might be 1.0262x slower fixed-typed-array-storage-var-index 1.5357+-0.1569 1.5317+-0.0460 fixed-typed-array-storage 1.1623+-0.0777 1.0997+-0.1326 might be 1.0569x faster Float32Array-matrix-mult 6.0482+-0.7261 ? 6.1041+-0.6808 ? Float32Array-to-Float64Array-set 76.1387+-3.2473 ? 77.7983+-2.7770 ? might be 1.0218x slower Float64Array-alloc-long-lived 86.9961+-0.2631 86.9762+-0.6653 Float64Array-to-Int16Array-set 94.8237+-0.9175 94.4523+-1.3287 fold-double-to-int 17.8403+-0.5564 ? 17.9605+-0.3673 ? fold-get-by-id-to-multi-get-by-offset-rare-int 23.5079+-2.3313 ? 24.5173+-2.7875 ? might be 1.0429x slower fold-get-by-id-to-multi-get-by-offset 23.0380+-2.0944 22.0567+-1.5578 might be 1.0445x faster fold-multi-get-by-offset-to-get-by-offset 15.6418+-0.3523 15.4025+-0.0690 might be 1.0155x faster fold-multi-get-by-offset-to-poly-get-by-offset 15.9565+-0.4547 15.7141+-0.4555 might be 1.0154x faster fold-multi-put-by-offset-to-poly-put-by-offset 16.0903+-1.1230 15.9150+-0.8197 might be 1.0110x faster fold-multi-put-by-offset-to-put-by-offset 14.5000+-0.2002 14.3375+-0.3039 might be 1.0113x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 19.8048+-0.5684 19.5900+-0.5086 might be 1.0110x faster fold-put-by-id-to-multi-put-by-offset 24.1200+-2.4634 22.9205+-1.9819 might be 1.0523x faster fold-put-structure 14.8803+-0.3391 14.6749+-0.3682 might be 1.0140x faster for-of-iterate-array-entries 7.6318+-0.0979 7.4800+-0.4865 might be 1.0203x faster for-of-iterate-array-keys 3.7241+-0.1042 3.6779+-0.2479 might be 1.0126x faster for-of-iterate-array-values 3.1537+-0.2046 ? 3.1744+-0.2075 ? fround 21.6023+-0.2614 ! 22.6892+-0.2132 ! definitely 1.0503x slower ftl-library-inlining-dataview 91.7423+-0.9984 91.1877+-0.4360 ftl-library-inlining 90.4935+-9.1206 90.2115+-8.2563 function-dot-apply 2.2552+-0.2018 2.2180+-0.1183 might be 1.0168x faster function-test 4.6447+-0.0949 4.5035+-0.1239 might be 1.0313x faster function-with-eval 151.2146+-2.7415 149.5901+-1.9846 might be 1.0109x faster gcse-poly-get-less-obvious 24.7898+-0.7220 ? 24.8268+-0.3856 ? gcse-poly-get 24.5231+-0.2389 ? 24.7525+-0.6640 ? gcse 6.4987+-0.2567 ? 6.5347+-0.0687 ? get-by-id-bimorphic-check-structure-elimination-simple 3.2513+-0.1118 3.2174+-0.1644 might be 1.0105x faster get-by-id-bimorphic-check-structure-elimination 8.3284+-0.1198 8.2220+-0.2427 might be 1.0129x faster get-by-id-chain-from-try-block 15.5178+-0.3511 ? 15.6767+-0.8063 ? might be 1.0102x slower get-by-id-check-structure-elimination 7.3882+-0.1464 ? 7.4680+-0.1351 ? might be 1.0108x slower get-by-id-proto-or-self 22.7470+-2.1111 22.5458+-1.1472 get-by-id-quadmorphic-check-structure-elimination-simple 3.8047+-0.0466 ! 4.0173+-0.0503 ! definitely 1.0559x slower get-by-id-self-or-proto 23.4608+-2.2767 22.3175+-1.0798 might be 1.0512x faster get-by-val-out-of-bounds 5.6313+-0.1160 5.4941+-0.1602 might be 1.0250x faster get_callee_monomorphic 4.9140+-0.2592 ? 4.9161+-0.5158 ? get_callee_polymorphic 4.2510+-0.1780 ? 4.3139+-0.2465 ? might be 1.0148x slower getter-no-activation 5.6465+-0.0839 ? 5.7087+-0.0832 ? might be 1.0110x slower getter-richards 167.8748+-13.0367 ? 169.0120+-14.0322 ? getter 6.5461+-0.2413 6.4401+-0.0783 might be 1.0165x faster global-var-const-infer-fire-from-opt 1.1868+-0.1244 ? 1.3201+-0.2475 ? might be 1.1123x slower global-var-const-infer 1.2471+-0.2328 1.0591+-0.1560 might be 1.1775x faster HashMap-put-get-iterate-keys 35.1672+-1.0748 34.9451+-1.0566 HashMap-put-get-iterate 34.7428+-1.1891 34.0622+-0.5571 might be 1.0200x faster HashMap-string-put-get-iterate 33.7900+-1.1296 33.4713+-0.8637 hoist-make-rope 13.8890+-1.1992 13.7089+-1.6871 might be 1.0131x faster hoist-poly-check-structure-effectful-loop 6.4940+-0.0921 ? 6.5225+-0.1213 ? hoist-poly-check-structure 4.7583+-0.0938 ? 4.7900+-0.0588 ? imul-double-only 9.7755+-0.9072 ? 10.0713+-0.1641 ? might be 1.0303x slower imul-int-only 12.5493+-0.6557 ? 12.6414+-1.3563 ? imul-mixed 9.7451+-0.4090 ? 9.9910+-1.0558 ? might be 1.0252x slower in-four-cases 23.9414+-0.7074 23.9172+-0.4255 in-one-case-false 12.4760+-0.1413 12.4490+-0.1819 in-one-case-true 12.5020+-0.2000 12.4958+-0.0526 in-two-cases 13.0479+-0.1946 13.0156+-0.3014 indexed-properties-in-objects 3.8092+-0.1206 3.7700+-0.0956 might be 1.0104x faster infer-closure-const-then-mov-no-inline 4.3020+-0.1267 4.2089+-0.1237 might be 1.0221x faster infer-closure-const-then-mov 24.6890+-0.3762 ? 24.7131+-0.2577 ? infer-closure-const-then-put-to-scope-no-inline 14.9119+-0.1608 ? 15.0322+-0.1135 ? infer-closure-const-then-put-to-scope 29.1497+-2.2341 ? 29.8658+-4.7215 ? might be 1.0246x slower infer-closure-const-then-reenter-no-inline 64.6081+-0.8551 64.1285+-0.5843 infer-closure-const-then-reenter 28.0976+-0.3488 27.9600+-0.1781 infer-constant-global-property 4.7172+-0.1453 4.6995+-0.1240 infer-constant-property 3.2770+-0.0643 3.2087+-0.0288 might be 1.0213x faster infer-one-time-closure-ten-vars 14.9130+-0.3756 ? 14.9686+-0.4079 ? infer-one-time-closure-two-vars 14.0778+-0.3780 ? 14.2133+-0.2722 ? infer-one-time-closure 13.7919+-0.4161 ? 14.1583+-0.3005 ? might be 1.0266x slower infer-one-time-deep-closure 24.5585+-0.8323 ? 24.8576+-0.6656 ? might be 1.0122x slower inline-arguments-access 2.0997+-0.1299 2.0447+-0.0621 might be 1.0269x faster inline-arguments-aliased-access 2.4142+-0.1268 ? 2.4741+-0.1293 ? might be 1.0248x slower inline-arguments-local-escape 15.8397+-0.3003 ? 15.9580+-0.4996 ? inline-get-scoped-var 5.6020+-0.0713 ? 5.7004+-0.0858 ? might be 1.0176x slower inlined-put-by-id-transition 13.2547+-0.4733 13.1742+-0.2781 int-or-other-abs-then-get-by-val 6.9318+-0.1117 6.8304+-0.1433 might be 1.0148x faster int-or-other-abs-zero-then-get-by-val 26.4957+-0.4796 ? 26.8609+-0.6054 ? might be 1.0138x slower int-or-other-add-then-get-by-val 5.8719+-0.1290 ? 5.9342+-0.1658 ? might be 1.0106x slower int-or-other-add 7.7820+-0.0290 ? 7.8498+-0.0901 ? int-or-other-div-then-get-by-val 5.0825+-0.1211 ? 5.1218+-0.1161 ? int-or-other-max-then-get-by-val 6.4495+-0.3705 ? 6.5160+-0.2070 ? might be 1.0103x slower int-or-other-min-then-get-by-val 5.2519+-0.0839 5.1844+-0.0398 might be 1.0130x faster int-or-other-mod-then-get-by-val 5.1440+-0.0481 5.1085+-0.2499 int-or-other-mul-then-get-by-val 4.9916+-0.1632 ? 5.0115+-0.1397 ? int-or-other-neg-then-get-by-val 6.1171+-0.1334 ? 6.1392+-0.0597 ? int-or-other-neg-zero-then-get-by-val 26.2350+-0.3389 ? 26.9834+-0.5726 ? might be 1.0285x slower int-or-other-sub-then-get-by-val 5.8165+-0.0671 ? 5.9003+-0.1399 ? might be 1.0144x slower int-or-other-sub 5.1537+-0.1644 5.0305+-0.1514 might be 1.0245x faster int-overflow-local 5.8417+-0.2977 5.7538+-0.1523 might be 1.0153x faster Int16Array-alloc-long-lived 61.3978+-1.0606 61.0508+-1.0415 Int16Array-bubble-sort-with-byteLength 38.7104+-0.7951 38.4618+-0.2713 Int16Array-bubble-sort 38.4918+-0.9121 38.4597+-0.2528 Int16Array-load-int-mul 1.9250+-0.1057 1.8881+-0.1053 might be 1.0196x faster Int16Array-to-Int32Array-set 74.2353+-1.7058 ? 75.3610+-2.0762 ? might be 1.0152x slower Int32Array-alloc-large 36.1815+-0.8652 34.7300+-0.7144 might be 1.0418x faster Int32Array-alloc-long-lived 68.4501+-0.6730 ? 68.6372+-1.4367 ? Int32Array-alloc 3.9286+-0.2119 ? 3.9791+-0.1020 ? might be 1.0128x slower Int32Array-Int8Array-view-alloc 9.4392+-0.3028 8.8750+-0.4898 might be 1.0636x faster int52-spill 8.5757+-0.2565 8.5333+-0.3229 Int8Array-alloc-long-lived 55.4685+-1.2928 ? 55.5698+-0.8696 ? Int8Array-load-with-byteLength 4.7252+-0.1230 4.6815+-0.0478 Int8Array-load 4.7417+-0.1141 4.6512+-0.1053 might be 1.0195x faster integer-divide 14.3812+-0.2352 14.2275+-0.1601 might be 1.0108x faster integer-modulo 2.7552+-0.1871 2.7029+-0.2553 might be 1.0194x faster large-int-captured 10.9674+-0.6232 ? 11.0304+-0.3842 ? large-int-neg 20.9854+-0.6015 ? 21.1737+-0.4243 ? large-int 18.8331+-1.0127 ? 19.0234+-0.6106 ? might be 1.0101x slower logical-not 6.0604+-0.0859 ? 6.1042+-0.3601 ? lots-of-fields 15.6068+-0.1652 15.5110+-0.2727 make-indexed-storage 3.9894+-0.1396 3.9242+-0.4644 might be 1.0166x faster make-rope-cse 5.4882+-0.2882 ? 5.5870+-0.1430 ? might be 1.0180x slower marsaglia-larger-ints 55.1172+-0.3675 ? 55.7508+-1.3567 ? might be 1.0115x slower marsaglia-osr-entry 28.1013+-0.8797 27.6476+-0.1356 might be 1.0164x faster max-boolean 3.2947+-0.1979 3.2315+-0.1191 might be 1.0195x faster method-on-number 23.5540+-1.2433 ? 23.7208+-1.1244 ? min-boolean 3.2455+-0.1040 3.1715+-0.0855 might be 1.0233x faster minus-boolean-double 4.1417+-0.1814 ? 4.1778+-0.1353 ? minus-boolean 3.2781+-0.4240 3.2557+-0.0689 misc-strict-eq 53.9434+-0.7476 53.3035+-0.3721 might be 1.0120x faster mod-boolean-double 11.6533+-0.2820 11.6196+-0.3271 mod-boolean 8.9221+-0.1630 ? 8.9509+-0.1189 ? mul-boolean-double 4.7979+-0.1736 4.7505+-0.1097 mul-boolean 3.4223+-0.0653 3.4182+-0.0568 neg-boolean 4.1777+-0.0594 4.1722+-0.1165 negative-zero-divide 0.4479+-0.0740 ? 0.4669+-0.0968 ? might be 1.0425x slower negative-zero-modulo 0.4673+-0.0937 ? 0.4730+-0.1150 ? might be 1.0121x slower negative-zero-negate 0.4266+-0.0856 0.3928+-0.0241 might be 1.0859x faster nested-function-parsing 33.2473+-0.5381 32.8270+-0.9728 might be 1.0128x faster new-array-buffer-dead 3.7063+-0.2036 ? 3.7841+-0.1783 ? might be 1.0210x slower new-array-buffer-push 9.6901+-0.2825 ^ 9.1895+-0.1401 ^ definitely 1.0545x faster new-array-dead 15.5812+-2.4400 ? 15.6038+-0.5996 ? new-array-push 6.5715+-0.3290 6.3920+-0.2131 might be 1.0281x faster number-test 4.0695+-0.1911 ? 4.0749+-0.1433 ? object-closure-call 7.6845+-0.4593 ? 7.7094+-0.1592 ? object-test 4.2998+-0.1516 ? 4.3018+-0.0866 ? obvious-sink-pathology-taken 174.4190+-5.1509 171.3528+-2.9052 might be 1.0179x faster obvious-sink-pathology 165.2239+-6.4436 163.7383+-4.6858 obviously-elidable-new-object 49.6196+-0.6834 ? 49.6628+-0.9180 ? plus-boolean-arith 3.2413+-0.1056 3.1740+-0.0520 might be 1.0212x faster plus-boolean-double 4.1500+-0.0897 4.1207+-0.1255 plus-boolean 3.0500+-0.0355 ? 3.1431+-0.1162 ? might be 1.0305x slower poly-chain-access-different-prototypes-simple 3.7668+-0.1322 ? 3.8098+-0.1226 ? might be 1.0114x slower poly-chain-access-different-prototypes 2.8813+-0.2545 ! 3.3515+-0.1549 ! definitely 1.1632x slower poly-chain-access-simpler 3.7610+-0.0598 ? 3.8264+-0.1405 ? might be 1.0174x slower poly-chain-access 3.1686+-0.1451 ? 3.2062+-0.1646 ? might be 1.0119x slower poly-stricteq 68.4530+-0.3885 ? 69.1483+-1.5238 ? might be 1.0102x slower polymorphic-array-call 2.2172+-0.2386 ? 2.3234+-0.1648 ? might be 1.0479x slower polymorphic-get-by-id 4.1441+-0.0614 4.1278+-0.1289 polymorphic-put-by-id 39.3367+-7.2393 37.6735+-1.7495 might be 1.0441x faster polymorphic-structure 21.2762+-1.9365 ? 21.7947+-2.0781 ? might be 1.0244x slower polyvariant-monomorphic-get-by-id 11.3228+-0.1237 ? 11.3607+-0.3130 ? proto-getter-access 12.9315+-0.6332 ? 12.9413+-0.1778 ? put-by-id-replace-and-transition 11.0488+-0.2998 ? 11.1098+-0.4531 ? put-by-id-slightly-polymorphic 3.5402+-0.1324 3.5042+-0.2198 might be 1.0103x faster put-by-id 17.7447+-0.2162 ? 18.0435+-0.5401 ? might be 1.0168x slower put-by-val-direct 0.7283+-0.1142 ? 0.7422+-0.1041 ? might be 1.0192x slower put-by-val-large-index-blank-indexing-type 7.8495+-0.5868 ? 7.9821+-0.3121 ? might be 1.0169x slower put-by-val-machine-int 3.2039+-0.1218 3.1982+-0.1970 rare-osr-exit-on-local 18.3172+-0.4160 18.1672+-0.1237 register-pressure-from-osr 26.8782+-0.6159 26.5682+-0.2445 might be 1.0117x faster setter 6.4027+-0.1652 ? 6.4393+-0.1288 ? simple-activation-demo 32.6480+-0.3185 ? 32.8755+-0.3082 ? simple-getter-access 18.1043+-1.0184 18.0257+-0.3345 simple-poly-call-nested 21.3599+-1.8930 ? 22.1334+-0.2936 ? might be 1.0362x slower simple-poly-call 1.6030+-0.1099 ? 1.6035+-0.0968 ? sin-boolean 24.9792+-4.3823 24.8759+-4.3721 sinkable-new-object-dag 94.1278+-0.7144 92.9161+-2.6115 might be 1.0130x faster sinkable-new-object-taken 68.2675+-1.2393 ? 69.8903+-5.2258 ? might be 1.0238x slower sinkable-new-object 52.7207+-1.2223 51.7943+-0.7228 might be 1.0179x faster slow-array-profile-convergence 3.7192+-0.2951 3.4830+-0.2731 might be 1.0678x faster slow-convergence 4.3657+-0.2040 4.3455+-0.3224 sparse-conditional 1.5207+-0.1649 1.4970+-0.1032 might be 1.0158x faster splice-to-remove 21.1331+-0.5643 ? 22.8280+-1.2165 ? might be 1.0802x slower string-char-code-at 19.8638+-0.1339 19.7661+-0.7578 string-concat-object 2.7579+-0.2920 2.7148+-0.4670 might be 1.0159x faster string-concat-pair-object 2.6023+-0.1942 ? 2.6126+-0.2396 ? string-concat-pair-simple 15.5604+-0.3052 15.4670+-0.4702 string-concat-simple 15.4633+-0.3101 ? 15.7349+-0.7227 ? might be 1.0176x slower string-cons-repeat 10.4015+-0.3503 10.3836+-0.3255 string-cons-tower 9.5858+-0.2621 ? 9.7407+-0.5111 ? might be 1.0162x slower string-equality 22.2062+-0.3310 22.1160+-0.3402 string-get-by-val-big-char 9.5818+-0.3638 ? 9.6310+-0.7672 ? string-get-by-val-out-of-bounds-insane 5.6357+-0.1490 5.5009+-0.3439 might be 1.0245x faster string-get-by-val-out-of-bounds 6.7587+-0.1007 6.7050+-0.1130 string-get-by-val 4.7222+-0.0966 4.7095+-0.0940 string-hash 2.6141+-0.0519 ? 2.7018+-0.1693 ? might be 1.0336x slower string-long-ident-equality 18.2690+-0.2096 ? 18.3013+-0.3081 ? string-repeat-arith 40.3123+-0.5808 39.8430+-0.7381 might be 1.0118x faster string-sub 80.2155+-2.9314 ? 80.7030+-1.5687 ? string-test 4.0775+-0.1311 4.0560+-0.1082 string-var-equality 43.5605+-0.1799 43.5302+-0.3944 structure-hoist-over-transitions 3.3590+-0.4433 3.3265+-0.1695 substring-concat-weird 53.0084+-0.7586 52.8245+-0.9739 substring-concat 56.1563+-0.2732 55.5636+-1.8459 might be 1.0107x faster substring 62.2142+-0.7411 61.3459+-1.0810 might be 1.0142x faster switch-char-constant 3.3317+-0.1972 3.2523+-0.1383 might be 1.0244x faster switch-char 7.8472+-0.0787 ! 8.1863+-0.0621 ! definitely 1.0432x slower switch-constant 12.3555+-1.8987 12.0934+-2.0126 might be 1.0217x faster switch-string-basic-big-var 21.3031+-2.2886 ? 21.3423+-3.1261 ? switch-string-basic-big 21.3156+-5.3796 20.1611+-0.8941 might be 1.0573x faster switch-string-basic-var 26.2910+-1.6546 ? 26.8113+-1.5265 ? might be 1.0198x slower switch-string-basic 18.5315+-0.8406 ? 19.2083+-3.2429 ? might be 1.0365x slower switch-string-big-length-tower-var 25.3953+-0.6860 25.2682+-0.3789 switch-string-length-tower-var 19.8730+-0.2364 19.6832+-0.1263 switch-string-length-tower 14.5559+-0.3457 ? 14.6617+-0.4330 ? switch-string-short 14.7220+-0.4685 ? 15.0652+-0.4922 ? might be 1.0233x slower switch 16.2682+-3.3638 ? 16.7345+-4.1008 ? might be 1.0287x slower tear-off-arguments-simple 3.2314+-0.2424 ? 3.2357+-0.3333 ? tear-off-arguments 4.9818+-0.2158 4.8538+-0.1832 might be 1.0264x faster temporal-structure 17.2350+-0.1629 17.1755+-0.2550 to-int32-boolean 20.5250+-0.4193 ? 20.8517+-0.2475 ? might be 1.0159x slower undefined-property-access 479.7628+-23.8299 469.1871+-1.7661 might be 1.0225x faster undefined-test 4.2167+-0.0933 ? 4.2476+-0.0722 ? unprofiled-licm 27.3610+-0.5807 ? 27.5142+-0.7061 ? weird-inlining-const-prop 2.4694+-0.0737 ? 2.4830+-0.0720 ? <arithmetic> 22.8357+-0.1630 22.7493+-0.0993 might be 1.0038x faster <geometric> * 10.5738+-0.0315 10.5593+-0.0420 might be 1.0014x faster <harmonic> 5.3103+-0.0695 5.2735+-0.1059 might be 1.0070x faster Baseline UndefinedFunc AsmBench: bigfib.cpp 677.2413+-8.5516 ? 678.8892+-8.2028 ? cray.c 686.0812+-5.8876 ? 688.1118+-6.1636 ? dry.c 655.3725+-2.5204 652.7973+-9.2439 FloatMM.c 950.4007+-1.3924 ? 951.0965+-4.9512 ? gcc-loops.cpp 5824.1706+-16.5732 5823.1967+-29.6393 n-body.c 1669.9743+-1.4183 ? 1673.0967+-3.0915 ? Quicksort.c 583.9355+-6.4283 ? 586.3626+-10.1923 ? stepanov_container.cpp 4868.7386+-48.3223 ? 4874.4932+-32.3213 ? Towers.c 396.2017+-0.9726 ? 397.9208+-3.3761 ? <arithmetic> 1812.4574+-6.9573 ? 1813.9961+-6.0479 ? might be 1.0008x slower <geometric> * 1136.7916+-2.7232 ? 1138.4969+-4.4601 ? might be 1.0015x slower <harmonic> 839.1828+-1.9823 ? 840.8905+-3.8372 ? might be 1.0020x slower Baseline UndefinedFunc CompressionBench: huffman 645.7045+-9.8187 636.0800+-16.3046 might be 1.0151x faster arithmetic-simple 574.9868+-2.4483 ? 577.2659+-1.6462 ? arithmetic-precise 439.5007+-15.1951 431.7443+-1.4635 might be 1.0180x faster arithmetic-complex-precise 432.6166+-6.4601 431.6287+-1.6404 arithmetic-precise-order-0 649.0367+-11.3296 649.0328+-10.8584 arithmetic-precise-order-1 472.3568+-6.3980 464.8635+-7.7389 might be 1.0161x faster arithmetic-precise-order-2 521.7921+-6.8654 ? 532.1755+-16.5204 ? might be 1.0199x slower arithmetic-simple-order-1 595.2588+-7.7163 594.7711+-1.9062 arithmetic-simple-order-2 670.2905+-17.3928 665.9950+-5.2487 lz-string 437.6993+-8.0156 ? 438.8642+-20.4113 ? <arithmetic> 543.9243+-3.4933 542.2421+-1.2751 might be 1.0031x faster <geometric> * 536.3813+-3.3528 534.6558+-1.3823 might be 1.0032x faster <harmonic> 528.8976+-3.3763 527.0804+-1.6405 might be 1.0034x faster Baseline UndefinedFunc All benchmarks: <arithmetic> 137.1961+-0.1912 136.8283+-0.2732 might be 1.0027x faster <geometric> 17.7018+-0.0426 17.6701+-0.0508 might be 1.0018x faster <harmonic> 4.4472+-0.0240 4.4357+-0.0731 might be 1.0026x faster Baseline UndefinedFunc Geomean of preferred means: <scaled-result> 88.0015+-0.1239 87.9294+-0.1003 might be 1.0008x faster
Geoffrey Garen
Comment 8 2014-12-08 16:10:57 PST
Comment on attachment 242853 [details] Patch using undefined function class for missing getters and setters View in context: https://bugs.webkit.org/attachment.cgi?id=242853&action=review r=me with some fixes > Source/JavaScriptCore/runtime/GetterSetter.cpp:81 > +bool GetterSetter::isGetterNull() const > +{ > + return m_getter.get() == jsCast<JSObject*>(structure()->globalObject()->undefinedFunction()); > +} > + > +bool GetterSetter::isSetterNull() const > +{ > + return m_setter.get() == jsCast<JSObject*>(structure()->globalObject()->undefinedFunction()); > +} I think this would be better as a type check: jsDynamicCast<UndefinedFunction*>(thingy). You don't need to change the GetterSetter structure to be per-global-object. > Source/JavaScriptCore/runtime/UndefinedFunction.h:33 > +class UndefinedFunction : public InternalFunction { This needs a more purpose-specific name. Something like "NullGetterFunction". It's not really valid to use this as a general-purpose function.
Build Bot
Comment 9 2014-12-08 16:25:04 PST
Comment on attachment 242853 [details] Patch using undefined function class for missing getters and setters Attachment 242853 [details] did not pass mac-ews (mac): Output: http://webkit-queues.appspot.com/results/5257833020915712 New failing tests: ietestcenter/Javascript/11.1.5_6-3-2.html ietestcenter/Javascript/15.2.3.3-4-3.html js/dom/getOwnPropertyDescriptor.html ietestcenter/Javascript/11.1.5_7-3-2.html
Build Bot
Comment 10 2014-12-08 16:25:09 PST
Created attachment 242861 [details] Archive of layout-test-results from ews100 for mac-mountainlion The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews100 Port: mac-mountainlion Platform: Mac OS X 10.8.5
Geoffrey Garen
Comment 11 2014-12-08 16:33:26 PST
Comment on attachment 242853 [details] Patch using undefined function class for missing getters and setters Looks like this is failing tests.
Michael Saboff
Comment 12 2014-12-08 16:41:44 PST
(In reply to comment #9) > Comment on attachment 242853 [details] > Patch using undefined function class for missing getters and setters > > Attachment 242853 [details] did not pass mac-ews (mac): > Output: http://webkit-queues.appspot.com/results/5257833020915712 > > New failing tests: > ietestcenter/Javascript/11.1.5_6-3-2.html > ietestcenter/Javascript/15.2.3.3-4-3.html > js/dom/getOwnPropertyDescriptor.html > ietestcenter/Javascript/11.1.5_7-3-2.html I found this after posting. The fix is to use isGetterNull() and isSetterNull() in 2 places each in PropertyDescriptor.cpp. I verified all other uses of GetterSetter::getter() and ::setter() to check that they are valid.
Michael Saboff
Comment 13 2014-12-09 03:34:15 PST
Created attachment 242906 [details] Patch with suggested changes and fix for test failures
Michael Saboff
Comment 14 2014-12-09 11:52:02 PST
Csaba Osztrogonác
Comment 15 2014-12-10 04:52:34 PST
Note You need to log in before you can comment on or make changes to this bug.