Bug 153477

Summary: [JSC] When lowering B3 to Air, preferRightForResult() should prefer values from the same block
Product: WebKit Reporter: Benjamin Poulain <benjamin>
Component: New BugsAssignee: Benjamin Poulain <benjamin>
Status: RESOLVED FIXED    
Severity: Normal CC: commit-queue, fpizlo, keith_miller, mark.lam, msaboff, saam
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on:    
Bug Blocks: 150279, 153583    
Attachments:
Description Flags
Patch
none
Patch
none
Patch
none
Patch for landing none

Benjamin Poulain
Reported 2016-01-25 23:17:00 PST
[JSC] When lowering B3 to Air, preferRightForResult() should prefer values from the same block
Attachments
Patch (3.33 KB, patch)
2016-01-25 23:22 PST, Benjamin Poulain
no flags
Patch (3.43 KB, patch)
2016-01-26 13:45 PST, Benjamin Poulain
no flags
Patch (3.80 KB, patch)
2016-01-26 16:05 PST, Benjamin Poulain
no flags
Patch for landing (3.76 KB, patch)
2016-01-26 21:14 PST, Benjamin Poulain
no flags
Benjamin Poulain
Comment 1 2016-01-25 23:22:57 PST
Benjamin Poulain
Comment 2 2016-01-25 23:23:43 PST
Conf#1 Conf#2 SunSpider: 3d-cube 8.9990+-0.2216 8.7834+-0.6239 might be 1.0245x faster 3d-morph 8.2653+-0.1234 8.1663+-0.1106 might be 1.0121x faster 3d-raytrace 9.4209+-0.2490 ? 9.6170+-0.1512 ? might be 1.0208x slower access-binary-trees 3.2122+-0.0543 ? 3.2245+-0.3601 ? access-fannkuch 9.1964+-0.5638 9.0360+-0.2470 might be 1.0177x faster access-nbody 4.6365+-0.2375 ? 4.7531+-0.1091 ? might be 1.0251x slower access-nsieve 5.0859+-0.6605 4.9127+-0.2326 might be 1.0353x faster bitops-3bit-bits-in-byte 1.6818+-0.0322 ! 1.8657+-0.1235 ! definitely 1.1094x slower bitops-bits-in-byte 5.6151+-0.1356 ? 5.6330+-0.2438 ? bitops-bitwise-and 2.8706+-0.0853 2.8114+-0.0744 might be 1.0211x faster bitops-nsieve-bits 4.5212+-0.2486 ? 4.6088+-0.1125 ? might be 1.0194x slower controlflow-recursive 3.6270+-0.1606 3.6185+-0.0812 crypto-aes 6.6337+-0.2835 6.5541+-0.3053 might be 1.0122x faster crypto-md5 3.9777+-0.1698 ? 4.0756+-0.1479 ? might be 1.0246x slower crypto-sha1 3.6248+-0.1073 3.5138+-0.1276 might be 1.0316x faster date-format-tofte 13.6398+-0.4447 13.1984+-0.5250 might be 1.0334x faster date-format-xparb 7.6560+-0.2014 ? 7.8102+-0.7021 ? might be 1.0201x slower math-cordic 4.5248+-0.1918 4.5148+-0.1312 math-partial-sums 10.1025+-0.2483 10.0869+-0.3821 math-spectral-norm 3.3578+-0.1951 3.2653+-0.1160 might be 1.0283x faster regexp-dna 10.0428+-0.1000 9.8249+-0.5468 might be 1.0222x faster string-base64 7.1927+-0.1632 6.8894+-0.4016 might be 1.0440x faster string-fasta 9.2285+-0.2854 ? 9.2866+-0.2219 ? string-tagcloud 13.1512+-0.2392 ? 13.1600+-0.2909 ? string-unpack-code 26.7462+-0.4719 ? 27.6623+-1.3375 ? might be 1.0343x slower string-validate-input 6.8353+-0.1982 ? 6.8425+-0.1468 ? <arithmetic> 7.4556+-0.0406 7.4506+-0.1041 might be 1.0007x faster Conf#1 Conf#2 LongSpider: 3d-cube 1124.3010+-28.2398 1118.0986+-13.6724 3d-morph 996.1678+-5.6710 ^ 977.7107+-3.2663 ^ definitely 1.0189x faster 3d-raytrace 1082.9517+-3.5443 ! 1096.2057+-7.3303 ! definitely 1.0122x slower access-binary-trees 1363.6513+-10.4541 1359.6989+-9.7475 access-fannkuch 453.5355+-69.0076 415.7766+-19.7573 might be 1.0908x faster access-nbody 1162.7337+-50.0849 1161.7137+-52.9652 access-nsieve 662.2388+-6.2894 ? 665.3856+-1.2585 ? bitops-3bit-bits-in-byte 39.9232+-0.2082 ? 40.2249+-0.6287 ? bitops-bits-in-byte 302.4957+-11.3200 ? 304.1348+-12.6668 ? bitops-nsieve-bits 621.7673+-14.1445 ? 624.3857+-11.9395 ? controlflow-recursive 740.1536+-0.1743 ! 743.0563+-0.9560 ! definitely 1.0039x slower crypto-aes 1047.0151+-4.9319 1046.0840+-14.8093 crypto-md5 848.9262+-6.3741 843.2964+-7.5655 crypto-sha1 1126.7892+-10.0109 1126.5321+-6.5878 date-format-tofte 1120.8507+-21.2396 ? 1129.0620+-5.5517 ? date-format-xparb 1029.8413+-24.5118 1022.6106+-8.3095 hash-map 221.8610+-0.8755 ? 222.7203+-1.2745 ? math-cordic 701.1510+-117.8642 ? 734.6177+-97.4859 ? might be 1.0477x slower math-partial-sums 1068.6945+-4.8718 1065.7954+-1.8422 math-spectral-norm 1073.2802+-1.6234 ! 1242.2784+-0.6566 ! definitely 1.1575x slower string-base64 595.7328+-0.9572 ! 598.1189+-0.3669 ! definitely 1.0040x slower string-fasta 594.5991+-6.1419 ? 610.6902+-56.4668 ? might be 1.0271x slower string-tagcloud 294.4805+-5.4197 290.8231+-5.9555 might be 1.0126x faster <geometric> 659.0885+-6.3190 ? 662.8624+-7.7963 ? might be 1.0057x slower Conf#1 Conf#2 V8Spider: crypto 62.6895+-1.2801 62.5350+-1.8223 deltablue 80.4327+-6.8917 79.9910+-6.2101 earley-boyer 67.1740+-0.8151 66.8746+-1.6086 raytrace 40.8808+-1.0732 39.8513+-0.9087 might be 1.0258x faster regexp 102.9319+-0.5470 ? 103.1840+-0.3752 ? richards 68.3190+-0.8181 ? 69.7220+-2.3694 ? might be 1.0205x slower splay 53.3478+-1.7821 ? 53.7050+-0.5910 ? <geometric> 65.5278+-0.7102 65.4505+-1.0667 might be 1.0012x faster Conf#1 Conf#2 Octane: encrypt 0.28383+-0.00733 0.28044+-0.00452 might be 1.0121x faster decrypt 5.22333+-0.08609 5.12233+-0.01597 might be 1.0197x faster deltablue x2 0.23321+-0.01833 ? 0.23340+-0.01786 ? earley 0.51122+-0.00393 0.50936+-0.01025 boyer 9.06430+-0.05168 8.95411+-0.10632 might be 1.0123x faster navier-stokes x2 6.34918+-0.02121 6.33842+-0.01446 raytrace x2 1.50814+-0.02132 1.49458+-0.02078 richards x2 0.14054+-0.00515 0.13909+-0.00292 might be 1.0104x faster splay x2 0.56017+-0.00236 0.55848+-0.00451 regexp x2 38.59306+-0.25325 38.51058+-0.49861 pdfjs x2 60.64035+-1.18840 60.40546+-0.51175 mandreel x2 70.16619+-1.53825 69.68302+-0.25131 gbemu x2 61.24174+-13.27662 57.85017+-1.88135 might be 1.0586x faster closure 0.93184+-0.00350 ? 0.93472+-0.00862 ? jquery 12.00497+-0.13322 11.99090+-0.08382 box2d x2 16.62819+-0.19130 16.58277+-0.09798 zlib x2 593.17385+-6.61634 ? 595.94607+-3.50866 ? typescript x2 1110.40936+-15.34893 1109.29724+-5.01627 <geometric> 8.88054+-0.13207 8.81635+-0.06632 might be 1.0073x faster Conf#1 Conf#2 Kraken: ai-astar 156.441+-14.012 151.394+-10.302 might be 1.0333x faster audio-beat-detection 81.941+-3.413 ? 83.096+-0.366 ? might be 1.0141x slower audio-dft 127.874+-1.143 ? 128.445+-0.618 ? audio-fft 60.712+-0.342 ! 61.861+-0.726 ! definitely 1.0189x slower audio-oscillator 85.785+-0.412 85.748+-0.394 imaging-darkroom 97.798+-0.233 ? 98.016+-0.267 ? imaging-desaturate 111.052+-0.541 ^ 84.118+-0.864 ^ definitely 1.3202x faster imaging-gaussian-blur 126.729+-7.453 123.840+-2.680 might be 1.0233x faster json-parse-financial 68.874+-1.233 68.854+-1.452 json-stringify-tinderbox 41.882+-0.710 41.341+-0.245 might be 1.0131x faster stanford-crypto-aes 61.852+-0.909 61.575+-0.645 stanford-crypto-ccm 59.648+-2.431 ? 59.833+-3.314 ? stanford-crypto-pbkdf2 150.304+-1.163 ? 150.766+-2.383 ? stanford-crypto-sha256-iterative 60.925+-1.453 ? 61.052+-1.337 ? <arithmetic> 92.273+-0.466 ^ 89.996+-0.934 ^ definitely 1.0253x faster Conf#1 Conf#2 JSRegress: abc-forward-loop-equal 53.5940+-0.6786 53.3466+-1.0377 abc-postfix-backward-loop 68.8375+-0.6148 ? 69.3070+-1.0523 ? abc-simple-backward-loop 53.2601+-0.7251 52.8545+-0.4322 abc-simple-forward-loop 53.2452+-1.2322 ? 53.4016+-0.9365 ? abc-skippy-loop 36.6730+-1.0402 36.3256+-0.8643 abs-boolean 3.8745+-0.1452 3.8660+-0.1414 adapt-to-double-divide 15.5906+-0.4572 15.4623+-0.3178 aliased-arguments-getbyval 1.7943+-0.2840 1.7057+-0.2736 might be 1.0519x faster allocate-big-object 3.9107+-0.1585 3.8716+-0.3050 might be 1.0101x faster arguments-named-and-reflective 12.0789+-0.1911 12.0574+-0.3286 arguments-out-of-bounds 12.7838+-0.2395 12.4935+-0.1997 might be 1.0232x faster arguments-strict-mode 10.2834+-0.2141 ? 10.2975+-0.2490 ? arguments 9.5447+-0.6586 9.4933+-0.4557 arity-mismatch-inlining 1.3093+-0.1001 ? 1.3278+-0.1337 ? might be 1.0141x slower array-access-polymorphic-structure 11.8613+-1.1855 11.2373+-0.3333 might be 1.0555x faster array-nonarray-polymorhpic-access 36.7214+-1.4755 36.5333+-1.0450 array-prototype-every 127.1037+-6.0224 124.8576+-0.2918 might be 1.0180x faster array-prototype-forEach 123.7795+-1.4867 123.0722+-1.3849 array-prototype-map 137.9955+-2.5754 137.3213+-0.4643 array-prototype-reduce 116.5185+-1.4056 115.3267+-1.2679 might be 1.0103x faster array-prototype-reduceRight 115.3091+-2.0470 ? 117.5745+-5.6919 ? might be 1.0196x slower array-prototype-some 124.4912+-1.4084 ? 126.0613+-3.4193 ? might be 1.0126x slower array-splice-contiguous 37.1118+-0.5799 36.5811+-0.3596 might be 1.0145x faster array-with-double-add 5.9224+-0.1906 5.8481+-0.0356 might be 1.0127x faster array-with-double-increment 4.5110+-0.1311 ? 4.5712+-0.1038 ? might be 1.0133x slower array-with-double-mul-add 7.3598+-0.1188 ? 7.4998+-0.0747 ? might be 1.0190x slower array-with-double-sum 4.3477+-0.0222 ? 4.3942+-0.0361 ? might be 1.0107x slower array-with-int32-add-sub 10.5381+-0.1806 ? 10.6541+-0.1535 ? might be 1.0110x slower array-with-int32-or-double-sum 4.4797+-0.0697 4.4752+-0.0501 ArrayBuffer-DataView-alloc-large-long-lived 47.9830+-2.2990 ? 48.0407+-1.9222 ? ArrayBuffer-DataView-alloc-long-lived 19.0176+-0.5097 ? 19.2255+-0.6516 ? might be 1.0109x slower ArrayBuffer-Int32Array-byteOffset 5.4128+-0.1768 ? 5.4699+-0.1896 ? might be 1.0106x slower ArrayBuffer-Int8Array-alloc-large-long-lived 47.8537+-1.4001 46.8220+-1.3171 might be 1.0220x faster ArrayBuffer-Int8Array-alloc-long-lived-buffer 30.5018+-1.5736 29.9187+-0.3621 might be 1.0195x faster ArrayBuffer-Int8Array-alloc-long-lived 17.4845+-0.5100 17.4467+-0.4285 ArrayBuffer-Int8Array-alloc 14.4971+-0.2939 ? 14.7350+-0.6408 ? might be 1.0164x slower arrowfunction-call 13.3137+-0.1531 13.1595+-0.2857 might be 1.0117x faster asmjs_bool_bug 9.5292+-0.1774 ? 9.6172+-0.1721 ? assign-custom-setter-polymorphic 4.3259+-0.1289 ? 4.3832+-0.2225 ? might be 1.0133x slower assign-custom-setter 6.1320+-0.2148 6.0295+-0.2463 might be 1.0170x faster basic-set 11.4390+-0.5731 ? 11.8085+-0.5024 ? might be 1.0323x slower big-int-mul 4.9125+-0.1532 ? 4.9534+-0.1269 ? boolean-test 5.0237+-0.1612 ? 5.0583+-0.1020 ? branch-fold 4.8108+-0.0512 ? 4.8610+-0.1039 ? might be 1.0104x slower branch-on-string-as-boolean 20.2733+-0.5172 20.0468+-0.2201 might be 1.0113x faster by-val-generic 5.8798+-0.9760 ? 6.5649+-0.7611 ? might be 1.1165x slower call-spread-apply 41.5644+-3.2556 40.8434+-2.3859 might be 1.0177x faster call-spread-call 32.6420+-4.8596 31.1058+-1.6691 might be 1.0494x faster captured-assignments 0.8765+-0.0444 0.7299+-0.1354 might be 1.2009x faster cast-int-to-double 8.4634+-0.1096 ? 8.6678+-0.2227 ? might be 1.0242x slower cell-argument 5.4765+-0.6494 5.4185+-0.1351 might be 1.0107x faster cfg-simplify 3.8633+-0.1870 3.8398+-0.1684 chain-getter-access 14.0425+-0.2228 13.9391+-0.2797 cmpeq-obj-to-obj-other 14.7595+-0.7002 14.3155+-1.2914 might be 1.0310x faster constant-test 8.1955+-0.1397 7.9183+-0.2589 might be 1.0350x faster create-lots-of-functions 15.2675+-1.3992 14.8028+-0.6963 might be 1.0314x faster cse-new-array-buffer 3.6072+-0.1433 3.5569+-0.1708 might be 1.0141x faster cse-new-array 3.8633+-0.0720 3.6552+-0.2888 might be 1.0569x faster custom-setter-getter-as-put-get-by-id 0.9186+-0.0840 0.9090+-0.2184 might be 1.0105x faster DataView-custom-properties 55.6340+-2.4737 54.9353+-1.3810 might be 1.0127x faster delay-tear-off-arguments-strictmode 20.0836+-0.9100 19.9182+-0.2039 deltablue-varargs 261.2510+-2.9668 ? 261.8823+-0.9415 ? destructuring-arguments 229.7559+-2.3666 ? 232.0985+-1.4036 ? might be 1.0102x slower destructuring-parameters-overridden-by-function 0.7526+-0.1521 ? 0.8485+-0.1490 ? might be 1.1274x slower destructuring-swap 7.8937+-0.1952 ? 7.9296+-0.1082 ? direct-arguments-getbyval 1.8299+-0.2446 1.6098+-0.1260 might be 1.1367x faster div-boolean-double 5.7682+-0.2178 ? 5.8910+-0.3541 ? might be 1.0213x slower div-boolean 9.9860+-0.1617 9.8297+-0.1342 might be 1.0159x faster double-get-by-val-out-of-bounds 6.0652+-0.2715 ? 6.4510+-0.1283 ? might be 1.0636x slower double-pollution-getbyval 9.9070+-0.2109 ? 10.0962+-0.2140 ? might be 1.0191x slower double-pollution-putbyoffset 5.7728+-0.1123 5.4810+-0.3020 might be 1.0532x faster double-real-use 43.2477+-0.7977 42.3843+-0.7474 might be 1.0204x faster double-to-int32-typed-array-no-inline 3.1888+-0.2531 3.1877+-0.0929 double-to-int32-typed-array 2.9633+-0.1358 ? 2.9861+-0.1890 ? double-to-uint32-typed-array-no-inline 3.3096+-0.1380 3.2552+-0.1406 might be 1.0167x faster double-to-uint32-typed-array 2.9553+-0.2923 ? 2.9713+-0.1301 ? elidable-new-object-dag 51.0750+-0.5699 ? 51.7626+-2.8665 ? might be 1.0135x slower elidable-new-object-roflcopter 54.5837+-5.3123 ? 56.9871+-4.9472 ? might be 1.0440x slower elidable-new-object-then-call 46.1835+-0.9752 45.9568+-1.2821 elidable-new-object-tree 60.0275+-2.2650 59.2118+-0.8862 might be 1.0138x faster empty-string-plus-int 7.7583+-0.2424 7.6490+-0.2813 might be 1.0143x faster emscripten-cube2hash 49.0383+-1.0425 48.8310+-1.0660 exit-length-on-plain-object 24.8073+-2.9641 24.7563+-1.8993 external-arguments-getbyval 1.9602+-0.2761 1.7020+-0.2437 might be 1.1517x faster external-arguments-putbyval 3.2968+-0.0243 ? 3.4729+-0.2811 ? might be 1.0534x slower fixed-typed-array-storage-var-index 1.6767+-0.1382 1.6558+-0.1394 might be 1.0126x faster fixed-typed-array-storage 1.4437+-0.2378 1.3743+-0.1702 might be 1.0505x faster Float32Array-matrix-mult 6.8943+-0.2421 6.8419+-0.3241 Float32Array-to-Float64Array-set 77.1525+-0.5932 ? 77.5605+-1.1392 ? Float64Array-alloc-long-lived 96.4258+-1.0685 ? 96.5167+-0.9127 ? Float64Array-to-Int16Array-set 89.1247+-0.7915 88.7769+-0.9207 fold-double-to-int 20.1792+-0.3758 19.8934+-0.8368 might be 1.0144x faster fold-get-by-id-to-multi-get-by-offset-rare-int 12.1274+-0.2279 12.1042+-0.3371 fold-get-by-id-to-multi-get-by-offset 10.1537+-0.2033 10.1322+-0.3983 fold-multi-get-by-offset-to-get-by-offset 8.6564+-0.6774 ? 8.7762+-0.6410 ? might be 1.0138x slower fold-multi-get-by-offset-to-poly-get-by-offset 9.1320+-0.9172 ? 9.5786+-0.2025 ? might be 1.0489x slower fold-multi-put-by-offset-to-poly-put-by-offset 10.8674+-1.3362 10.4108+-1.3464 might be 1.0439x faster fold-multi-put-by-offset-to-put-by-offset 9.9627+-1.3386 9.6158+-1.6308 might be 1.0361x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 14.9016+-0.3584 ? 15.8825+-0.9489 ? might be 1.0658x slower fold-put-by-id-to-multi-put-by-offset 12.2554+-0.8331 11.9595+-0.8408 might be 1.0247x faster fold-put-by-val-with-string-to-multi-put-by-offset 12.3565+-0.5421 12.3403+-0.6044 fold-put-by-val-with-symbol-to-multi-put-by-offset 12.2166+-0.4648 12.0323+-0.3119 might be 1.0153x faster fold-put-structure 7.8770+-0.4213 7.8683+-0.2652 for-of-iterate-array-entries 15.2526+-0.1107 15.1192+-0.2534 for-of-iterate-array-keys 5.2958+-0.2828 ? 5.4211+-0.4289 ? might be 1.0237x slower for-of-iterate-array-values 5.2324+-0.3128 ? 5.2836+-0.2369 ? fround 25.0621+-0.7894 ^ 14.1538+-0.3960 ^ definitely 1.7707x faster ftl-library-inlining-dataview 94.5969+-2.6905 94.2038+-2.7222 ftl-library-inlining 34.7360+-0.3728 ? 35.0024+-1.1563 ? ftl-polymorphic-bitand 178.4547+-2.8855 ? 179.1273+-1.8201 ? ftl-polymorphic-bitor 177.3090+-1.0179 ? 177.4557+-1.0188 ? ftl-polymorphic-bitxor 183.5342+-15.0596 176.9176+-2.0409 might be 1.0374x faster ftl-polymorphic-div 474.7602+-0.7365 ? 477.6074+-4.1744 ? ftl-polymorphic-lshift 233.5742+-4.7821 231.6180+-3.4929 ftl-polymorphic-mul 281.6637+-13.6666 275.5297+-3.5274 might be 1.0223x faster ftl-polymorphic-rshift 230.6395+-2.7951 ? 232.1797+-4.5688 ? ftl-polymorphic-StringFromCharCode 254.7006+-7.2493 251.9734+-6.0083 might be 1.0108x faster ftl-polymorphic-sub 209.7430+-2.4712 ? 210.3525+-2.0736 ? ftl-polymorphic-urshift 213.2188+-4.2135 212.8165+-3.7613 function-call 13.6815+-0.3300 13.5425+-0.1938 might be 1.0103x faster function-dot-apply 3.1277+-0.1733 ? 3.1780+-0.0589 ? might be 1.0161x slower function-test 4.9226+-0.1039 ? 4.9581+-0.1501 ? function-with-eval 133.6370+-0.5753 ? 134.1713+-0.6513 ? gcse-poly-get-less-obvious 22.5526+-0.4910 ? 22.8972+-0.4311 ? might be 1.0153x slower gcse-poly-get 24.3603+-1.0812 ? 24.4720+-0.6455 ? gcse 6.8919+-0.0614 6.8665+-0.0938 generator-create 1.3356+-0.2288 ? 1.3690+-0.1946 ? might be 1.0250x slower generator-fib 148.8140+-2.5776 ? 149.1550+-1.4770 ? generator-function-create 7.1974+-0.6146 6.9079+-0.2457 might be 1.0419x faster generator-sunspider-access-nsieve 9.0087+-0.3430 ? 9.0576+-0.2810 ? generator-with-several-types 477.1520+-17.7828 ? 487.3710+-2.8502 ? might be 1.0214x slower get-by-id-bimorphic-check-structure-elimination-simple 3.3068+-0.1624 3.2737+-0.0806 might be 1.0101x faster get-by-id-bimorphic-check-structure-elimination 8.3885+-0.1420 8.2345+-0.0963 might be 1.0187x faster get-by-id-chain-from-try-block 3.3570+-0.2039 3.3264+-0.1668 get-by-id-check-structure-elimination 7.8655+-0.1215 ? 7.8713+-0.1571 ? get-by-id-proto-or-self 17.3420+-1.0202 ? 17.8170+-2.0567 ? might be 1.0274x slower get-by-id-quadmorphic-check-structure-elimination-simple 4.0809+-0.0739 3.9925+-0.0916 might be 1.0221x faster get-by-id-self-or-proto 17.0189+-1.5510 ? 17.3430+-1.4808 ? might be 1.0190x slower get-by-val-out-of-bounds 6.1493+-0.3331 ? 6.3724+-0.0839 ? might be 1.0363x slower get-by-val-with-string-bimorphic-check-structure-elimination-simple 3.9508+-0.0621 ? 3.9797+-0.1264 ? get-by-val-with-string-bimorphic-check-structure-elimination 10.7935+-0.0322 10.7687+-0.2365 get-by-val-with-string-chain-from-try-block 3.4979+-0.0782 3.4352+-0.1353 might be 1.0182x faster get-by-val-with-string-check-structure-elimination 9.5925+-0.4957 9.5369+-0.1083 get-by-val-with-string-proto-or-self 17.4597+-0.8146 ? 18.7150+-2.6408 ? might be 1.0719x slower get-by-val-with-string-quadmorphic-check-structure-elimination-simple 4.9934+-0.1659 ? 5.0120+-0.0798 ? get-by-val-with-string-self-or-proto 18.4897+-1.4795 18.0692+-1.1650 might be 1.0233x faster get-by-val-with-symbol-bimorphic-check-structure-elimination-simple 4.7815+-0.0740 ? 4.8502+-0.1530 ? might be 1.0144x slower get-by-val-with-symbol-bimorphic-check-structure-elimination 19.4285+-0.3706 ? 19.4825+-0.4711 ? get-by-val-with-symbol-chain-from-try-block 3.3890+-0.1399 ? 3.4447+-0.2246 ? might be 1.0164x slower get-by-val-with-symbol-check-structure-elimination 18.6983+-0.5164 18.5272+-0.3342 get-by-val-with-symbol-proto-or-self 17.7450+-0.5070 17.5809+-0.1945 get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple 6.0405+-0.1013 5.9810+-0.0688 get-by-val-with-symbol-self-or-proto 18.4145+-2.4458 18.0310+-1.1538 might be 1.0213x faster get_callee_monomorphic 3.7718+-0.1256 3.7632+-0.2521 get_callee_polymorphic 4.9833+-0.1727 ? 4.9854+-0.2062 ? getter-no-activation 5.3571+-0.1845 5.2678+-0.1125 might be 1.0170x faster getter-prototype 9.2153+-0.1358 ? 9.3868+-0.1343 ? might be 1.0186x slower getter-richards-try-catch 1684.9681+-80.4204 ? 1738.9312+-147.2124 ? might be 1.0320x slower getter-richards 106.1762+-3.0768 105.5745+-3.3499 getter 7.1848+-0.4295 ^ 6.4932+-0.0969 ^ definitely 1.1065x faster global-object-access-with-mutating-structure 7.0046+-0.3706 6.9227+-0.0306 might be 1.0118x faster global-var-const-infer-fire-from-opt 1.2695+-0.2206 1.2272+-0.1738 might be 1.0345x faster global-var-const-infer 1.0127+-0.0267 ? 1.0633+-0.1884 ? might be 1.0500x slower hard-overflow-check-equal 42.9355+-0.3282 ? 43.1550+-0.5496 ? hard-overflow-check 42.9749+-0.3676 ? 43.2217+-0.9553 ? HashMap-put-get-iterate-keys 32.6147+-0.6080 ? 33.1882+-0.5534 ? might be 1.0176x slower HashMap-put-get-iterate 32.5725+-0.5467 32.5110+-0.7090 HashMap-string-put-get-iterate 36.2670+-2.4697 35.6643+-0.4587 might be 1.0169x faster hoist-make-rope 7.4429+-0.0136 7.3040+-0.3694 might be 1.0190x faster hoist-poly-check-structure-effectful-loop 5.7762+-0.1635 5.7519+-0.1260 hoist-poly-check-structure 3.7169+-0.1207 ? 3.7320+-0.2757 ? imul-double-only 5.0232+-0.2229 ? 5.0601+-0.2523 ? imul-int-only 8.6163+-0.1012 ? 9.0112+-0.4313 ? might be 1.0458x slower imul-mixed 5.8243+-0.5870 5.5670+-0.2006 might be 1.0462x faster in-four-cases 22.8632+-0.3742 ? 22.9845+-0.2693 ? in-one-case-false 12.7995+-0.1150 ? 13.0385+-0.4102 ? might be 1.0187x slower in-one-case-true 12.8520+-0.2550 12.7485+-0.1906 in-two-cases 13.7062+-0.2610 ? 13.7988+-0.4507 ? indexed-properties-in-objects 4.0821+-0.1998 4.0380+-0.0614 might be 1.0109x faster infer-closure-const-then-mov-no-inline 4.2880+-0.0820 4.2524+-0.0905 infer-closure-const-then-mov 12.2232+-0.2779 12.0385+-0.3337 might be 1.0153x faster infer-closure-const-then-put-to-scope-no-inline 14.8593+-0.8206 14.7341+-0.2666 infer-closure-const-then-put-to-scope 28.2531+-0.6940 ? 28.3699+-1.0268 ? infer-closure-const-then-reenter-no-inline 67.3461+-0.0869 67.3287+-0.4977 infer-closure-const-then-reenter 32.9683+-0.7261 32.7440+-0.4128 infer-constant-global-property 4.9059+-0.1390 4.8773+-0.0890 infer-constant-property 3.3851+-0.1769 3.3458+-0.0907 might be 1.0117x faster infer-one-time-closure-ten-vars 9.6120+-0.3221 ? 9.6360+-0.2708 ? infer-one-time-closure-two-vars 8.9012+-0.2345 ? 9.1200+-0.2687 ? might be 1.0246x slower infer-one-time-closure 8.8472+-0.1803 ? 8.9043+-0.2901 ? infer-one-time-deep-closure 16.2725+-0.3293 15.8667+-0.1205 might be 1.0256x faster inline-arguments-access 5.8847+-0.2588 ? 6.1437+-0.1261 ? might be 1.0440x slower inline-arguments-aliased-access 6.1810+-0.2434 6.1498+-0.2125 inline-arguments-local-escape 6.0657+-0.1505 ? 6.1104+-0.1540 ? inline-get-scoped-var 4.7315+-0.0911 ? 4.8143+-0.0734 ? might be 1.0175x slower inlined-put-by-id-transition 16.5842+-0.7578 ? 16.8068+-0.4602 ? might be 1.0134x slower inlined-put-by-val-with-string-transition 73.0472+-2.4475 70.4139+-3.0946 might be 1.0374x faster inlined-put-by-val-with-symbol-transition 69.3528+-1.3811 ? 69.7209+-1.9878 ? instanceof-bound 42.5058+-1.4871 ? 42.7210+-1.3056 ? int-or-other-abs-then-get-by-val 6.6191+-0.1544 ? 6.7462+-0.1956 ? might be 1.0192x slower int-or-other-abs-zero-then-get-by-val 27.8473+-0.2537 ? 28.3525+-0.5895 ? might be 1.0181x slower int-or-other-add-then-get-by-val 6.5290+-0.0319 ^ 6.4644+-0.0311 ^ definitely 1.0100x faster int-or-other-add 8.1900+-0.1051 ? 8.2120+-0.2024 ? int-or-other-div-then-get-by-val 5.1790+-0.1037 ? 5.1854+-0.0831 ? int-or-other-max-then-get-by-val 5.1562+-0.1190 ? 5.2205+-0.2152 ? might be 1.0125x slower int-or-other-min-then-get-by-val 5.1794+-0.1200 ? 5.2130+-0.0817 ? int-or-other-mod-then-get-by-val 4.9636+-0.1098 ? 4.9794+-0.1564 ? int-or-other-mul-then-get-by-val 5.3463+-0.2438 5.2172+-0.0765 might be 1.0247x faster int-or-other-neg-then-get-by-val 5.7950+-0.1497 ? 5.8638+-0.1225 ? might be 1.0119x slower int-or-other-neg-zero-then-get-by-val 28.3607+-0.7112 28.0523+-0.5110 might be 1.0110x faster int-or-other-sub-then-get-by-val 6.3711+-0.1666 ? 6.4853+-0.0936 ? might be 1.0179x slower int-or-other-sub 5.3333+-0.1532 ? 5.3950+-0.1378 ? might be 1.0116x slower int-overflow-local 6.1630+-0.0928 ? 6.2404+-0.1979 ? might be 1.0125x slower Int16Array-alloc-long-lived 68.2151+-1.0256 ? 68.2496+-1.6619 ? Int16Array-bubble-sort-with-byteLength 35.6497+-0.9249 35.4227+-0.8086 Int16Array-bubble-sort 36.7913+-0.9085 36.7900+-0.6881 Int16Array-load-int-mul 2.2570+-0.1783 2.2337+-0.1664 might be 1.0104x faster Int16Array-to-Int32Array-set 77.0657+-27.0516 68.9510+-1.9506 might be 1.1177x faster Int32Array-alloc-large 32.7397+-1.4636 ? 32.7792+-1.1850 ? Int32Array-alloc-long-lived 76.7308+-2.5007 75.8788+-0.4416 might be 1.0112x faster Int32Array-alloc 4.7334+-0.1622 4.7111+-0.0366 Int32Array-Int8Array-view-alloc 9.2642+-0.1018 9.2360+-0.3320 int52-spill 7.0287+-0.2477 ? 7.0668+-0.1969 ? Int8Array-alloc-long-lived 61.3475+-1.1311 61.1877+-1.2345 Int8Array-load-with-byteLength 4.8205+-0.1605 4.7906+-0.0428 Int8Array-load 4.8463+-0.1203 4.7950+-0.1293 might be 1.0107x faster integer-divide 14.1325+-0.1999 14.1147+-0.5000 integer-modulo 2.8177+-0.0813 2.7711+-0.1534 might be 1.0168x faster is-boolean-fold-tricky 5.8452+-0.1020 5.8298+-0.1379 is-boolean-fold 4.2026+-0.1236 4.1288+-0.1427 might be 1.0179x faster is-function-fold-tricky-internal-function 15.0925+-0.2452 ^ 14.7124+-0.1119 ^ definitely 1.0258x faster is-function-fold-tricky 5.9238+-0.1438 ? 5.9821+-0.0211 ? is-function-fold 4.2262+-0.1554 ? 4.2383+-0.0528 ? is-number-fold-tricky 5.8773+-0.0502 5.8099+-0.1296 might be 1.0116x faster is-number-fold 4.1939+-0.1728 4.1926+-0.1133 is-object-or-null-fold-functions 4.2708+-0.1666 ? 4.3342+-0.0567 ? might be 1.0148x slower is-object-or-null-fold-less-tricky 5.8741+-0.1228 ? 5.9639+-0.1345 ? might be 1.0153x slower is-object-or-null-fold-tricky 7.5780+-0.0769 ? 7.6412+-0.0907 ? is-object-or-null-fold 4.1682+-0.1364 ? 4.2763+-0.1183 ? might be 1.0259x slower is-object-or-null-trickier-function 6.0742+-0.1322 6.0602+-0.1117 is-object-or-null-trickier-internal-function 15.3252+-0.5371 ? 15.3767+-0.2861 ? is-object-or-null-tricky-function 5.9474+-0.1987 ? 6.0818+-0.1733 ? might be 1.0226x slower is-object-or-null-tricky-internal-function 11.1194+-0.1683 ? 11.1495+-0.3251 ? is-string-fold-tricky 5.9285+-0.1976 5.8548+-0.1181 might be 1.0126x faster is-string-fold 4.0608+-0.0683 ? 4.2583+-0.1642 ? might be 1.0486x slower is-undefined-fold-tricky 5.0073+-0.2403 4.9365+-0.0978 might be 1.0143x faster is-undefined-fold 4.1878+-0.1205 ? 4.3677+-0.4172 ? might be 1.0430x slower JSONP-negative-0 0.4609+-0.0832 ? 0.4891+-0.0968 ? might be 1.0610x slower large-int-captured 4.5730+-0.2892 4.4915+-0.3134 might be 1.0182x faster large-int-neg 18.0195+-0.3798 ? 18.1314+-0.2816 ? large-int 15.8219+-0.3265 ? 16.3056+-0.3486 ? might be 1.0306x slower load-varargs-elimination 25.4585+-0.5371 ? 26.0684+-1.9786 ? might be 1.0240x slower logical-not-weird-types 5.0255+-0.0953 ? 5.1058+-0.0592 ? might be 1.0160x slower logical-not 6.6699+-0.4346 ? 6.7655+-0.1049 ? might be 1.0143x slower lots-of-fields 17.9507+-0.5852 ? 17.9650+-0.4613 ? make-indexed-storage 4.2756+-0.3206 ? 4.3627+-0.3749 ? might be 1.0204x slower make-rope-cse 6.8107+-0.4184 6.7977+-0.0900 map-for-each 8.2396+-0.1765 ? 8.4064+-0.1897 ? might be 1.0202x slower map-for-of 26.5817+-0.3002 ? 26.9105+-0.4515 ? might be 1.0124x slower marsaglia-larger-ints 57.3019+-1.6106 57.2570+-1.3619 marsaglia-osr-entry 23.2538+-0.6287 ? 23.3062+-0.3659 ? math-random 19.8539+-0.1434 ? 19.9324+-0.4567 ? math-with-out-of-bounds-array-values 38.7163+-0.5395 ? 38.7436+-0.7139 ? max-boolean 3.4290+-0.0337 3.4055+-0.1291 method-on-number 22.7703+-0.1318 ? 23.0731+-0.3219 ? might be 1.0133x slower min-boolean 3.4627+-0.0661 3.3838+-0.1311 might be 1.0233x faster minus-boolean-double 4.4151+-0.1122 ? 4.5302+-0.0490 ? might be 1.0261x slower minus-boolean 3.4070+-0.2202 3.3963+-0.0566 misc-strict-eq 38.2802+-1.0694 38.0988+-1.8738 mod-boolean-double 10.8621+-0.1430 10.7966+-0.2090 mod-boolean 8.7874+-0.1441 8.6252+-0.3206 might be 1.0188x faster mul-boolean-double 5.1445+-0.1017 5.0883+-0.0508 might be 1.0110x faster mul-boolean 3.8746+-0.4402 3.7133+-0.1212 might be 1.0434x faster neg-boolean 4.3976+-0.0556 ? 4.4593+-0.1480 ? might be 1.0140x slower negative-zero-divide 0.6165+-0.1485 ? 0.6335+-0.1273 ? might be 1.0275x slower negative-zero-modulo 0.5970+-0.1152 ? 0.6537+-0.1226 ? might be 1.0950x slower negative-zero-negate 0.6563+-0.1127 ? 0.6612+-0.1210 ? nested-function-parsing 74.4838+-0.8109 ? 74.7634+-1.0689 ? new-array-buffer-dead 142.5826+-1.1290 ? 144.2305+-0.8656 ? might be 1.0116x slower new-array-buffer-push 10.3389+-0.4805 ? 10.4008+-0.1101 ? new-array-dead 14.7878+-0.4732 ? 14.8218+-0.8676 ? new-array-push 6.0920+-0.2123 ? 6.3625+-0.4209 ? might be 1.0444x slower no-inline-constructor 47.9748+-0.6279 ? 48.1799+-1.6919 ? number-test 5.0363+-0.1434 4.9540+-0.1271 might be 1.0166x faster object-closure-call 7.5772+-0.0818 7.4996+-0.1225 might be 1.0104x faster object-get-own-property-symbols-on-large-array 4.8166+-0.4276 ? 5.1675+-0.7361 ? might be 1.0729x slower object-test 4.7541+-0.1588 ? 4.8293+-0.1364 ? might be 1.0158x slower obvious-sink-pathology-taken 187.5803+-1.4629 187.3974+-1.8847 obvious-sink-pathology 44.3376+-1.4628 43.8107+-1.1363 might be 1.0120x faster obviously-elidable-new-object 40.1348+-0.8733 39.5477+-1.6277 might be 1.0148x faster plus-boolean-arith 3.3671+-0.1799 ? 3.4542+-0.1855 ? might be 1.0259x slower plus-boolean-double 4.4644+-0.1907 4.4207+-0.1559 plus-boolean 3.3882+-0.2161 3.3238+-0.2456 might be 1.0194x faster poly-chain-access-different-prototypes-simple 4.0759+-0.0118 3.9629+-0.1522 might be 1.0285x faster poly-chain-access-different-prototypes 3.3580+-0.1233 ? 3.3844+-0.1698 ? poly-chain-access-simpler 3.9627+-0.0931 ? 4.0184+-0.1864 ? might be 1.0140x slower poly-chain-access 3.4449+-0.0797 3.4231+-0.1226 poly-stricteq 87.0508+-2.8130 86.1597+-0.8340 might be 1.0103x faster polymorphic-array-call 2.0311+-0.1127 ? 2.0873+-0.0559 ? might be 1.0277x slower polymorphic-get-by-id 3.4130+-0.2256 3.3994+-0.1894 polymorphic-put-by-id 46.5748+-0.7792 ? 46.8862+-0.8798 ? polymorphic-put-by-val-with-string 48.0761+-0.3227 ? 48.1671+-0.3498 ? polymorphic-put-by-val-with-symbol 49.0195+-2.6472 47.7693+-0.3075 might be 1.0262x faster polymorphic-structure 25.2905+-0.5569 ? 25.8140+-0.5564 ? might be 1.0207x slower polyvariant-monomorphic-get-by-id 7.7303+-0.1874 7.6562+-0.1380 proto-getter-access 14.0106+-0.0709 ? 14.0612+-0.2870 ? prototype-access-with-mutating-prototype 6.7023+-0.5675 ? 6.9431+-1.4952 ? might be 1.0359x slower put-by-id-replace-and-transition 12.5635+-0.4059 12.4476+-0.4357 put-by-id-slightly-polymorphic 3.7295+-0.1258 3.6486+-0.1673 might be 1.0222x faster put-by-id 18.5322+-1.0330 18.5022+-0.2688 put-by-val-direct 0.6990+-0.0828 0.5972+-0.0766 might be 1.1705x faster put-by-val-large-index-blank-indexing-type 8.4684+-0.1668 8.4356+-0.0780 put-by-val-machine-int 3.8586+-0.2163 3.8488+-0.2274 put-by-val-with-string-replace-and-transition 19.7113+-0.6825 19.6830+-0.1754 put-by-val-with-string-slightly-polymorphic 4.7835+-0.1342 ? 4.8959+-0.1762 ? might be 1.0235x slower put-by-val-with-string 19.4439+-0.4082 19.4028+-0.6943 put-by-val-with-symbol-replace-and-transition 21.9227+-1.1804 21.5447+-0.5974 might be 1.0175x faster put-by-val-with-symbol-slightly-polymorphic 5.0620+-0.1708 ? 5.0638+-0.0389 ? put-by-val-with-symbol 19.1540+-0.3756 ? 19.3130+-0.4822 ? rare-osr-exit-on-local 17.2961+-0.1047 16.8087+-2.1965 might be 1.0290x faster raytrace-with-empty-try-catch 9.7394+-0.2013 9.5508+-0.1157 might be 1.0198x faster raytrace-with-try-catch 17.0383+-0.4553 ? 17.0453+-0.4433 ? register-pressure-from-osr 24.2247+-0.0925 ? 24.2310+-0.2294 ? repeat-multi-get-by-offset 25.8497+-0.3027 ? 26.2375+-0.8541 ? might be 1.0150x slower richards-empty-try-catch 74.0649+-1.5889 ? 75.3212+-1.0306 ? might be 1.0170x slower richards-try-catch 380.2310+-4.4057 ? 383.5835+-10.0136 ? set-for-each 7.3477+-0.1903 7.1918+-0.2008 might be 1.0217x faster set-for-of 11.5637+-0.1985 ? 11.7592+-0.4390 ? might be 1.0169x slower setter-prototype 9.4574+-0.3768 9.4074+-0.1455 setter 5.9648+-0.3266 5.7987+-0.3184 might be 1.0286x faster simple-activation-demo 32.2260+-0.7777 ? 32.5591+-0.9259 ? might be 1.0103x slower simple-getter-access 22.4758+-0.4640 22.4590+-1.2412 simple-poly-call-nested 7.3763+-0.1927 7.3392+-0.3182 simple-poly-call 1.9113+-0.0830 1.8445+-0.0908 might be 1.0362x faster sin-boolean 18.1660+-0.4029 18.0451+-0.1401 singleton-scope 77.1816+-1.1078 ? 77.2692+-0.7739 ? sink-function 10.0673+-0.8025 9.7680+-0.7466 might be 1.0306x faster sink-huge-activation 15.9868+-0.3957 15.8051+-0.5649 might be 1.0115x faster sinkable-new-object-dag 95.9852+-1.7120 ? 96.7305+-3.0798 ? sinkable-new-object-taken 74.4748+-0.7954 74.4005+-1.8803 sinkable-new-object 43.8137+-0.7714 ? 44.2670+-0.7976 ? might be 1.0103x slower slow-array-profile-convergence 4.2158+-0.2100 4.0260+-0.0837 might be 1.0471x faster slow-convergence 3.9286+-0.1762 ? 4.0897+-0.2551 ? might be 1.0410x slower slow-ternaries 25.8693+-0.4836 ? 26.0515+-0.7143 ? sorting-benchmark 25.7912+-0.6517 ? 26.1097+-0.4765 ? might be 1.0124x slower sparse-conditional 1.7997+-0.0674 1.7407+-0.1013 might be 1.0339x faster splice-to-remove 19.8302+-0.7036 19.3983+-0.1019 might be 1.0223x faster string-char-code-at 20.5723+-0.2979 ? 20.6144+-0.3160 ? string-concat-object 3.3813+-0.4347 3.2667+-0.0999 might be 1.0351x faster string-concat-pair-object 3.1800+-0.1042 ? 3.1929+-0.0491 ? string-concat-pair-simple 17.3473+-0.4367 ? 17.4147+-0.3214 ? string-concat-simple 17.0434+-0.3332 ? 17.3651+-0.4311 ? might be 1.0189x slower string-cons-repeat 11.3688+-0.1145 11.3597+-0.1005 string-cons-tower 10.9457+-0.4887 10.7888+-0.1827 might be 1.0145x faster string-equality 25.0823+-0.6966 24.8271+-0.3814 might be 1.0103x faster string-get-by-val-big-char 9.7296+-0.5642 9.1755+-0.6101 might be 1.0604x faster string-get-by-val-out-of-bounds-insane 5.0639+-0.1738 5.0045+-0.2398 might be 1.0119x faster string-get-by-val-out-of-bounds 6.7180+-0.1593 6.7173+-0.1091 string-get-by-val 4.9477+-0.1629 ? 4.9933+-0.1252 ? string-hash 2.8548+-0.1814 ? 2.9103+-0.1214 ? might be 1.0194x slower string-long-ident-equality 20.5215+-0.5573 20.4242+-0.2502 string-out-of-bounds 12.5106+-0.3454 12.3015+-0.1414 might be 1.0170x faster string-repeat-arith 34.6390+-0.8129 ? 34.6824+-0.6331 ? string-rope-with-object 21.2105+-0.2404 ? 21.5312+-1.2650 ? might be 1.0151x slower string-sub 56.2585+-0.7098 ? 56.7814+-0.6672 ? string-test 5.0455+-0.1746 4.9406+-0.0744 might be 1.0212x faster string-var-equality 61.2897+-5.0435 61.0154+-1.9532 structure-hoist-over-transitions 3.4108+-0.1520 ? 3.4870+-0.2559 ? might be 1.0224x slower substring-concat-weird 57.2344+-1.1400 ? 58.3620+-1.2887 ? might be 1.0197x slower substring-concat 62.6795+-1.2670 ? 62.9668+-1.0787 ? substring 70.9722+-0.7412 70.7723+-1.2181 switch-char-constant 3.5017+-0.0320 ? 3.5865+-0.1887 ? might be 1.0242x slower switch-char 8.0527+-0.2293 ? 8.1854+-0.3100 ? might be 1.0165x slower switch-constant 9.4952+-0.7420 ? 9.8021+-0.6142 ? might be 1.0323x slower switch-string-basic-big-var 30.8600+-3.2059 ? 32.3210+-3.1862 ? might be 1.0473x slower switch-string-basic-big 21.7714+-3.5127 21.3331+-2.7879 might be 1.0205x faster switch-string-basic-var 25.1937+-0.7572 24.2742+-2.1117 might be 1.0379x faster switch-string-basic 24.5512+-0.6932 ? 25.4567+-2.4670 ? might be 1.0369x slower switch-string-big-length-tower-var 25.8600+-1.3003 25.4553+-0.2503 might be 1.0159x faster switch-string-length-tower-var 20.9031+-0.4754 ? 20.9616+-0.7555 ? switch-string-length-tower 14.7100+-0.2008 14.3443+-0.1801 might be 1.0255x faster switch-string-short 17.6495+-3.2857 ? 18.4695+-1.9567 ? might be 1.0465x slower switch 13.8019+-0.3266 ? 14.2393+-0.4716 ? might be 1.0317x slower symbol-tostringtag 4.9202+-0.1107 ? 5.0250+-0.0340 ? might be 1.0213x slower tear-off-arguments-simple 4.1382+-0.3505 3.9279+-0.3773 might be 1.0536x faster tear-off-arguments 5.1936+-0.1300 5.1062+-0.2086 might be 1.0171x faster temporal-structure 16.7866+-0.1539 16.6800+-0.3682 to-int32-boolean 22.2523+-0.6386 ? 22.2543+-0.6094 ? try-catch-get-by-val-cloned-arguments 9.5323+-1.7107 ? 9.9928+-2.6355 ? might be 1.0483x slower try-catch-get-by-val-direct-arguments 3.4053+-0.2578 ? 3.5062+-0.4050 ? might be 1.0296x slower try-catch-get-by-val-scoped-arguments 6.4220+-0.3463 6.2363+-0.1786 might be 1.0298x faster typed-array-get-set-by-val-profiling 28.3992+-0.3973 ? 29.3038+-0.9898 ? might be 1.0319x slower undefined-property-access 416.6966+-0.4296 416.5255+-0.9810 undefined-test 5.2035+-0.2725 5.1164+-0.1153 might be 1.0170x faster unprofiled-licm 13.0049+-0.5487 12.9457+-0.5758 v8-raytrace-with-empty-try-catch 88.3940+-0.6285 ? 88.8006+-0.8260 ? v8-raytrace-with-try-catch 113.7247+-1.3148 113.0792+-1.7639 varargs-call 17.3661+-0.7775 17.0636+-0.0860 might be 1.0177x faster varargs-construct-inline 32.1750+-1.5263 31.3258+-0.6669 might be 1.0271x faster varargs-construct 27.3507+-0.0378 ? 27.9266+-0.9531 ? might be 1.0211x slower varargs-inline 10.8823+-0.3440 10.8804+-0.2138 varargs-strict-mode 14.0779+-0.1902 13.8708+-0.4971 might be 1.0149x faster varargs 13.7607+-0.0901 13.7535+-0.2575 weird-inlining-const-prop 3.2292+-0.1077 3.1900+-0.1802 might be 1.0123x faster <geometric> 12.6957+-0.0435 12.6625+-0.0204 might be 1.0026x faster Conf#1 Conf#2 AsmBench: bigfib.cpp 673.0545+-24.1778 ? 676.2591+-8.9048 ? cray.c 594.9161+-7.2478 ? 605.5986+-7.8252 ? might be 1.0180x slower dry.c 645.0521+-0.6494 ? 645.4293+-1.4053 ? FloatMM.c 1022.7501+-65.1852 1022.4031+-64.3301 gcc-loops.cpp 6402.6933+-60.2925 ? 6411.9796+-41.8254 ? n-body.c 1589.9793+-5.0328 ! 1794.4055+-11.6615 ! definitely 1.1286x slower Quicksort.c 589.7418+-8.7599 589.2413+-8.2093 stepanov_container.cpp 4474.2108+-44.6953 ? 4484.1943+-11.8724 ? Towers.c 403.9198+-24.6696 ! 430.2201+-1.5898 ! definitely 1.0651x slower <geometric> 1123.9434+-8.9705 ! 1150.5234+-5.3715 ! definitely 1.0236x slower Conf#1 Conf#2 CompressionBench: huffman 81.0822+-1.3851 ? 81.4351+-1.2615 ? arithmetic-simple 426.2757+-1.3350 ? 427.7866+-1.2533 ? arithmetic-precise 363.7267+-4.1409 361.4410+-2.2837 arithmetic-complex-precise 362.5070+-1.5892 360.3991+-1.4439 arithmetic-precise-order-0 435.8502+-1.3809 435.5358+-1.3720 arithmetic-precise-order-1 422.9440+-3.7921 ? 423.1777+-2.5906 ? arithmetic-precise-order-2 489.8008+-2.3222 ? 494.8420+-9.5978 ? might be 1.0103x slower arithmetic-simple-order-1 489.1820+-0.5104 489.1222+-0.6022 arithmetic-simple-order-2 553.1318+-3.0236 ? 556.0154+-5.3832 ? lz-string 434.1714+-9.6298 431.8125+-7.8192 <geometric> 370.1903+-1.6201 ? 370.3911+-1.2487 ? might be 1.0005x slower Conf#1 Conf#2 Geomean of preferred means: <scaled-result> 78.1663+-0.1779 78.0967+-0.1424 might be 1.0009x faster
Filip Pizlo
Comment 3 2016-01-25 23:29:28 PST
Comment on attachment 269856 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=269856&action=review I guess I'm OK with these heuristics, but I think that the heuristics I'm proposing are better, and they match the intuition that you provide in the ChangeLog. If you do land this, then please change the ChangeLog to account for the fact that we can already do the better thing. > Source/JavaScriptCore/ChangeLog:26 > + Ideally, we should change UseCount to be loop aware but that seemed Actually, that's not what you want - you want to check if either value's owning block has lower execution frequency. > Source/JavaScriptCore/b3/B3LowerToAir.cpp:604 > + // If one operand is not in the block, it could be in a block dominating a loop > + // containing m_value. > + if (left->owner == m_value->owner) > + return false; > + if (right->owner == m_value->owner) > + return true; Or you could check left->owner->frequency() and right->owner->frequency(). If either of them has lower frequency than m_value->owner->frequency(), then they are from a block dominating the loop!
Benjamin Poulain
Comment 4 2016-01-26 13:45:16 PST
Benjamin Poulain
Comment 5 2016-01-26 13:46:00 PST
The frequency felt a bit weak for me since it is not a property of the CFG. What do you think of this?
Filip Pizlo
Comment 6 2016-01-26 14:03:31 PST
Comment on attachment 269912 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=269912&action=review > Source/JavaScriptCore/ChangeLog:28 > + -Otherwise, use the lowest frequency block if the frequency is set. But, you want to use the highest frequency. Lowest frequency means: highest likelihood of being a value that is live "around" the loop. You want the highest frequency that is less than the frequency of the owning block. Probably if you did this, then you wouldn't need the other heuristic. That said, I'm totally OK with this patch just using the same-block rule, so long as the comments explain that this is an approximation of something else. In particular, I'm surprised that you haven't mentioned in comments that what we're actually after is whether m_value kills the value that we use for UseDef. We use use count being 1 to approximate this, which usually makes sense, because if I am the only user of some value then this value is usually not live after me. But use count could be 1 if the value I'm using was hoisted out of a loop. Since the same-block heuristic is the thing that gives a speed-up, it makes sense for the patch to just have that, so long as you document the intuition.
Filip Pizlo
Comment 7 2016-01-26 14:04:17 PST
Comment on attachment 269912 [details] Patch Setting R- because the lowest-frequency rule is actually the opposite of what we want. Lowest frequency implies highest likelihood of being a hoisted value and so being live after the use.
Benjamin Poulain
Comment 8 2016-01-26 16:05:34 PST
Filip Pizlo
Comment 9 2016-01-26 16:10:04 PST
Comment on attachment 269940 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=269940&action=review > Source/JavaScriptCore/ChangeLog:39 > + There is one other way that would be cheap but a bit invasive: > + -Get rid of UseDef. > + -Make every ops, 3 operands. > + -Tell the register allocator to attempt aliasing of the 2 uses > + with the def. > + -If the allocator fails, just add a move as needed. I agree with this. I was thinking it would work like this: - Make AirOpcodes.opcodes pretend that X86 has three-operand add, sub, and mul. - Make MacroAssemblerX86 implement the three-operand forms by doing an extra move or whatever (in the case of sub it might turn into a neg+add if the operands are aliased a certain way) - Have an Air analysis that tells you if an Inst has a "desired aliasing". This will not be an analysis based on AirOpcodes since that seems too complicated. It will just know about the add, sub, and mul situation on x86.
Benjamin Poulain
Comment 10 2016-01-26 21:14:58 PST
Created attachment 269979 [details] Patch for landing
WebKit Commit Bot
Comment 11 2016-01-26 22:10:24 PST
Comment on attachment 269979 [details] Patch for landing Clearing flags on attachment: 269979 Committed r195654: <http://trac.webkit.org/changeset/195654>
WebKit Commit Bot
Comment 12 2016-01-26 22:10:28 PST
All reviewed patches have been landed. Closing bug.
Filip Pizlo
Comment 13 2016-01-27 21:20:41 PST
> Conf#1 > Conf#2 > AsmBench: > bigfib.cpp 673.0545+-24.1778 ? > 676.2591+-8.9048 ? > cray.c 594.9161+-7.2478 ? > 605.5986+-7.8252 ? might be 1.0180x slower > dry.c 645.0521+-0.6494 ? > 645.4293+-1.4053 ? > FloatMM.c 1022.7501+-65.1852 > 1022.4031+-64.3301 > gcc-loops.cpp 6402.6933+-60.2925 ? > 6411.9796+-41.8254 ? > n-body.c 1589.9793+-5.0328 ! > 1794.4055+-11.6615 ! definitely 1.1286x slower > Quicksort.c 589.7418+-8.7599 > 589.2413+-8.2093 > stepanov_container.cpp 4474.2108+-44.6953 ? > 4484.1943+-11.8724 ? > Towers.c 403.9198+-24.6696 ! > 430.2201+-1.5898 ! definitely 1.0651x slower > > <geometric> 1123.9434+-8.9705 ! > 1150.5234+-5.3715 ! definitely 1.0236x slower I can't believe we missed this! We can't slow down AsmBench, it's from JetStream. This is a huge slow-down on n-body.
Filip Pizlo
Comment 14 2016-01-27 21:48:45 PST
(In reply to comment #13) > > Conf#1 > > Conf#2 > > AsmBench: > > bigfib.cpp 673.0545+-24.1778 ? > > 676.2591+-8.9048 ? > > cray.c 594.9161+-7.2478 ? > > 605.5986+-7.8252 ? might be 1.0180x slower > > dry.c 645.0521+-0.6494 ? > > 645.4293+-1.4053 ? > > FloatMM.c 1022.7501+-65.1852 > > 1022.4031+-64.3301 > > gcc-loops.cpp 6402.6933+-60.2925 ? > > 6411.9796+-41.8254 ? > > n-body.c 1589.9793+-5.0328 ! > > 1794.4055+-11.6615 ! definitely 1.1286x slower > > Quicksort.c 589.7418+-8.7599 > > 589.2413+-8.2093 > > stepanov_container.cpp 4474.2108+-44.6953 ? > > 4484.1943+-11.8724 ? > > Towers.c 403.9198+-24.6696 ! > > 430.2201+-1.5898 ! definitely 1.0651x slower > > > > <geometric> 1123.9434+-8.9705 ! > > 1150.5234+-5.3715 ! definitely 1.0236x slower > > I can't believe we missed this! We can't slow down AsmBench, it's from > JetStream. This is a huge slow-down on n-body. Fix: https://bugs.webkit.org/show_bug.cgi?id=153583
Note You need to log in before you can comment on or make changes to this bug.