Bug 144945

Summary: The liveness pruning done by ObjectAllocationSinkingPhase ignores the possibility of an object's bytecode liveness being longer than its DFG liveness
Product: WebKit Reporter: Filip Pizlo <fpizlo>
Component: JavaScriptCoreAssignee: Filip Pizlo <fpizlo>
Status: RESOLVED FIXED    
Severity: Normal CC: barraclough, basile_clement, benjamin, commit-queue, ggaren, mark.lam, mhahnenb, mmirman, msaboff, nrotem, oliver, saam, sam
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Bug Depends on: 144853    
Bug Blocks:    
Attachments:
Description Flags
the patch msaboff: review+

Filip Pizlo
Reported 2015-05-12 21:57:30 PDT
This fails every time, because in the continuation after the ternary expression in foo(), we have materialized the activation if p was true but we haven't done so if p was false. We think that we don't need to place a materialization point on the false path (or to avoid sinking entirely) because we don't realize that the activation is still live after the ternary. We don't know that it's live because we're using DFG liveness instead of both DFG and bytecode liveness. function foo(p) { var result = 0; var o = {valueOf: function() { result = 1; }}; var q = {f: p ? o : 42}; var tmp = q.f + 1; return result; } noInline(foo); for (var i = 0; i < 10000; ++i) { var result = foo(false); if (result !== 0) throw "Error: bad result: " + result; } var result = foo(true); if (result !== 1) throw "Error: bad result at end: " + result;
Attachments
the patch (23.61 KB, patch)
2015-05-13 12:54 PDT, Filip Pizlo
msaboff: review+
Filip Pizlo
Comment 1 2015-05-12 21:58:51 PDT
Bugs like this make me question why we even make it possible to ask for DFG liveness without that answer also telling us the bytecode liveness.
Filip Pizlo
Comment 2 2015-05-12 21:59:37 PDT
(In reply to comment #1) > Bugs like this make me question why we even make it possible to ask for DFG > liveness without that answer also telling us the bytecode liveness. Never mind, that's a dumb observation. The most important client of DFG liveness is AI, which uses it for pruning and doesn't care about bytecode liveness at all.
Filip Pizlo
Comment 3 2015-05-13 11:01:35 PDT
Another test: var global = null; function foo(p, q) { var o = {f:42}; if (p) global = o; var tmp = q + 1; return o.f + tmp; } noInline(foo); var lastObject = null; function validateEscape(when) { if (global === lastObject) throw "Error: bad value in global " + when + ", identical to lastObject."; if (global === null || !(typeof global == "object")) throw "Error: bad value in global " + when + ": it's not an object."; if (global.f != 42) throw "Error: bad value in global " + when + ": f isn't 42, it's: " + global.f; lastObject = global; global = null; } for (var i = 0; i < 10000; ++i) { var escape = !!(i & 1); var result = foo(escape, 42); if (result != 42 + 42 + 1) throw "Error: bad result: " + result; if (escape) validateEscape("in loop"); else if (global !== null) throw "Error: bad value in global: " + global; } var result = foo(true, 2147483647); if (result != 42 + 2147483647 + 1) throw "Error: bad result at end: " + result; validateEscape("at end");
Filip Pizlo
Comment 4 2015-05-13 12:54:59 PDT
Created attachment 253051 [details] the patch
Filip Pizlo
Comment 5 2015-05-13 12:55:19 PDT
Comment on attachment 253051 [details] the patch Clearing r? because I should probably perf test this very carefully.
WebKit Commit Bot
Comment 6 2015-05-13 12:57:06 PDT
Attachment 253051 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGCombinedLiveness.cpp:47: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGCombinedLiveness.h:37: The parameter name "graph" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/dfg/DFGCombinedLiveness.h:37: The parameter name "block" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 3 in 10 files If any of these errors are false positives, please file a bug against check-webkit-style.
Filip Pizlo
Comment 7 2015-05-13 13:29:38 PDT
Looks like I didn't break anything too badly. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r184288) "FixThingies" at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc (r184288) Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds. TipOfTree FixThingies SunSpider: 3d-cube 5.2002+-0.1954 5.1626+-0.0588 3d-morph 6.0260+-0.6010 ? 6.0988+-0.5010 ? might be 1.0121x slower 3d-raytrace 6.5802+-0.1433 6.5634+-0.1327 access-binary-trees 2.3208+-0.1105 ? 2.4371+-0.1192 ? might be 1.0501x slower access-fannkuch 5.9623+-0.1081 5.9535+-0.1777 access-nbody 3.0112+-0.1184 ? 3.1295+-0.3601 ? might be 1.0393x slower access-nsieve 3.2177+-0.1013 3.1611+-0.1231 might be 1.0179x faster bitops-3bit-bits-in-byte 1.6567+-0.1326 1.5861+-0.0234 might be 1.0445x faster bitops-bits-in-byte 3.5299+-0.3339 3.4894+-0.2189 might be 1.0116x faster bitops-bitwise-and 2.2087+-0.2250 ? 2.5187+-0.4311 ? might be 1.1403x slower bitops-nsieve-bits 3.5922+-0.2361 3.4156+-0.0677 might be 1.0517x faster controlflow-recursive 2.2665+-0.0443 ? 2.3359+-0.1300 ? might be 1.0306x slower crypto-aes 4.6857+-0.3360 4.4684+-0.1605 might be 1.0486x faster crypto-md5 3.2595+-1.0262 2.8897+-0.2822 might be 1.1280x faster crypto-sha1 2.6503+-0.1438 ? 2.7703+-0.2007 ? might be 1.0453x slower date-format-tofte 9.4430+-0.2850 ? 9.8151+-0.3539 ? might be 1.0394x slower date-format-xparb 5.8045+-0.1707 ? 5.9838+-0.4443 ? might be 1.0309x slower math-cordic 3.1745+-0.1156 3.1473+-0.1715 math-partial-sums 5.5549+-0.3351 5.4035+-0.3497 might be 1.0280x faster math-spectral-norm 2.0540+-0.1288 2.0213+-0.0896 might be 1.0161x faster regexp-dna 7.4607+-0.7127 ? 8.0748+-1.3540 ? might be 1.0823x slower string-base64 4.9790+-0.7554 ? 5.4877+-1.2846 ? might be 1.1022x slower string-fasta 6.7468+-0.1580 ? 7.0565+-1.0705 ? might be 1.0459x slower string-tagcloud 9.4782+-1.0057 ? 9.7760+-1.4646 ? might be 1.0314x slower string-unpack-code 19.7032+-0.4643 ? 20.1433+-1.1827 ? might be 1.0223x slower string-validate-input 5.1042+-0.2611 ? 5.2923+-0.4773 ? might be 1.0369x slower <arithmetic> 5.2181+-0.0739 ? 5.3147+-0.0931 ? might be 1.0185x slower TipOfTree FixThingies LongSpider: 3d-cube 877.7155+-7.7725 ? 879.3256+-9.8567 ? 3d-morph 1528.7699+-3.5887 ? 1532.7155+-15.4735 ? 3d-raytrace 729.0023+-3.0880 727.5542+-7.0702 access-binary-trees 1012.6830+-8.9830 1011.6504+-12.0866 access-fannkuch 327.4650+-9.8020 325.8355+-12.3228 access-nbody 619.5641+-7.6030 617.2178+-2.4351 access-nsieve 481.8691+-5.8999 ? 482.7452+-7.1025 ? bitops-3bit-bits-in-byte 46.4827+-2.3200 45.3466+-1.6033 might be 1.0251x faster bitops-bits-in-byte 105.3243+-5.1140 102.3203+-3.7074 might be 1.0294x faster bitops-nsieve-bits 423.1814+-4.9988 419.5937+-2.3497 controlflow-recursive 501.8440+-9.6259 ^ 483.7972+-0.9081 ^ definitely 1.0373x faster crypto-aes 703.2701+-8.8848 ? 706.6485+-6.8640 ? crypto-md5 526.7107+-11.6543 520.2538+-18.7438 might be 1.0124x faster crypto-sha1 594.2837+-4.4859 ? 595.4454+-6.3655 ? date-format-tofte 734.2985+-11.5387 ! 761.7472+-14.6160 ! definitely 1.0374x slower date-format-xparb 792.1957+-19.2447 ? 797.9488+-35.6311 ? hash-map 190.6460+-36.7466 169.8418+-2.8360 might be 1.1225x faster math-cordic 590.9899+-4.2658 588.1420+-3.7914 math-partial-sums 503.8551+-1.9292 ? 506.0948+-3.2050 ? math-spectral-norm 565.5621+-2.5219 563.8293+-0.8849 string-base64 376.2363+-5.5440 ? 377.7590+-5.9596 ? string-fasta 438.1228+-2.9249 437.2507+-7.1759 string-tagcloud 200.5420+-3.1439 195.5924+-2.5285 might be 1.0253x faster <geometric> 454.7923+-3.0971 450.9237+-0.9704 might be 1.0086x faster TipOfTree FixThingies V8Spider: crypto 56.6870+-2.4499 55.6864+-2.4727 might be 1.0180x faster deltablue 93.5605+-2.2655 ? 96.5793+-3.4195 ? might be 1.0323x slower earley-boyer 44.6254+-0.9218 ? 44.7498+-1.0889 ? raytrace 44.0024+-3.6785 40.0538+-2.1708 might be 1.0986x faster regexp 83.1465+-1.6861 82.3719+-2.7861 richards 81.0850+-1.1314 80.4755+-0.9369 splay 40.5419+-1.6954 40.4784+-1.6453 <geometric> 60.1088+-0.7768 59.2981+-0.6953 might be 1.0137x faster TipOfTree FixThingies Octane: encrypt 0.20451+-0.00286 ? 0.20530+-0.00175 ? decrypt 3.56218+-0.03050 ? 3.57375+-0.02496 ? deltablue x2 0.20558+-0.00170 ? 0.20604+-0.00080 ? earley 0.47618+-0.00437 0.47079+-0.00261 might be 1.0115x faster boyer 6.65188+-0.06330 6.61516+-0.04011 navier-stokes x2 5.21015+-0.04564 5.17201+-0.00209 raytrace x2 1.28292+-0.06000 ? 1.29614+-0.04974 ? might be 1.0103x slower richards x2 0.12293+-0.00155 0.12277+-0.00193 splay x2 0.40118+-0.00394 ^ 0.39235+-0.00370 ^ definitely 1.0225x faster regexp x2 32.09727+-0.36852 31.69224+-0.20697 might be 1.0128x faster pdfjs x2 42.60035+-0.22205 ? 42.75205+-0.29456 ? mandreel x2 50.02782+-0.57827 ? 50.18157+-0.53272 ? gbemu x2 41.80266+-0.35636 41.47489+-0.48345 closure 0.56185+-0.00518 0.55754+-0.00435 jquery 7.09941+-0.03806 ? 7.12974+-0.14307 ? box2d x2 12.42189+-0.09692 ? 12.46614+-0.13084 ? zlib x2 391.42505+-13.83073 380.86030+-20.05847 might be 1.0277x faster typescript x2 818.06340+-14.28048 ? 824.65267+-10.25028 ? <geometric> 6.67644+-0.02880 6.65202+-0.03107 might be 1.0037x faster TipOfTree FixThingies Kraken: ai-astar 278.905+-2.087 278.518+-2.541 audio-beat-detection 106.425+-0.828 ? 107.735+-3.089 ? might be 1.0123x slower audio-dft 118.818+-2.199 ? 120.898+-1.913 ? might be 1.0175x slower audio-fft 82.237+-3.705 ? 83.776+-7.106 ? might be 1.0187x slower audio-oscillator 78.821+-1.964 ? 79.478+-3.156 ? imaging-darkroom 105.346+-2.840 ? 105.895+-2.901 ? imaging-desaturate 63.197+-0.645 ? 63.481+-1.585 ? imaging-gaussian-blur 112.037+-1.811 ? 113.156+-6.922 ? json-parse-financial 45.324+-1.601 ? 47.564+-2.160 ? might be 1.0494x slower json-stringify-tinderbox 28.953+-1.076 28.893+-1.469 stanford-crypto-aes 57.029+-0.665 ? 57.366+-0.963 ? stanford-crypto-ccm 51.792+-1.926 ? 52.014+-1.157 ? stanford-crypto-pbkdf2 120.829+-1.686 119.795+-2.178 stanford-crypto-sha256-iterative 49.056+-1.068 ? 49.234+-1.831 ? <arithmetic> 92.769+-0.607 ? 93.415+-0.957 ? might be 1.0070x slower TipOfTree FixThingies JSRegress: abs-boolean 2.7096+-0.0921 ? 2.8042+-0.2264 ? might be 1.0349x slower adapt-to-double-divide 16.7837+-0.5438 ? 16.9374+-0.3467 ? aliased-arguments-getbyval 1.2898+-0.0764 ? 1.3322+-0.0778 ? might be 1.0329x slower allocate-big-object 2.8427+-0.0768 ! 3.0319+-0.1038 ! definitely 1.0666x slower arguments-named-and-reflective 12.9092+-1.2149 12.1196+-0.4253 might be 1.0651x faster arguments-out-of-bounds 14.9361+-0.2582 ? 15.0345+-0.3947 ? arguments-strict-mode 11.3559+-1.1414 10.4328+-0.3548 might be 1.0885x faster arguments 9.2830+-0.2959 ? 9.4711+-0.8595 ? might be 1.0203x slower arity-mismatch-inlining 0.9838+-0.1567 0.9397+-0.1039 might be 1.0470x faster array-access-polymorphic-structure 7.1007+-0.5847 ? 7.1732+-0.9522 ? might be 1.0102x slower array-nonarray-polymorhpic-access 34.0080+-1.1068 ? 35.9552+-2.3922 ? might be 1.0573x slower array-prototype-every 87.2562+-1.5596 86.0218+-2.6685 might be 1.0144x faster array-prototype-forEach 83.9061+-2.4206 ? 84.9458+-4.4847 ? might be 1.0124x slower array-prototype-map 92.7231+-2.8649 92.3887+-4.1060 array-prototype-some 85.6057+-2.7703 84.2609+-1.0447 might be 1.0160x faster array-splice-contiguous 40.8750+-0.5267 ? 42.5443+-2.6687 ? might be 1.0408x slower array-with-double-add 4.2040+-0.3369 4.1770+-0.1603 array-with-double-increment 3.2557+-0.0708 ? 3.4231+-0.3083 ? might be 1.0514x slower array-with-double-mul-add 4.9997+-0.0505 4.9869+-0.0421 array-with-double-sum 3.4373+-0.3984 3.3103+-0.1026 might be 1.0384x faster array-with-int32-add-sub 7.2574+-1.0439 6.7214+-0.0242 might be 1.0798x faster array-with-int32-or-double-sum 3.3897+-0.1306 ? 3.6208+-0.3566 ? might be 1.0682x slower ArrayBuffer-DataView-alloc-large-long-lived 34.3132+-2.3851 34.1184+-1.4965 ArrayBuffer-DataView-alloc-long-lived 14.8111+-1.5721 ? 16.6681+-1.7111 ? might be 1.1254x slower ArrayBuffer-Int32Array-byteOffset 3.8852+-0.1721 3.8393+-0.0877 might be 1.0119x faster ArrayBuffer-Int8Array-alloc-large-long-lived 34.4714+-1.4434 32.7334+-1.3703 might be 1.0531x faster ArrayBuffer-Int8Array-alloc-long-lived-buffer 25.5635+-2.2876 ? 25.6277+-1.5657 ? ArrayBuffer-Int8Array-alloc-long-lived 14.4342+-1.5188 14.0090+-1.5547 might be 1.0304x faster ArrayBuffer-Int8Array-alloc 11.7201+-1.8594 11.0768+-0.7907 might be 1.0581x faster asmjs_bool_bug 7.7161+-0.1361 ? 8.0187+-0.3511 ? might be 1.0392x slower assign-custom-setter-polymorphic 3.1903+-0.0696 ? 3.3884+-0.1917 ? might be 1.0621x slower assign-custom-setter 4.5389+-0.1772 ? 4.5686+-0.2409 ? basic-set 8.6403+-0.5726 ? 8.8457+-0.6135 ? might be 1.0238x slower big-int-mul 4.0225+-0.0907 ? 4.1574+-0.5099 ? might be 1.0335x slower boolean-test 3.2513+-0.2935 3.0396+-0.0221 might be 1.0697x faster branch-fold 3.7662+-0.0947 ? 3.7743+-0.0374 ? branch-on-string-as-boolean 19.6534+-1.2638 19.1562+-0.6239 might be 1.0260x faster by-val-generic 8.5334+-0.3845 8.3252+-0.2105 might be 1.0250x faster call-spread-apply 29.9347+-1.3392 ? 30.3003+-1.7595 ? might be 1.0122x slower call-spread-call 25.0193+-0.5557 ? 25.7920+-2.2825 ? might be 1.0309x slower captured-assignments 0.4434+-0.0186 0.4411+-0.0251 cast-int-to-double 5.2435+-0.0345 ? 5.2999+-0.1066 ? might be 1.0108x slower cell-argument 8.6821+-0.2872 8.5294+-0.1990 might be 1.0179x faster cfg-simplify 2.9832+-0.3516 2.8936+-0.2327 might be 1.0310x faster chain-getter-access 9.1381+-0.1679 ? 9.2170+-0.1734 ? cmpeq-obj-to-obj-other 11.6123+-0.6601 ? 11.7586+-1.1263 ? might be 1.0126x slower constant-test 5.1036+-0.4346 4.9788+-0.1448 might be 1.0251x faster create-lots-of-functions 11.7119+-0.4564 ? 12.3462+-1.2897 ? might be 1.0542x slower DataView-custom-properties 40.3694+-1.3201 38.1027+-1.7055 might be 1.0595x faster deconstructing-parameters-overridden-by-function 0.5385+-0.0385 ? 0.5739+-0.0634 ? might be 1.0657x slower delay-tear-off-arguments-strictmode 14.3512+-0.5061 14.1577+-0.3646 might be 1.0137x faster deltablue-varargs 203.8500+-3.0923 203.2452+-2.1955 destructuring-arguments 17.4195+-0.8704 ? 17.8844+-0.9739 ? might be 1.0267x slower destructuring-swap 5.0193+-0.0799 5.0167+-0.0688 direct-arguments-getbyval 1.3413+-0.1559 ? 1.4492+-0.3503 ? might be 1.0805x slower div-boolean-double 5.2252+-0.0264 ? 5.4052+-0.2918 ? might be 1.0345x slower div-boolean 7.8058+-0.0310 7.7855+-0.0280 double-get-by-val-out-of-bounds 4.8037+-0.4936 4.6004+-0.1056 might be 1.0442x faster double-pollution-getbyval 9.0015+-0.1665 8.9053+-0.0896 might be 1.0108x faster double-pollution-putbyoffset 4.3126+-0.1390 ? 4.3324+-0.0792 ? double-to-int32-typed-array-no-inline 2.3341+-0.0779 2.3092+-0.0563 might be 1.0108x faster double-to-int32-typed-array 2.0549+-0.2512 2.0537+-0.1402 double-to-uint32-typed-array-no-inline 2.3894+-0.1298 ? 2.3966+-0.1326 ? double-to-uint32-typed-array 2.0929+-0.0592 ? 2.1495+-0.2429 ? might be 1.0271x slower elidable-new-object-dag 45.0874+-2.3001 43.0749+-1.5545 might be 1.0467x faster elidable-new-object-roflcopter 44.4360+-1.0343 ? 45.0785+-1.5143 ? might be 1.0145x slower elidable-new-object-then-call 39.4447+-1.4320 38.9660+-1.1205 might be 1.0123x faster elidable-new-object-tree 46.9416+-2.3451 46.2319+-1.6173 might be 1.0154x faster empty-string-plus-int 5.5490+-0.1459 5.4898+-0.1299 might be 1.0108x faster emscripten-cube2hash 39.0153+-1.9658 38.2844+-1.4932 might be 1.0191x faster exit-length-on-plain-object 14.7779+-2.0146 ? 15.4621+-1.7696 ? might be 1.0463x slower external-arguments-getbyval 1.2557+-0.0656 ? 1.2998+-0.1204 ? might be 1.0351x slower external-arguments-putbyval 2.3207+-0.0789 ? 2.3293+-0.0455 ? fixed-typed-array-storage-var-index 1.2436+-0.0608 1.2380+-0.0410 fixed-typed-array-storage 0.9327+-0.1312 ? 0.9654+-0.1201 ? might be 1.0351x slower Float32Array-matrix-mult 4.7683+-0.5870 4.6217+-0.4980 might be 1.0317x faster Float32Array-to-Float64Array-set 53.4274+-1.1000 53.2842+-0.8842 Float64Array-alloc-long-lived 69.8285+-0.8786 ? 69.9957+-2.7974 ? Float64Array-to-Int16Array-set 71.4953+-0.7615 71.1650+-0.5572 fold-double-to-int 15.2241+-0.8217 14.6495+-0.2386 might be 1.0392x faster fold-get-by-id-to-multi-get-by-offset-rare-int 11.0651+-1.8670 ? 11.0787+-0.8949 ? fold-get-by-id-to-multi-get-by-offset 9.7816+-0.6196 9.6176+-0.7667 might be 1.0171x faster fold-multi-get-by-offset-to-get-by-offset 10.0097+-1.5695 8.9050+-0.5932 might be 1.1241x faster fold-multi-get-by-offset-to-poly-get-by-offset 9.5769+-1.7042 9.0180+-0.7634 might be 1.0620x faster fold-multi-put-by-offset-to-poly-put-by-offset 9.7798+-1.4422 8.8219+-0.9421 might be 1.1086x faster fold-multi-put-by-offset-to-put-by-offset 5.6980+-1.2535 ? 6.0759+-1.1212 ? might be 1.0663x slower fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 10.1307+-0.4033 9.7143+-0.3504 might be 1.0429x faster fold-put-by-id-to-multi-put-by-offset 10.7280+-1.7582 10.3071+-0.9325 might be 1.0408x faster fold-put-structure 4.5717+-0.5936 ? 7.0169+-1.8976 ? might be 1.5348x slower for-of-iterate-array-entries 4.9305+-0.3457 4.9153+-0.2616 for-of-iterate-array-keys 3.8199+-0.0876 ? 3.8544+-0.2335 ? for-of-iterate-array-values 3.9135+-0.3063 3.6631+-0.0346 might be 1.0684x faster fround 21.1193+-0.4045 20.9652+-0.5630 ftl-library-inlining-dataview 63.8012+-0.4122 ? 65.8792+-4.1671 ? might be 1.0326x slower ftl-library-inlining 88.6995+-30.7658 85.6090+-22.6925 might be 1.0361x faster function-dot-apply 2.0058+-0.0952 1.9510+-0.0198 might be 1.0281x faster function-test 3.0759+-0.1941 2.9670+-0.1097 might be 1.0367x faster function-with-eval 105.7041+-2.4907 105.3704+-2.3111 gcse-poly-get-less-obvious 18.3164+-1.3022 ? 19.5500+-1.3315 ? might be 1.0674x slower gcse-poly-get 20.8781+-1.5973 19.8683+-1.0693 might be 1.0508x faster gcse 4.4803+-0.1864 4.3312+-0.0684 might be 1.0344x faster get-by-id-bimorphic-check-structure-elimination-simple 3.0177+-0.3044 3.0052+-0.3384 get-by-id-bimorphic-check-structure-elimination 6.1653+-0.2388 6.0600+-0.1138 might be 1.0174x faster get-by-id-chain-from-try-block 7.8825+-1.5753 6.6751+-0.2693 might be 1.1809x faster get-by-id-check-structure-elimination 5.1842+-0.1153 ? 5.2090+-0.0852 ? get-by-id-proto-or-self 20.8125+-2.1444 19.8535+-2.4017 might be 1.0483x faster get-by-id-quadmorphic-check-structure-elimination-simple 3.2250+-0.0663 ? 3.2417+-0.1107 ? get-by-id-self-or-proto 19.2903+-1.7224 18.7735+-2.2376 might be 1.0275x faster get-by-val-out-of-bounds 4.4634+-0.1407 4.4378+-0.0960 get_callee_monomorphic 2.9116+-0.0886 2.8500+-0.0679 might be 1.0216x faster get_callee_polymorphic 3.6838+-0.0922 ? 3.8419+-0.2644 ? might be 1.0429x slower getter-no-activation 5.1432+-0.3113 5.1414+-0.3670 getter-richards 123.0626+-7.8790 ? 125.6263+-9.7132 ? might be 1.0208x slower getter 6.2517+-1.0268 5.9772+-0.7168 might be 1.0459x faster global-var-const-infer-fire-from-opt 1.0567+-0.1995 ? 1.1014+-0.2864 ? might be 1.0422x slower global-var-const-infer 0.8145+-0.0845 ? 0.9057+-0.1705 ? might be 1.1119x slower HashMap-put-get-iterate-keys 30.0799+-2.2486 29.3101+-1.8062 might be 1.0263x faster HashMap-put-get-iterate 31.6191+-1.4078 31.0134+-2.3315 might be 1.0195x faster HashMap-string-put-get-iterate 29.1099+-1.6051 ? 29.8998+-2.6990 ? might be 1.0271x slower hoist-make-rope 12.7408+-0.5222 12.4715+-1.1249 might be 1.0216x faster hoist-poly-check-structure-effectful-loop 5.0495+-0.2680 ? 5.8531+-1.0909 ? might be 1.1591x slower hoist-poly-check-structure 3.6109+-0.0323 ? 3.6587+-0.0688 ? might be 1.0132x slower imul-double-only 8.6145+-0.2234 ? 8.7050+-0.1434 ? might be 1.0105x slower imul-int-only 10.1133+-1.1096 10.0686+-0.6927 imul-mixed 8.5352+-0.0929 8.3557+-0.2494 might be 1.0215x faster in-four-cases 21.5441+-0.2742 ? 21.6818+-0.2344 ? in-one-case-false 10.5025+-0.4557 ? 10.7230+-0.6901 ? might be 1.0210x slower in-one-case-true 10.7112+-0.7501 ? 10.7629+-0.8133 ? in-two-cases 11.6860+-1.7088 ? 11.7684+-2.3183 ? indexed-properties-in-objects 3.2550+-0.3756 3.0996+-0.0398 might be 1.0501x faster infer-closure-const-then-mov-no-inline 4.2757+-0.4312 ? 4.8860+-0.5488 ? might be 1.1427x slower infer-closure-const-then-mov 20.0610+-0.5248 20.0321+-0.3632 infer-closure-const-then-put-to-scope-no-inline 11.0998+-0.1168 ? 11.1322+-0.0971 ? infer-closure-const-then-put-to-scope 23.4729+-1.4526 22.4580+-1.4721 might be 1.0452x faster infer-closure-const-then-reenter-no-inline 49.8625+-1.5666 48.2687+-0.4265 might be 1.0330x faster infer-closure-const-then-reenter 22.8731+-1.6263 ? 23.3676+-1.1336 ? might be 1.0216x slower infer-constant-global-property 3.6016+-0.0467 ? 3.7928+-0.2557 ? might be 1.0531x slower infer-constant-property 2.7472+-0.0406 ? 2.7668+-0.0814 ? infer-one-time-closure-ten-vars 12.5192+-0.3307 ? 13.4365+-1.4543 ? might be 1.0733x slower infer-one-time-closure-two-vars 12.7519+-0.9189 ? 12.7698+-0.9478 ? infer-one-time-closure 12.4278+-0.8935 ? 12.4939+-1.4325 ? infer-one-time-deep-closure 21.7373+-1.4895 21.4160+-1.0938 might be 1.0150x faster inline-arguments-access 4.7552+-0.4986 4.5232+-0.1346 might be 1.0513x faster inline-arguments-aliased-access 4.5222+-0.2276 ? 4.7197+-0.3916 ? might be 1.0437x slower inline-arguments-local-escape 4.6453+-0.3231 4.5836+-0.1700 might be 1.0135x faster inline-get-scoped-var 5.0977+-0.3568 4.8334+-0.2340 might be 1.0547x faster inlined-put-by-id-transition 11.1767+-0.5912 ? 11.9476+-0.4915 ? might be 1.0690x slower int-or-other-abs-then-get-by-val 4.9757+-0.1765 4.8644+-0.1099 might be 1.0229x faster int-or-other-abs-zero-then-get-by-val 16.9299+-0.8448 ? 17.4402+-1.0610 ? might be 1.0301x slower int-or-other-add-then-get-by-val 4.0545+-0.2774 4.0205+-0.1934 int-or-other-add 5.2563+-0.0374 ? 5.2611+-0.0339 ? int-or-other-div-then-get-by-val 4.1248+-0.0780 ? 4.2673+-0.1617 ? might be 1.0346x slower int-or-other-max-then-get-by-val 4.1438+-0.0506 ? 4.3809+-0.2456 ? might be 1.0572x slower int-or-other-min-then-get-by-val 4.2046+-0.1929 ? 4.2258+-0.0841 ? int-or-other-mod-then-get-by-val 3.8257+-0.0646 ? 3.8770+-0.1329 ? might be 1.0134x slower int-or-other-mul-then-get-by-val 3.8090+-0.2983 3.7965+-0.2816 int-or-other-neg-then-get-by-val 4.6095+-0.0510 ? 4.6185+-0.0101 ? int-or-other-neg-zero-then-get-by-val 17.0020+-0.3526 ? 18.3696+-1.2756 ? might be 1.0804x slower int-or-other-sub-then-get-by-val 4.1319+-0.0372 ? 4.3598+-0.2714 ? might be 1.0552x slower int-or-other-sub 3.6232+-0.3130 3.3817+-0.0243 might be 1.0714x faster int-overflow-local 4.2629+-0.0545 ? 4.5451+-0.3755 ? might be 1.0662x slower Int16Array-alloc-long-lived 48.9345+-0.8902 ? 49.2513+-1.6821 ? Int16Array-bubble-sort-with-byteLength 20.1413+-0.7182 20.1410+-0.3321 Int16Array-bubble-sort 20.7095+-2.0798 19.8621+-0.2822 might be 1.0427x faster Int16Array-load-int-mul 1.6052+-0.2241 1.5661+-0.0913 might be 1.0250x faster Int16Array-to-Int32Array-set 57.2637+-1.3965 ? 59.1253+-0.5377 ? might be 1.0325x slower Int32Array-alloc-large 25.3105+-1.2248 24.2050+-0.5615 might be 1.0457x faster Int32Array-alloc-long-lived 55.1809+-1.1315 54.0943+-0.8598 might be 1.0201x faster Int32Array-alloc 3.2967+-0.1587 ? 3.4594+-0.5696 ? might be 1.0493x slower Int32Array-Int8Array-view-alloc 7.9551+-1.0869 7.2735+-0.8806 might be 1.0937x faster int52-spill 6.4666+-0.1300 ? 6.4778+-0.4525 ? Int8Array-alloc-long-lived 44.1276+-1.5149 ? 45.4674+-0.8409 ? might be 1.0304x slower Int8Array-load-with-byteLength 3.3378+-0.0394 ? 3.4910+-0.2812 ? might be 1.0459x slower Int8Array-load 3.3319+-0.0342 ? 3.3809+-0.0621 ? might be 1.0147x slower integer-divide 11.0284+-0.3350 10.9671+-0.3544 integer-modulo 2.1196+-0.2500 ? 2.2662+-0.3401 ? might be 1.0692x slower is-boolean-fold-tricky 4.9363+-0.7524 4.5920+-0.2270 might be 1.0750x faster is-boolean-fold 2.8568+-0.0172 ! 2.9478+-0.0532 ! definitely 1.0318x slower is-function-fold-tricky-internal-function 12.1975+-0.2744 12.1068+-0.1163 is-function-fold-tricky 4.6042+-0.1314 4.5521+-0.0664 might be 1.0114x faster is-function-fold 2.9241+-0.1406 2.9112+-0.0618 is-number-fold-tricky 4.4529+-0.1001 ? 4.9353+-0.9051 ? might be 1.1083x slower is-number-fold 2.8732+-0.0595 ? 2.9955+-0.2816 ? might be 1.0426x slower is-object-or-null-fold-functions 3.0298+-0.2412 2.9436+-0.0602 might be 1.0293x faster is-object-or-null-fold-less-tricky 4.6013+-0.1053 ? 4.6166+-0.2112 ? is-object-or-null-fold-tricky 6.6275+-0.0572 ? 6.6316+-0.0952 ? is-object-or-null-fold 3.1627+-0.3721 2.9406+-0.0549 might be 1.0755x faster is-object-or-null-trickier-function 4.6489+-0.0660 ? 4.9896+-0.5786 ? might be 1.0733x slower is-object-or-null-trickier-internal-function 12.6346+-0.1446 12.5809+-0.2112 is-object-or-null-tricky-function 4.7240+-0.2250 ? 4.8016+-0.3403 ? might be 1.0164x slower is-object-or-null-tricky-internal-function 9.4391+-0.3087 9.3428+-0.2861 might be 1.0103x faster is-string-fold-tricky 4.4744+-0.0557 ? 4.4910+-0.0998 ? is-string-fold 2.9192+-0.1737 2.9137+-0.1164 is-undefined-fold-tricky 3.8257+-0.1564 ? 3.8485+-0.3007 ? is-undefined-fold 2.8762+-0.0444 ? 2.8768+-0.0592 ? large-int-captured 4.7499+-0.1825 ? 5.0615+-0.8249 ? might be 1.0656x slower large-int-neg 16.2874+-0.7664 ? 16.9997+-0.9397 ? might be 1.0437x slower large-int 15.5330+-1.6982 14.8267+-0.4544 might be 1.0476x faster load-varargs-elimination 23.2519+-0.4875 22.8294+-0.5915 might be 1.0185x faster logical-not 4.4892+-0.0606 ? 4.6304+-0.2050 ? might be 1.0315x slower lots-of-fields 14.5129+-1.5097 13.3713+-0.4236 might be 1.0854x faster make-indexed-storage 3.2351+-0.1465 ? 3.2632+-0.1413 ? make-rope-cse 4.8064+-0.2331 ? 5.0915+-0.6784 ? might be 1.0593x slower marsaglia-larger-ints 36.4963+-1.2110 ? 36.6995+-1.1830 ? marsaglia-osr-entry 23.0561+-0.4780 ? 23.2073+-0.1530 ? max-boolean 2.5196+-0.0924 ? 2.6487+-0.3246 ? might be 1.0513x slower method-on-number 16.9267+-0.3250 16.8029+-0.1452 min-boolean 2.7888+-0.3365 2.6565+-0.2972 might be 1.0498x faster minus-boolean-double 3.4752+-0.3440 3.2357+-0.0640 might be 1.0740x faster minus-boolean 2.4080+-0.1017 ? 2.4707+-0.3161 ? might be 1.0260x slower misc-strict-eq 39.5769+-0.3653 38.8828+-0.8557 might be 1.0179x faster mod-boolean-double 10.9644+-0.1964 ? 11.1031+-0.3077 ? might be 1.0127x slower mod-boolean 7.8765+-0.0998 ? 7.9131+-0.0737 ? mul-boolean-double 3.8053+-0.0995 ? 4.0181+-0.3399 ? might be 1.0559x slower mul-boolean 3.0400+-0.2313 2.9345+-0.1519 might be 1.0360x faster neg-boolean 3.3599+-0.3966 ? 3.4288+-0.3718 ? might be 1.0205x slower negative-zero-divide 0.3874+-0.0486 0.3771+-0.0157 might be 1.0273x faster negative-zero-modulo 0.3759+-0.0294 0.3692+-0.0382 might be 1.0182x faster negative-zero-negate 0.3431+-0.0206 ? 0.3543+-0.0414 ? might be 1.0326x slower nested-function-parsing 38.7250+-1.5337 ? 39.1254+-1.9338 ? might be 1.0103x slower new-array-buffer-dead 117.8438+-9.3873 112.8209+-0.7398 might be 1.0445x faster new-array-buffer-push 6.9592+-0.2553 ? 7.7637+-1.0849 ? might be 1.1156x slower new-array-dead 19.4302+-0.4179 ? 19.9215+-1.4172 ? might be 1.0253x slower new-array-push 3.9349+-0.1796 ? 3.9625+-0.1334 ? no-inline-constructor 125.1900+-2.1697 123.8940+-2.4325 might be 1.0105x faster number-test 3.0565+-0.0584 ? 3.0770+-0.0582 ? object-closure-call 5.6307+-0.3711 5.5433+-0.1754 might be 1.0158x faster object-test 2.9187+-0.2761 2.8227+-0.0397 might be 1.0340x faster obvious-sink-pathology-taken 140.3638+-1.7287 140.0334+-1.6931 obvious-sink-pathology 131.7812+-3.0751 131.5667+-0.9398 obviously-elidable-new-object 36.0180+-1.8146 35.8641+-0.9861 plus-boolean-arith 2.7532+-0.3765 2.5478+-0.0641 might be 1.0806x faster plus-boolean-double 3.4214+-0.2614 3.1856+-0.0406 might be 1.0740x faster plus-boolean 2.4132+-0.0481 ? 2.4427+-0.1663 ? might be 1.0122x slower poly-chain-access-different-prototypes-simple 3.4126+-0.2013 3.3353+-0.0865 might be 1.0232x faster poly-chain-access-different-prototypes 2.7577+-0.3094 2.6257+-0.0471 might be 1.0503x faster poly-chain-access-simpler 3.6092+-0.6921 3.4103+-0.2748 might be 1.0583x faster poly-chain-access 2.7076+-0.2113 2.6372+-0.0917 might be 1.0267x faster poly-stricteq 60.3188+-2.5230 59.7644+-1.9277 polymorphic-array-call 1.3350+-0.2008 1.2475+-0.0222 might be 1.0702x faster polymorphic-get-by-id 3.3638+-0.3581 3.1694+-0.0981 might be 1.0614x faster polymorphic-put-by-id 31.3641+-1.9708 31.3074+-1.6670 polymorphic-structure 13.5887+-0.2336 ? 13.7297+-0.2135 ? might be 1.0104x slower polyvariant-monomorphic-get-by-id 8.5825+-0.1760 ? 8.6020+-0.1577 ? proto-getter-access 9.1803+-0.1309 9.1042+-0.2291 put-by-id-replace-and-transition 9.1884+-0.3403 9.0384+-0.0646 might be 1.0166x faster put-by-id-slightly-polymorphic 2.8983+-0.1247 ? 3.2255+-0.3703 ? might be 1.1129x slower put-by-id 13.8239+-0.8476 13.1672+-0.7067 might be 1.0499x faster put-by-val-direct 0.3875+-0.0499 ? 0.3890+-0.0458 ? put-by-val-large-index-blank-indexing-type 5.9199+-0.1112 ? 6.4197+-0.6873 ? might be 1.0844x slower put-by-val-machine-int 2.8182+-0.1142 ? 2.8562+-0.1994 ? might be 1.0135x slower rare-osr-exit-on-local 15.0916+-0.3537 14.9360+-0.1624 might be 1.0104x faster register-pressure-from-osr 21.2586+-0.2775 ? 22.0350+-0.9645 ? might be 1.0365x slower setter 5.9708+-0.8119 5.6859+-0.6050 might be 1.0501x faster simple-activation-demo 25.5411+-0.8979 25.3350+-1.3286 simple-getter-access 12.0438+-0.4669 11.8875+-0.2466 might be 1.0132x faster simple-poly-call-nested 8.3221+-0.2817 8.2585+-0.2911 simple-poly-call 1.3142+-0.0146 ? 1.3413+-0.0791 ? might be 1.0207x slower sin-boolean 24.0199+-1.2357 23.4409+-0.3800 might be 1.0247x faster singleton-scope 62.1459+-1.3984 ? 62.3223+-1.0298 ? sink-function 12.3903+-0.2874 ? 12.5122+-0.6255 ? sink-huge-activation 19.1270+-0.2916 ? 19.9437+-1.2830 ? might be 1.0427x slower sinkable-new-object-dag 70.5348+-1.4886 ? 70.9808+-1.2832 ? sinkable-new-object-taken 51.3298+-2.8362 ? 52.8319+-2.2940 ? might be 1.0293x slower sinkable-new-object 39.8567+-1.9276 ? 40.0804+-1.1618 ? slow-array-profile-convergence 3.0973+-0.3547 2.8924+-0.1421 might be 1.0708x faster slow-convergence 2.8606+-0.3310 2.8507+-0.2235 sorting-benchmark 20.1239+-0.5998 19.9557+-0.7341 sparse-conditional 1.1944+-0.0905 ? 1.2402+-0.0795 ? might be 1.0383x slower splice-to-remove 16.8464+-0.4208 ? 17.2271+-1.3323 ? might be 1.0226x slower string-char-code-at 15.7448+-0.1452 ? 16.0398+-0.4209 ? might be 1.0187x slower string-concat-object 2.5967+-0.0400 ? 2.6514+-0.1204 ? might be 1.0210x slower string-concat-pair-object 2.6040+-0.1004 2.5489+-0.0175 might be 1.0216x faster string-concat-pair-simple 12.8121+-1.4117 11.7393+-0.5004 might be 1.0914x faster string-concat-simple 12.6921+-1.0562 12.2146+-0.6913 might be 1.0391x faster string-cons-repeat 8.6666+-0.9003 ? 9.1121+-0.9951 ? might be 1.0514x slower string-cons-tower 8.7117+-0.7892 ? 8.8789+-1.0317 ? might be 1.0192x slower string-equality 18.7093+-0.6965 ? 18.7583+-0.7157 ? string-get-by-val-big-char 7.2598+-0.1732 7.1322+-0.0636 might be 1.0179x faster string-get-by-val-out-of-bounds-insane 3.7918+-0.4699 ? 3.8192+-0.4446 ? string-get-by-val-out-of-bounds 5.2196+-0.0502 ? 5.4255+-0.3742 ? might be 1.0394x slower string-get-by-val 3.3748+-0.1138 ? 3.3807+-0.1491 ? string-hash 2.1388+-0.1825 2.0735+-0.1049 might be 1.0315x faster string-long-ident-equality 14.8970+-0.2732 14.7631+-0.3471 string-out-of-bounds 15.9705+-2.9785 14.7850+-0.1520 might be 1.0802x faster string-repeat-arith 32.7494+-1.4133 ? 33.4873+-3.1763 ? might be 1.0225x slower string-sub 63.5078+-4.3203 ? 65.9730+-1.6891 ? might be 1.0388x slower string-test 2.9906+-0.1017 ? 2.9940+-0.1524 ? string-var-equality 32.6294+-1.1539 32.6071+-1.0574 structure-hoist-over-transitions 2.7347+-0.1225 ? 2.9179+-0.4578 ? might be 1.0670x slower substring-concat-weird 40.4580+-1.5119 ? 41.5056+-3.3996 ? might be 1.0259x slower substring-concat 43.0233+-1.4630 ? 43.3078+-1.7450 ? substring 46.9935+-1.9363 ? 48.3389+-2.4829 ? might be 1.0286x slower switch-char-constant 2.7478+-0.0527 ? 2.8045+-0.1037 ? might be 1.0206x slower switch-char 6.9785+-0.9710 6.6175+-0.8895 might be 1.0546x faster switch-constant 8.5750+-0.1178 ? 8.6388+-0.2194 ? switch-string-basic-big-var 18.1136+-0.6568 ? 18.3727+-0.8344 ? might be 1.0143x slower switch-string-basic-big 14.5489+-0.5066 ? 14.6757+-0.8044 ? switch-string-basic-var 15.0861+-0.5997 14.9443+-0.2954 switch-string-basic 13.0924+-0.1829 ? 13.1738+-0.1289 ? switch-string-big-length-tower-var 20.0834+-0.4041 ? 20.7172+-1.6382 ? might be 1.0316x slower switch-string-length-tower-var 14.8763+-0.1085 ? 15.4438+-1.3157 ? might be 1.0381x slower switch-string-length-tower 12.8211+-0.2496 12.6375+-0.3306 might be 1.0145x faster switch-string-short 12.5228+-0.1101 ? 12.9848+-0.6176 ? might be 1.0369x slower switch 12.7225+-0.2120 ? 12.9670+-0.6133 ? might be 1.0192x slower tear-off-arguments-simple 3.4519+-0.0483 3.4406+-0.0741 tear-off-arguments 4.7764+-0.0628 ? 4.8722+-0.1820 ? might be 1.0200x slower temporal-structure 12.4750+-1.3358 12.0270+-0.1921 might be 1.0372x faster to-int32-boolean 13.5747+-0.2741 13.5245+-0.1986 try-catch-get-by-val-cloned-arguments 14.4663+-0.7088 ? 14.5232+-0.7002 ? try-catch-get-by-val-direct-arguments 6.5536+-0.0899 ? 6.8715+-0.2785 ? might be 1.0485x slower try-catch-get-by-val-scoped-arguments 7.9830+-0.3712 ? 8.2121+-0.9757 ? might be 1.0287x slower typed-array-get-set-by-val-profiling 33.4101+-2.2858 32.1319+-0.6056 might be 1.0398x faster undefined-property-access 342.6272+-7.2367 340.9213+-1.6572 undefined-test 3.0460+-0.0831 ? 3.2170+-0.4548 ? might be 1.0561x slower unprofiled-licm 22.5445+-0.4225 ? 23.6062+-1.4269 ? might be 1.0471x slower varargs-call 14.6009+-0.7960 14.3101+-0.3752 might be 1.0203x faster varargs-construct-inline 61.3050+-2.1588 ? 63.2991+-2.1170 ? might be 1.0325x slower varargs-construct 30.9337+-0.6965 ? 34.5073+-7.5838 ? might be 1.1155x slower varargs-inline 9.3240+-0.4838 ? 9.4890+-0.6632 ? might be 1.0177x slower varargs-strict-mode 9.6895+-0.0919 ? 9.8188+-0.2254 ? might be 1.0133x slower varargs 9.8756+-0.1616 9.7156+-0.0982 might be 1.0165x faster weird-inlining-const-prop 2.4315+-0.1457 2.4045+-0.2801 might be 1.0112x faster <geometric> 8.6100+-0.0323 ? 8.6317+-0.0285 ? might be 1.0025x slower TipOfTree FixThingies AsmBench: bigfib.cpp 499.3941+-6.9257 496.1350+-3.3585 cray.c 426.9661+-5.1516 425.7356+-7.1094 dry.c 483.9690+-10.5377 ? 487.5743+-8.1270 ? FloatMM.c 725.1027+-4.0403 723.9647+-2.1561 gcc-loops.cpp 4271.4594+-13.2848 4263.1775+-7.0867 n-body.c 1056.2605+-175.1967 981.2413+-5.3244 might be 1.0765x faster Quicksort.c 422.0153+-3.9550 ? 424.4740+-5.8388 ? stepanov_container.cpp 3616.0418+-28.2046 3609.5909+-12.3843 Towers.c 259.5054+-1.6641 ? 259.5632+-0.5848 ? <geometric> 798.9202+-14.7610 792.9944+-2.1469 might be 1.0075x faster TipOfTree FixThingies CompressionBench: huffman 361.1306+-0.9819 ? 369.6755+-11.7435 ? might be 1.0237x slower arithmetic-simple 396.4341+-1.9892 ? 398.0345+-3.3513 ? arithmetic-precise 300.9525+-2.3045 298.6882+-2.6891 arithmetic-complex-precise 296.8240+-2.7751 ? 297.1861+-3.5179 ? arithmetic-precise-order-0 426.8225+-7.9286 423.8863+-6.1627 arithmetic-precise-order-1 330.0705+-3.9236 328.0158+-2.0221 arithmetic-precise-order-2 360.8777+-6.2132 ? 362.2769+-5.0437 ? arithmetic-simple-order-1 463.2390+-98.6608 426.9357+-6.1454 might be 1.0850x faster arithmetic-simple-order-2 465.3241+-5.0675 463.9509+-6.1766 lz-string 329.7726+-6.8006 326.7632+-14.3573 <geometric> 368.0271+-6.1015 365.4814+-2.2613 might be 1.0070x faster TipOfTree FixThingies Geomean of preferred means: <scaled-result> 62.1846+-0.3457 62.0891+-0.1366 might be 1.0015x faster
Michael Saboff
Comment 8 2015-05-13 14:50:59 PDT
Comment on attachment 253051 [details] the patch r=me
Filip Pizlo
Comment 9 2015-05-13 15:18:23 PDT
Note You need to log in before you can comment on or make changes to this bug.