To reproduce: 1. go to maps.google.com 2. type "Paris" in search field, submit 3. type "London" in search field, submit In the debugger, I can see that we are crashing at: 'WebCore: Worker', stop reason = EXC_BAD_ACCESS (code=1, address=0xbbadbeef) frame #0: 0x000000010c97b877 JavaScriptCore`::WTFCrash() + 39 at Assertions.cpp:321 * frame #1: 0x000000010c32fb6b JavaScriptCore`JSC::FTL::(anonymous namespace)::recoveryFor(value=0x0000000130bcff40, record=0x000000012caf1660, stackmaps=0x000000012f6cad80) + 539 at FTLJSTailCall.cpp:79 frame #2: 0x000000010c32eeae JavaScriptCore`JSC::FTL::JSTailCall::emit(this=0x000000013407ef00, jitCode=0x000000012f6cac80, jit=0x00007000007b8c08) + 830 at FTLJSTailCall.cpp:261 frame #3: 0x000000010c2fb313 JavaScriptCore`JSC::FTL::fixFunctionBasedOnStackMaps(state=0x00007000007ba788, codeBlock=0x00000001314c8700, jitCode=0x000000012f6cac80, generatedFunction=0x0000409246d78ee0, recordMap={ size = 0, capacity = 0 })(JSC::ExecState*), WTF::HashMap<unsigned int, WTF::Vector<JSC::FTL::StackMaps::RecordAndIndex, 0ul, WTF::CrashOnOverflow, 16ul>, WTF::IntHash<unsigned int>, WTF::UnsignedWithZeroKeyHashTraits<unsigned int>, WTF::HashTraits<WTF::Vector<JSC::FTL::StackMaps::RecordAndIndex, 0ul, WTF::CrashOnOverflow, 16ul> > >&) + 15171 at FTLCompile.cpp:691 frame #4: 0x000000010c2f6e63 JavaScriptCore`JSC::FTL::compile(state=0x00007000007ba788, safepointResult=0x00007000007ba8f8) + 4259 at FTLCompile.cpp:920 ... The RELEASE_ASSERT in question is found in: ValueRecovery recoveryFor(const ExitValue& value, StackMaps::Record& record, StackMaps& stackmaps) { switch (value.kind()) { ... case ExitValueArgument: { auto location = FTL::Location::forStackmaps(&stackmaps, record.locations[value.exitArgument().argument()]); auto format = value.exitArgument().format(); switch (location.kind()) { case Location::Register: // We handle the addend outside return ValueRecovery::inRegister(location.dwarfReg().reg(), format); case Location::Indirect: // Oh LLVM, you crazy... RELEASE_ASSERT(location.dwarfReg().reg() == Reg(MacroAssembler::framePointerRegister)); ==> RELEASE_ASSERT(!(location.offset() % sizeof(void*))); return ValueRecovery::displacedInJSStack(VirtualRegister { static_cast<int>(location.offset() / sizeof(void*)) }, format); case Location::Constant: return ValueRecovery::constant(JSValue::decode(location.constant())); default: RELEASE_ASSERT_NOT_REACHED(); } } ... } The location (from elsewhere in the debug output) is (Indirect, %rbp, off:-84, size:4). Clearly the address is not 8 byte aligned. It is a 4 byte value that is naturally aligned. Looks like we need teach the call frame shuffler to handle such cases. Currently the FTL tail call code allows 32 bit integers and booleans to be saved on the stack as 32 bit values. The Call Frame shuffler properly boxes these values, but represents their stack location as a VirtualRegister. In preparing a test case, I ran across another related issue. ASSERTION FAILED: !isUndecided() /Volumes/Data/src/webkit/Source/JavaScriptCore/jit/CallFrameShuffler.cpp(309) : void JSC::CallFrameShuffler::extendFrameIfNeeded() 1 0x10909b870 WTFCrash 2 0x10859a044 JSC::CallFrameShuffler::extendFrameIfNeeded() 3 0x108599ede JSC::CallFrameShuffler::spill(JSC::CachedRecovery&) 4 0x10859fa7f void JSC::CallFrameShuffler::ensureRegister<JSC::CallFrameShuffler::ensureGPR()::'lambda'(JSC::CachedRecovery const&)>(JSC::CallFrameShuffler::ensureGPR()::'lambda'(JSC::CachedRecovery const&) const&) 5 0x10859f8fd JSC::CallFrameShuffler::ensureGPR() 6 0x10859d069 JSC::CallFrameShuffler::acquireGPR() 7 0x10859aed4 JSC::CallFrameShuffler::prepareForTailCall() 8 0x108a4f7da JSC::FTL::JSTailCall::emit(JSC::FTL::JITCode&, JSC::CCallHelpers&) ... I'll address that issue with this bug as well.
Created attachment 264101 [details] Regression tests
Created attachment 264131 [details] Patch
Performance of this change appears to be neutral. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on il0204a-dhcp117 (MacPro6,1). VMs tested: "Baseline" at /Volumes/Data/src/webkit.work/WebKitBuild/Release/JavaScriptCore.framework/Versions/A/Resources/jsc "PreBoxFTLInt32s" at /Volumes/Data/src/webkit/WebKitBuild/Release/JavaScriptCore.framework/Versions/A/Resources/jsc Collected 4 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds. Baseline PreBoxFTLInt32s SunSpider: 3d-cube 6.2148+-0.0941 ? 6.4542+-0.6916 ? might be 1.0385x slower 3d-morph 6.2194+-0.2025 ? 6.2983+-0.1965 ? might be 1.0127x slower 3d-raytrace 7.5460+-0.4713 7.2920+-0.1982 might be 1.0348x faster access-binary-trees 2.6520+-0.1544 ? 2.6805+-0.2035 ? might be 1.0107x slower access-fannkuch 7.0262+-0.1568 ? 7.0462+-0.0652 ? access-nbody 3.4292+-0.1013 ? 3.4310+-0.0966 ? access-nsieve 4.0837+-0.3533 ? 4.1035+-0.3023 ? bitops-3bit-bits-in-byte 1.5819+-0.1380 1.5580+-0.0274 might be 1.0153x faster bitops-bits-in-byte 3.9532+-0.1821 3.9171+-0.1505 bitops-bitwise-and 2.4691+-0.0647 ? 2.4825+-0.0926 ? bitops-nsieve-bits 3.6655+-0.1019 ? 3.6865+-0.0959 ? controlflow-recursive 2.9904+-0.2705 ? 3.0251+-0.2075 ? might be 1.0116x slower crypto-aes 5.2943+-0.2214 ? 5.2960+-0.3508 ? crypto-md5 3.2125+-0.2495 3.1935+-0.1111 crypto-sha1 3.1133+-0.0476 3.0832+-0.0787 date-format-tofte 10.8305+-0.2239 ? 11.1432+-0.1444 ? might be 1.0289x slower date-format-xparb 5.9739+-0.2004 5.8312+-0.1284 might be 1.0245x faster math-cordic 3.4450+-0.0642 ? 3.5473+-0.2258 ? might be 1.0297x slower math-partial-sums 6.2438+-0.2467 ? 6.2527+-0.3319 ? math-spectral-norm 2.4422+-0.0583 ? 2.4695+-0.0408 ? might be 1.0112x slower regexp-dna 7.7332+-0.2028 7.6055+-0.2047 might be 1.0168x faster string-base64 5.0298+-0.1066 5.0240+-0.0927 string-fasta 7.1281+-0.1330 ? 7.2178+-0.2013 ? might be 1.0126x slower string-tagcloud 9.9969+-0.3588 ? 10.1135+-0.3114 ? might be 1.0117x slower string-unpack-code 22.0511+-0.7096 21.6501+-0.4602 might be 1.0185x faster string-validate-input 5.2700+-0.2565 ? 5.3326+-0.2425 ? might be 1.0119x slower <arithmetic> 5.7537+-0.0141 ? 5.7590+-0.0220 ? might be 1.0009x slower Baseline PreBoxFTLInt32s LongSpider: 3d-cube 940.8076+-9.3197 ? 941.7538+-15.6120 ? 3d-morph 1642.9649+-6.4640 1638.6827+-9.0761 3d-raytrace 750.8982+-41.5322 741.8561+-20.5264 might be 1.0122x faster access-binary-trees 989.3818+-1.4279 ? 990.8593+-18.4805 ? access-fannkuch 388.0399+-5.6839 ? 398.8783+-19.7279 ? might be 1.0279x slower access-nbody 634.0228+-7.0741 632.7670+-8.0906 access-nsieve 464.4068+-7.6641 ? 465.5072+-11.2121 ? bitops-3bit-bits-in-byte 42.3121+-3.7445 41.0021+-1.1835 might be 1.0319x faster bitops-bits-in-byte 104.5722+-3.3744 104.0079+-2.0924 bitops-nsieve-bits 466.4559+-6.0701 ? 469.1678+-9.3120 ? controlflow-recursive 515.3782+-14.8874 515.3503+-8.9452 crypto-aes 679.1721+-8.6376 ? 679.4222+-5.0475 ? crypto-md5 566.2807+-14.2728 557.2337+-9.7076 might be 1.0162x faster crypto-sha1 785.1097+-5.7252 ? 790.1375+-14.8231 ? date-format-tofte 789.2453+-18.4256 ? 797.1563+-4.3182 ? might be 1.0100x slower date-format-xparb 862.9313+-62.4764 831.3368+-31.6346 might be 1.0380x faster hash-map 176.9453+-9.3165 ? 180.2108+-0.9111 ? might be 1.0185x slower math-cordic 580.3956+-5.2929 ? 588.7238+-33.1083 ? might be 1.0143x slower math-partial-sums 583.4321+-3.0188 ? 586.3610+-9.0322 ? math-spectral-norm 615.8082+-7.1590 608.6412+-4.0501 might be 1.0118x faster string-base64 434.9128+-41.9847 431.3885+-25.1955 string-fasta 434.6727+-7.1975 428.6823+-5.4882 might be 1.0140x faster string-tagcloud 215.8903+-3.7499 213.4545+-5.5084 might be 1.0114x faster <geometric> 478.3271+-3.3201 477.1368+-2.1651 might be 1.0025x faster Baseline PreBoxFTLInt32s V8Spider: crypto 61.2333+-1.8838 ? 61.3387+-0.3341 ? deltablue 78.5079+-2.1420 78.2502+-1.8278 earley-boyer 51.6871+-1.3964 51.5868+-0.1978 raytrace 36.5842+-1.1362 36.4056+-1.3315 regexp 79.6995+-3.9549 79.6559+-2.3859 richards 62.7415+-1.9112 61.7437+-0.2156 might be 1.0162x faster splay 41.6173+-1.3481 ? 41.6315+-1.1110 ? <geometric> 56.7242+-0.3732 56.5305+-0.5924 might be 1.0034x faster Baseline PreBoxFTLInt32s Octane: encrypt 0.19417+-0.00133 0.19382+-0.00177 decrypt 3.50973+-0.02808 3.49465+-0.01185 deltablue x2 0.16629+-0.00355 0.16440+-0.00127 might be 1.0115x faster earley 0.37969+-0.00543 0.37641+-0.00362 boyer 5.52998+-0.14947 5.48328+-0.05151 navier-stokes x2 5.44641+-0.06382 ? 5.45624+-0.06615 ? raytrace x2 1.06398+-0.01498 1.06183+-0.00806 richards x2 0.11166+-0.00179 0.11101+-0.00126 splay x2 0.40268+-0.01106 0.39693+-0.00659 might be 1.0145x faster regexp x2 28.90770+-0.20078 ? 29.19998+-0.27030 ? might be 1.0101x slower pdfjs x2 46.52398+-1.03556 46.19272+-0.56269 mandreel x2 52.18198+-1.97730 51.53042+-0.25149 might be 1.0126x faster gbemu x2 45.94178+-8.59085 41.37851+-0.91533 might be 1.1103x faster closure 0.80846+-0.04243 0.78717+-0.01119 might be 1.0271x faster jquery 10.17709+-0.20703 10.02342+-0.14564 might be 1.0153x faster box2d x2 12.79706+-0.26189 12.79078+-0.16641 zlib x2 447.75618+-4.95026 ? 449.33575+-4.36875 ? typescript x2 939.76923+-4.33916 ? 944.00244+-14.79845 ? <geometric> 6.71866+-0.07145 6.64490+-0.01211 might be 1.0111x faster Baseline PreBoxFTLInt32s Kraken: ai-astar 178.541+-3.560 ? 179.230+-3.414 ? audio-beat-detection 62.661+-2.810 61.231+-0.724 might be 1.0234x faster audio-dft 114.784+-2.930 ? 115.948+-3.747 ? might be 1.0101x slower audio-fft 43.562+-1.755 43.001+-0.401 might be 1.0131x faster audio-oscillator 70.994+-0.173 ? 71.903+-1.682 ? might be 1.0128x slower imaging-darkroom 75.412+-3.414 73.748+-0.449 might be 1.0226x faster imaging-desaturate 67.449+-1.678 67.156+-0.798 imaging-gaussian-blur 118.239+-6.792 ? 120.146+-5.035 ? might be 1.0161x slower json-parse-financial 48.441+-0.476 48.097+-0.543 json-stringify-tinderbox 29.162+-0.173 28.671+-0.752 might be 1.0171x faster stanford-crypto-aes 51.905+-1.595 51.721+-1.065 stanford-crypto-ccm 49.328+-3.284 47.184+-1.935 might be 1.0454x faster stanford-crypto-pbkdf2 114.776+-1.539 ? 114.810+-1.238 ? stanford-crypto-sha256-iterative 45.946+-3.011 44.845+-0.497 might be 1.0246x faster <arithmetic> 76.514+-0.817 76.264+-0.580 might be 1.0033x faster Baseline PreBoxFTLInt32s JSRegress: abc-forward-loop-equal 50.2402+-0.8637 ? 51.2253+-2.2987 ? might be 1.0196x slower abc-postfix-backward-loop 50.0290+-0.9427 49.8762+-1.0011 abc-simple-backward-loop 49.0145+-0.1418 ? 49.1535+-0.3861 ? abc-simple-forward-loop 49.3391+-0.3587 ? 50.0663+-1.1820 ? might be 1.0147x slower abc-skippy-loop 34.0459+-0.2423 ? 34.1214+-0.5045 ? abs-boolean 3.0757+-0.1757 3.0278+-0.0673 might be 1.0158x faster adapt-to-double-divide 18.2942+-0.3519 18.1439+-0.4199 aliased-arguments-getbyval 1.4340+-0.0551 1.4261+-0.0672 allocate-big-object 2.8903+-0.2354 2.8224+-0.1672 might be 1.0240x faster arguments-named-and-reflective 12.3668+-0.2049 ? 12.3676+-0.3130 ? arguments-out-of-bounds 13.5527+-0.3998 ? 13.7493+-0.5126 ? might be 1.0145x slower arguments-strict-mode 11.5693+-0.4371 11.3232+-0.1629 might be 1.0217x faster arguments 10.1685+-0.2634 ? 10.5994+-0.5528 ? might be 1.0424x slower arity-mismatch-inlining 1.1640+-0.0253 ? 1.1663+-0.0227 ? array-access-polymorphic-structure 8.1155+-0.1667 8.0523+-0.1909 array-nonarray-polymorhpic-access 33.1349+-1.1479 32.7985+-0.9557 might be 1.0103x faster array-prototype-every 92.9955+-2.3253 ? 96.8941+-3.4423 ? might be 1.0419x slower array-prototype-forEach 92.1290+-3.1814 ? 96.3050+-4.6991 ? might be 1.0453x slower array-prototype-map 99.8149+-1.3397 ! 105.4871+-3.5730 ! definitely 1.0568x slower array-prototype-reduce 89.1817+-1.5166 ? 92.6774+-3.3820 ? might be 1.0392x slower array-prototype-reduceRight 89.3845+-2.3758 ? 94.1175+-5.9113 ? might be 1.0530x slower array-prototype-some 94.5863+-3.6326 ? 97.8452+-5.3238 ? might be 1.0345x slower array-splice-contiguous 28.4787+-0.2915 ! 31.2281+-1.0513 ! definitely 1.0965x slower array-with-double-add 4.8608+-0.2526 4.7637+-0.1113 might be 1.0204x faster array-with-double-increment 3.7536+-0.0815 ? 3.8190+-0.2003 ? might be 1.0174x slower array-with-double-mul-add 5.6903+-0.2431 ? 5.8330+-0.3638 ? might be 1.0251x slower array-with-double-sum 3.6302+-0.0694 ? 3.6993+-0.1207 ? might be 1.0190x slower array-with-int32-add-sub 7.8112+-0.1500 ? 7.9252+-0.2484 ? might be 1.0146x slower array-with-int32-or-double-sum 3.7527+-0.0793 ? 3.9330+-0.1243 ? might be 1.0480x slower ArrayBuffer-DataView-alloc-large-long-lived 32.9283+-0.6602 32.7499+-0.6099 ArrayBuffer-DataView-alloc-long-lived 14.0375+-0.1353 14.0127+-0.4305 ArrayBuffer-Int32Array-byteOffset 4.1135+-0.0490 ? 4.1640+-0.0990 ? might be 1.0123x slower ArrayBuffer-Int8Array-alloc-large-long-lived 33.3830+-1.5201 32.7255+-0.1730 might be 1.0201x faster ArrayBuffer-Int8Array-alloc-long-lived-buffer 23.4248+-1.2986 22.2359+-0.3148 might be 1.0535x faster ArrayBuffer-Int8Array-alloc-long-lived 13.0200+-0.6324 12.7263+-0.1114 might be 1.0231x faster ArrayBuffer-Int8Array-alloc 11.0998+-0.5355 10.8727+-0.2699 might be 1.0209x faster arrowfunction-call 13.1606+-1.0116 12.9675+-0.4517 might be 1.0149x faster asmjs_bool_bug 9.0383+-0.3022 9.0145+-0.1643 assign-custom-setter-polymorphic 3.5944+-0.1532 3.5699+-0.3727 assign-custom-setter 5.0507+-0.1564 ? 5.1003+-0.1862 ? basic-set 9.6675+-0.6046 9.5262+-0.2082 might be 1.0148x faster big-int-mul 4.3267+-0.1034 ? 4.4084+-0.1603 ? might be 1.0189x slower boolean-test 3.5900+-0.1398 ? 3.6580+-0.0961 ? might be 1.0189x slower branch-fold 4.2740+-0.1490 ? 4.3713+-0.0265 ? might be 1.0227x slower branch-on-string-as-boolean 21.1257+-0.6079 ? 21.4606+-0.8541 ? might be 1.0158x slower by-val-generic 2.8679+-0.1738 ? 2.9502+-0.2865 ? might be 1.0287x slower call-spread-apply 33.8553+-1.7908 ? 34.3633+-2.0224 ? might be 1.0150x slower call-spread-call 26.3990+-0.6678 ? 27.0535+-0.2670 ? might be 1.0248x slower captured-assignments 0.7422+-0.0311 0.7340+-0.0176 might be 1.0111x faster cast-int-to-double 5.8753+-0.1008 ? 5.9292+-0.1600 ? cell-argument 7.3555+-0.3048 ? 7.4595+-0.2388 ? might be 1.0141x slower cfg-simplify 3.1850+-0.1725 ? 3.2753+-0.2365 ? might be 1.0283x slower chain-getter-access 10.0110+-0.1717 ? 10.1250+-0.4655 ? might be 1.0114x slower cmpeq-obj-to-obj-other 12.1422+-0.0139 ? 12.1870+-0.0606 ? constant-test 5.5707+-0.2877 5.5367+-0.0505 create-lots-of-functions 11.8147+-0.4595 ? 11.8954+-0.4826 ? cse-new-array-buffer 2.8336+-0.2145 ^ 2.5278+-0.0643 ^ definitely 1.1210x faster cse-new-array 2.7709+-0.1711 2.7319+-0.1003 might be 1.0143x faster custom-setter-getter-as-put-get-by-id 0.8033+-0.0655 0.7943+-0.0603 might be 1.0114x faster DataView-custom-properties 38.5257+-1.8624 37.8109+-0.1272 might be 1.0189x faster delay-tear-off-arguments-strictmode 15.9185+-0.6283 15.1660+-0.3243 might be 1.0496x faster deltablue-varargs 235.5263+-2.9226 233.7599+-2.6184 destructuring-arguments 193.9862+-8.1080 192.8431+-2.8130 destructuring-parameters-overridden-by-function 0.7320+-0.0168 ? 0.7465+-0.0220 ? might be 1.0198x slower destructuring-swap 5.7058+-0.1077 ? 5.8315+-0.0995 ? might be 1.0220x slower direct-arguments-getbyval 1.4765+-0.2057 1.3923+-0.0509 might be 1.0605x faster div-boolean-double 5.8753+-0.3601 5.8051+-0.3449 might be 1.0121x faster div-boolean 8.3849+-0.0824 ? 8.4809+-0.1776 ? might be 1.0115x slower double-get-by-val-out-of-bounds 5.2696+-0.3860 5.1882+-0.0900 might be 1.0157x faster double-pollution-getbyval 9.3343+-0.1118 ? 9.5455+-0.3879 ? might be 1.0226x slower double-pollution-putbyoffset 4.4062+-0.1122 4.3776+-0.1757 double-real-use 31.8518+-0.4297 31.6773+-0.4052 double-to-int32-typed-array-no-inline 2.8122+-0.0699 ? 2.8889+-0.0722 ? might be 1.0273x slower double-to-int32-typed-array 2.6300+-0.0901 2.6022+-0.1117 might be 1.0107x faster double-to-uint32-typed-array-no-inline 2.9015+-0.1411 ? 2.9442+-0.0340 ? might be 1.0147x slower double-to-uint32-typed-array 2.5670+-0.0872 ? 2.6187+-0.2149 ? might be 1.0201x slower elidable-new-object-dag 42.5505+-1.8844 41.7448+-1.1325 might be 1.0193x faster elidable-new-object-roflcopter 39.4021+-0.4579 39.0421+-0.7278 elidable-new-object-then-call 39.4576+-0.8095 ? 39.5528+-0.7058 ? elidable-new-object-tree 46.2700+-1.4768 ? 46.4642+-1.4857 ? empty-string-plus-int 5.6387+-0.3059 5.5743+-0.1505 might be 1.0116x faster emscripten-cube2hash 43.2682+-1.4408 ? 43.9110+-2.9521 ? might be 1.0149x slower exit-length-on-plain-object 17.4927+-0.3907 ? 17.6975+-0.4490 ? might be 1.0117x slower external-arguments-getbyval 1.4532+-0.0482 ? 1.5660+-0.1182 ? might be 1.0776x slower external-arguments-putbyval 2.7966+-0.1295 2.6990+-0.0823 might be 1.0361x faster fixed-typed-array-storage-var-index 1.6100+-0.0201 ? 1.6353+-0.0625 ? might be 1.0157x slower fixed-typed-array-storage 1.2960+-0.1041 1.2575+-0.0395 might be 1.0306x faster Float32Array-matrix-mult 5.5995+-0.1521 5.5424+-0.2076 might be 1.0103x faster Float32Array-to-Float64Array-set 54.7717+-0.4830 ! 56.0953+-0.2854 ! definitely 1.0242x slower Float64Array-alloc-long-lived 73.7968+-1.3100 73.2043+-0.8782 Float64Array-to-Int16Array-set 68.4170+-0.4497 ? 69.8467+-1.8223 ? might be 1.0209x slower fold-double-to-int 15.3378+-0.3960 15.3355+-0.4390 fold-get-by-id-to-multi-get-by-offset-rare-int 11.1866+-0.0262 11.0127+-0.4283 might be 1.0158x faster fold-get-by-id-to-multi-get-by-offset 9.5811+-0.0430 9.4402+-0.3395 might be 1.0149x faster fold-multi-get-by-offset-to-get-by-offset 8.1375+-0.1611 7.9078+-0.6992 might be 1.0291x faster fold-multi-get-by-offset-to-poly-get-by-offset 8.9280+-0.0945 8.8614+-0.0543 fold-multi-put-by-offset-to-poly-put-by-offset 10.8060+-0.1099 10.7455+-0.0289 fold-multi-put-by-offset-to-put-by-offset 10.1050+-0.6640 10.0685+-0.6117 fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 14.1130+-1.2301 ? 14.4450+-0.4752 ? might be 1.0235x slower fold-put-by-id-to-multi-put-by-offset 12.4522+-0.0763 12.2606+-0.8641 might be 1.0156x faster fold-put-by-val-with-string-to-multi-put-by-offset 12.1863+-0.5645 ? 12.3240+-0.1295 ? might be 1.0113x slower fold-put-by-val-with-symbol-to-multi-put-by-offset 12.0270+-0.6501 ? 12.3141+-0.2170 ? might be 1.0239x slower fold-put-structure 7.9542+-0.0866 ? 8.0029+-0.0969 ? for-of-iterate-array-entries 13.7131+-0.6233 13.3734+-0.6796 might be 1.0254x faster for-of-iterate-array-keys 4.4119+-0.4171 ? 4.4144+-0.3741 ? for-of-iterate-array-values 4.2260+-0.2088 ? 4.3026+-0.2262 ? might be 1.0181x slower fround 19.9249+-1.0131 19.8055+-0.6136 ftl-library-inlining-dataview 72.0958+-0.8138 ? 72.2955+-0.2112 ? ftl-library-inlining 111.8687+-38.0840 89.3734+-43.0011 might be 1.2517x faster function-call 12.7239+-0.1945 ? 12.9217+-0.3563 ? might be 1.0155x slower function-dot-apply 2.6595+-0.1251 ? 2.7103+-0.0639 ? might be 1.0191x slower function-test 3.3077+-0.0906 3.2528+-0.0652 might be 1.0169x faster function-with-eval 104.2967+-0.4562 ^ 102.6255+-0.4592 ^ definitely 1.0163x faster gcse-poly-get-less-obvious 30.4907+-1.7769 30.2523+-1.0987 gcse-poly-get 31.5977+-0.8864 31.2815+-0.2276 might be 1.0101x faster gcse 4.4071+-0.0633 ? 4.6017+-0.1870 ? might be 1.0442x slower get-by-id-bimorphic-check-structure-elimination-simple 3.1148+-0.0561 ? 3.1216+-0.0747 ? get-by-id-bimorphic-check-structure-elimination 5.7587+-0.0777 ? 5.8821+-0.1700 ? might be 1.0214x slower get-by-id-chain-from-try-block 2.8441+-0.1988 ? 2.8459+-0.0255 ? get-by-id-check-structure-elimination 5.0631+-0.1515 ? 5.1715+-0.3299 ? might be 1.0214x slower get-by-id-proto-or-self 22.8621+-3.9167 20.5775+-1.0268 might be 1.1110x faster get-by-id-quadmorphic-check-structure-elimination-simple 3.3589+-0.1872 ? 3.3831+-0.1299 ? get-by-id-self-or-proto 20.7328+-0.8347 ? 22.1713+-3.4168 ? might be 1.0694x slower get-by-val-out-of-bounds 5.0667+-0.1474 ? 5.3183+-0.6601 ? might be 1.0497x slower get-by-val-with-string-bimorphic-check-structure-elimination-simple 3.0930+-0.1694 ? 3.1014+-0.1010 ? get-by-val-with-string-bimorphic-check-structure-elimination 7.4211+-0.4167 ? 7.4658+-0.1396 ? get-by-val-with-string-chain-from-try-block 2.8822+-0.2129 ? 2.8831+-0.0634 ? get-by-val-with-string-check-structure-elimination 6.7841+-0.3983 6.7111+-0.3411 might be 1.0109x faster get-by-val-with-string-proto-or-self 22.1000+-2.9579 21.6891+-3.4442 might be 1.0189x faster get-by-val-with-string-quadmorphic-check-structure-elimination-simple 3.8937+-0.1226 ? 4.0037+-0.2433 ? might be 1.0282x slower get-by-val-with-string-self-or-proto 22.1884+-2.7707 22.0144+-2.9978 get-by-val-with-symbol-bimorphic-check-structure-elimination-simple 3.6040+-0.1027 ? 3.6992+-0.2387 ? might be 1.0264x slower get-by-val-with-symbol-bimorphic-check-structure-elimination 14.7366+-0.4069 14.6885+-0.2168 get-by-val-with-symbol-chain-from-try-block 2.8958+-0.0709 2.8881+-0.0373 get-by-val-with-symbol-check-structure-elimination 14.2870+-0.3906 14.2448+-0.4945 get-by-val-with-symbol-proto-or-self 21.1770+-1.0315 ? 23.3832+-2.3525 ? might be 1.1042x slower get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple 4.6983+-0.0516 ? 4.9548+-0.3190 ? might be 1.0546x slower get-by-val-with-symbol-self-or-proto 21.2109+-1.0232 ? 21.3196+-0.8902 ? get_callee_monomorphic 2.7458+-0.1168 2.7220+-0.1386 get_callee_polymorphic 3.7836+-0.2095 ? 3.8608+-0.3745 ? might be 1.0204x slower getter-no-activation 5.6148+-0.1067 ? 5.6546+-0.1606 ? getter-prototype 11.6102+-0.2402 11.5797+-0.1331 getter-richards-try-catch 1492.4305+-63.6832 1388.6580+-130.6973 might be 1.0747x faster getter-richards 112.4068+-2.9175 109.1484+-2.1595 might be 1.0299x faster getter 6.2388+-0.1736 6.2175+-0.1203 global-object-access-with-mutating-structure 6.5626+-0.2784 6.5137+-0.1629 global-var-const-infer-fire-from-opt 1.1548+-0.2878 1.1113+-0.1325 might be 1.0392x faster global-var-const-infer 0.9591+-0.1228 0.9315+-0.0123 might be 1.0297x faster hard-overflow-check-equal 40.4531+-0.4460 ? 40.6210+-0.2262 ? hard-overflow-check 40.2062+-0.4110 ? 40.2823+-0.2450 ? HashMap-put-get-iterate-keys 28.8459+-0.7162 28.4449+-0.0820 might be 1.0141x faster HashMap-put-get-iterate 28.7350+-0.2549 28.4606+-0.1157 HashMap-string-put-get-iterate 29.2991+-0.9830 ? 29.6520+-0.6172 ? might be 1.0120x slower hoist-make-rope 10.1652+-0.6946 ? 11.7138+-1.8090 ? might be 1.1523x slower hoist-poly-check-structure-effectful-loop 4.7593+-0.2188 ? 4.8185+-0.2658 ? might be 1.0124x slower hoist-poly-check-structure 3.6204+-0.1556 ? 3.7679+-0.1652 ? might be 1.0407x slower imul-double-only 8.1799+-0.1397 ! 9.4127+-0.4137 ! definitely 1.1507x slower imul-int-only 10.5165+-1.2411 10.4022+-1.6411 might be 1.0110x faster imul-mixed 8.4347+-0.3459 8.1921+-0.3286 might be 1.0296x faster in-four-cases 25.0240+-0.5225 24.8395+-0.7270 in-one-case-false 12.8845+-0.5956 12.7692+-0.2972 in-one-case-true 12.8051+-0.3767 12.7380+-0.1215 in-two-cases 13.7653+-0.5741 ? 13.8355+-0.1776 ? indexed-properties-in-objects 3.3071+-0.0932 ? 3.3307+-0.1800 ? infer-closure-const-then-mov-no-inline 4.7350+-0.0925 4.5586+-0.1395 might be 1.0387x faster infer-closure-const-then-mov 20.4091+-1.5432 19.9109+-0.4657 might be 1.0250x faster infer-closure-const-then-put-to-scope-no-inline 14.1873+-0.3441 ? 14.4688+-0.5226 ? might be 1.0198x slower infer-closure-const-then-put-to-scope 24.6650+-0.7013 24.2765+-0.6265 might be 1.0160x faster infer-closure-const-then-reenter-no-inline 60.2003+-0.4539 ? 60.3334+-0.3646 ? infer-closure-const-then-reenter 26.0532+-2.5791 24.4816+-0.5228 might be 1.0642x faster infer-constant-global-property 3.9818+-0.1480 3.9371+-0.0415 might be 1.0114x faster infer-constant-property 3.0687+-0.0973 ? 3.0942+-0.0714 ? infer-one-time-closure-ten-vars 11.0835+-0.4486 ? 11.0854+-0.7082 ? infer-one-time-closure-two-vars 10.4922+-0.6170 10.3463+-0.2965 might be 1.0141x faster infer-one-time-closure 10.4102+-0.4643 ? 10.6044+-0.4599 ? might be 1.0187x slower infer-one-time-deep-closure 16.8215+-0.2285 ? 16.8416+-0.2977 ? inline-arguments-access 4.4325+-0.5564 ? 4.4473+-0.3446 ? inline-arguments-aliased-access 4.4100+-0.0897 ? 4.4563+-0.4408 ? might be 1.0105x slower inline-arguments-local-escape 4.4298+-0.3038 4.4032+-0.1792 inline-get-scoped-var 5.5379+-0.1243 5.4890+-0.0348 inlined-put-by-id-transition 11.4648+-0.3906 11.4646+-0.2633 inlined-put-by-val-with-string-transition 49.1262+-2.7353 ? 50.7470+-5.4858 ? might be 1.0330x slower inlined-put-by-val-with-symbol-transition 50.6707+-2.6831 49.2184+-0.4502 might be 1.0295x faster int-or-other-abs-then-get-by-val 5.1793+-0.1270 ? 5.2238+-0.1528 ? int-or-other-abs-zero-then-get-by-val 19.2045+-0.7974 18.5026+-0.3286 might be 1.0379x faster int-or-other-add-then-get-by-val 5.1575+-0.1426 ? 5.2024+-0.3174 ? int-or-other-add 6.0780+-0.0895 ? 6.1443+-0.2343 ? might be 1.0109x slower int-or-other-div-then-get-by-val 4.4346+-0.1814 4.4050+-0.2190 int-or-other-max-then-get-by-val 4.7741+-0.3419 4.5251+-0.1306 might be 1.0550x faster int-or-other-min-then-get-by-val 4.6782+-0.2813 4.6226+-0.2196 might be 1.0120x faster int-or-other-mod-then-get-by-val 4.1898+-0.0987 ? 4.2469+-0.1849 ? might be 1.0136x slower int-or-other-mul-then-get-by-val 4.4319+-0.3139 4.3133+-0.1558 might be 1.0275x faster int-or-other-neg-then-get-by-val 5.0638+-0.1773 5.0222+-0.1633 int-or-other-neg-zero-then-get-by-val 18.5973+-0.6469 ? 18.9543+-0.9555 ? might be 1.0192x slower int-or-other-sub-then-get-by-val 5.0491+-0.0922 ? 5.1953+-0.1592 ? might be 1.0289x slower int-or-other-sub 4.0317+-0.1839 3.9113+-0.1908 might be 1.0308x faster int-overflow-local 5.0493+-0.1965 4.7747+-0.1108 might be 1.0575x faster Int16Array-alloc-long-lived 52.7034+-3.2947 52.0211+-1.0396 might be 1.0131x faster Int16Array-bubble-sort-with-byteLength 27.4093+-0.6623 27.1501+-0.2671 Int16Array-bubble-sort 26.5689+-1.4383 26.3853+-0.6434 Int16Array-load-int-mul 1.8842+-0.0352 ? 1.8873+-0.0478 ? Int16Array-to-Int32Array-set 53.9433+-0.4515 53.8158+-0.3233 Int32Array-alloc-large 20.0925+-0.3248 ? 20.6235+-0.5879 ? might be 1.0264x slower Int32Array-alloc-long-lived 59.7285+-1.8276 ? 60.1990+-2.3616 ? Int32Array-alloc 2.8534+-0.0684 ? 2.9568+-0.2244 ? might be 1.0362x slower Int32Array-Int8Array-view-alloc 6.8640+-0.1937 ? 7.0538+-0.9285 ? might be 1.0277x slower int52-spill 5.9591+-0.1632 ? 6.0662+-0.1582 ? might be 1.0180x slower Int8Array-alloc-long-lived 46.3003+-1.0946 ? 46.3301+-1.0633 ? Int8Array-load-with-byteLength 3.7762+-0.0846 3.7489+-0.1688 Int8Array-load 3.6879+-0.0896 ? 3.7458+-0.1706 ? might be 1.0157x slower integer-divide 12.6933+-0.1580 ? 12.7547+-0.1433 ? integer-modulo 2.3807+-0.1626 2.3628+-0.1084 is-boolean-fold-tricky 4.5492+-0.0526 ? 4.6696+-0.0836 ? might be 1.0265x slower is-boolean-fold 3.2079+-0.1583 3.1992+-0.1426 is-function-fold-tricky-internal-function 12.5661+-0.1392 ? 12.8002+-0.1976 ? might be 1.0186x slower is-function-fold-tricky 4.7344+-0.1212 4.6865+-0.0495 might be 1.0102x faster is-function-fold 3.1829+-0.0792 ? 3.2115+-0.0859 ? is-number-fold-tricky 4.5773+-0.0133 ? 4.6882+-0.1039 ? might be 1.0242x slower is-number-fold 3.2134+-0.0756 ? 3.2400+-0.2120 ? is-object-or-null-fold-functions 3.3505+-0.1347 3.2658+-0.0585 might be 1.0259x faster is-object-or-null-fold-less-tricky 4.6730+-0.1588 ? 4.7639+-0.2258 ? might be 1.0195x slower is-object-or-null-fold-tricky 6.3883+-0.2999 6.2335+-0.2670 might be 1.0248x faster is-object-or-null-fold 3.2648+-0.1515 3.2502+-0.1236 is-object-or-null-trickier-function 4.8439+-0.2635 4.7454+-0.0263 might be 1.0208x faster is-object-or-null-trickier-internal-function 13.1642+-0.4029 12.8797+-0.2126 might be 1.0221x faster is-object-or-null-tricky-function 4.6967+-0.1421 ? 5.0350+-0.4794 ? might be 1.0720x slower is-object-or-null-tricky-internal-function 9.6620+-0.3449 ? 9.8876+-0.7384 ? might be 1.0233x slower is-string-fold-tricky 4.6302+-0.2447 ? 4.6837+-0.3033 ? might be 1.0116x slower is-string-fold 3.1813+-0.0905 ? 3.2426+-0.0465 ? might be 1.0193x slower is-undefined-fold-tricky 3.7986+-0.1138 ? 3.8738+-0.2156 ? might be 1.0198x slower is-undefined-fold 3.2808+-0.1812 3.2285+-0.1209 might be 1.0162x faster JSONP-negative-0 0.4405+-0.0230 0.4244+-0.0406 might be 1.0380x faster large-int-captured 5.0964+-0.2397 4.9323+-0.2329 might be 1.0333x faster large-int-neg 16.9927+-0.6344 16.9355+-0.5346 large-int 15.5838+-0.7306 15.2975+-0.3334 might be 1.0187x faster load-varargs-elimination 23.5587+-0.4865 23.3043+-0.2653 might be 1.0109x faster logical-not-weird-types 3.8330+-0.1488 ? 3.8742+-0.0799 ? might be 1.0107x slower logical-not 5.3451+-0.0927 ? 5.3463+-0.1332 ? lots-of-fields 13.0883+-0.2633 ? 13.1874+-0.5055 ? make-indexed-storage 3.5278+-0.2034 3.4938+-0.0587 make-rope-cse 3.9099+-0.7103 3.6907+-0.0354 might be 1.0594x faster marsaglia-larger-ints 38.7649+-1.1869 ? 39.1071+-0.3766 ? marsaglia-osr-entry 24.0203+-0.2383 ? 24.2844+-0.5386 ? might be 1.0110x slower math-with-out-of-bounds-array-values 26.6597+-0.3850 26.4150+-0.6426 max-boolean 2.8916+-0.1933 2.8300+-0.1013 might be 1.0218x faster method-on-number 18.6580+-0.5346 ? 18.6899+-0.2605 ? min-boolean 2.8997+-0.2322 ? 2.9431+-0.1007 ? might be 1.0150x slower minus-boolean-double 3.5287+-0.1615 3.4946+-0.0268 minus-boolean 2.6669+-0.0978 ? 2.7137+-0.0768 ? might be 1.0176x slower misc-strict-eq 37.0209+-0.5542 35.3157+-2.3252 might be 1.0483x faster mod-boolean-double 11.7397+-0.0798 ? 11.7721+-0.0639 ? mod-boolean 8.6251+-0.6401 ? 8.7234+-0.2969 ? might be 1.0114x slower mul-boolean-double 4.0570+-0.0438 ? 4.0739+-0.0838 ? mul-boolean 3.1987+-0.1315 ? 3.3028+-0.1628 ? might be 1.0325x slower neg-boolean 3.5547+-0.1462 ? 3.5576+-0.1367 ? negative-zero-divide 0.5497+-0.0407 ? 0.5622+-0.0650 ? might be 1.0226x slower negative-zero-modulo 0.5535+-0.0186 0.5363+-0.0413 might be 1.0321x faster negative-zero-negate 0.5130+-0.0377 ? 0.5319+-0.0145 ? might be 1.0368x slower nested-function-parsing 56.1462+-0.5453 54.6978+-1.6095 might be 1.0265x faster new-array-buffer-dead 107.3340+-4.7908 106.7014+-1.3165 new-array-buffer-push 7.0853+-0.1946 6.9219+-0.3415 might be 1.0236x faster new-array-dead 20.5978+-1.1844 20.1973+-0.3262 might be 1.0198x faster new-array-push 4.5823+-0.4709 4.3508+-0.2156 might be 1.0532x faster no-inline-constructor 39.4783+-0.7540 39.3928+-0.2733 number-test 3.5025+-0.1077 ? 3.5150+-0.0360 ? object-closure-call 5.8848+-0.0887 ? 5.9781+-0.1666 ? might be 1.0159x slower object-get-own-property-symbols-on-large-array 4.1328+-0.2146 ? 4.2758+-0.5134 ? might be 1.0346x slower object-test 3.3395+-0.0949 3.2985+-0.2113 might be 1.0124x faster obvious-sink-pathology-taken 124.3406+-1.1656 ? 124.8685+-0.7631 ? obvious-sink-pathology 39.5066+-1.8218 39.2351+-0.7408 obviously-elidable-new-object 34.9128+-0.1617 ? 35.0820+-1.4214 ? plus-boolean-arith 2.8984+-0.0576 2.8815+-0.0623 plus-boolean-double 3.5715+-0.0922 ? 3.5920+-0.2142 ? plus-boolean 2.7520+-0.2113 ? 2.8059+-0.0459 ? might be 1.0196x slower poly-chain-access-different-prototypes-simple 3.0738+-0.1305 2.9422+-0.0634 might be 1.0447x faster poly-chain-access-different-prototypes 3.0805+-0.2200 3.0341+-0.1290 might be 1.0153x faster poly-chain-access-simpler 3.0057+-0.0899 3.0043+-0.1015 poly-chain-access 3.0029+-0.0293 ? 3.0080+-0.1190 ? poly-stricteq 67.2440+-0.3779 ? 68.2585+-1.8717 ? might be 1.0151x slower polymorphic-array-call 1.7903+-0.0454 1.7347+-0.0672 might be 1.0321x faster polymorphic-get-by-id 3.7312+-0.1940 ? 3.7385+-0.0457 ? polymorphic-put-by-id 38.0775+-3.1677 ? 38.7137+-1.8792 ? might be 1.0167x slower polymorphic-put-by-val-with-string 38.3044+-0.4020 ? 39.4665+-1.7384 ? might be 1.0303x slower polymorphic-put-by-val-with-symbol 38.3768+-0.3937 ? 38.4390+-0.9607 ? polymorphic-structure 14.5941+-0.3818 14.4924+-0.4327 polyvariant-monomorphic-get-by-id 9.5074+-0.2758 ? 9.5380+-0.1459 ? proto-getter-access 10.2090+-0.1742 10.0710+-0.2704 might be 1.0137x faster prototype-access-with-mutating-prototype 6.2444+-0.1008 ? 6.3437+-0.2320 ? might be 1.0159x slower put-by-id-replace-and-transition 10.1030+-0.2780 9.8726+-0.2677 might be 1.0233x faster put-by-id-slightly-polymorphic 3.2415+-0.1368 ? 3.2758+-0.1511 ? might be 1.0106x slower put-by-id 12.7661+-0.5510 ? 13.4003+-0.8809 ? might be 1.0497x slower put-by-val-direct 0.5764+-0.0843 0.5485+-0.0108 might be 1.0507x faster put-by-val-large-index-blank-indexing-type 5.9781+-0.3003 5.7040+-0.2708 might be 1.0480x faster put-by-val-machine-int 2.9818+-0.1316 2.9401+-0.1498 might be 1.0142x faster put-by-val-with-string-replace-and-transition 14.0581+-0.2509 ? 14.1982+-0.4743 ? put-by-val-with-string-slightly-polymorphic 4.2012+-0.0654 ? 4.2300+-0.1730 ? put-by-val-with-string 13.6622+-0.1826 ^ 13.3584+-0.0680 ^ definitely 1.0227x faster put-by-val-with-symbol-replace-and-transition 15.2406+-0.3004 ? 15.4769+-0.6701 ? might be 1.0155x slower put-by-val-with-symbol-slightly-polymorphic 4.5287+-0.1543 ? 4.5557+-0.1311 ? put-by-val-with-symbol 13.7173+-0.9856 ? 13.7681+-0.5182 ? rare-osr-exit-on-local 16.5695+-0.0469 ? 16.8046+-0.5397 ? might be 1.0142x slower raytrace-with-empty-try-catch 7.3265+-0.2108 ? 7.3329+-0.3824 ? raytrace-with-try-catch 13.3988+-0.1282 13.3040+-0.1774 register-pressure-from-osr 21.4966+-0.1417 ? 21.6274+-0.3420 ? repeat-multi-get-by-offset 25.4998+-1.2946 24.8258+-0.2551 might be 1.0271x faster richards-empty-try-catch 87.2165+-1.1857 86.5027+-0.6251 richards-try-catch 288.4272+-2.1054 287.7070+-4.8468 setter-prototype 9.5872+-0.3322 ? 9.9073+-0.3259 ? might be 1.0334x slower setter 6.7269+-0.0967 ^ 6.2283+-0.1903 ^ definitely 1.0800x faster simple-activation-demo 27.4353+-0.6794 ? 27.6929+-0.3736 ? simple-getter-access 12.9252+-0.8743 ? 13.0347+-0.3554 ? simple-poly-call-nested 9.8696+-0.0505 9.8308+-0.0620 simple-poly-call 1.6948+-0.0508 ? 1.7034+-0.0424 ? sin-boolean 19.9932+-0.6747 ? 21.3046+-2.7268 ? might be 1.0656x slower singleton-scope 70.9972+-2.1388 ? 72.1393+-0.1514 ? might be 1.0161x slower sink-function 11.9212+-0.4052 ? 12.1370+-0.7289 ? might be 1.0181x slower sink-huge-activation 17.9680+-1.8915 17.7960+-1.2932 sinkable-new-object-dag 68.4223+-0.6498 ^ 65.9800+-0.8237 ^ definitely 1.0370x faster sinkable-new-object-taken 53.3991+-1.3316 53.1652+-0.9468 sinkable-new-object 38.9658+-0.3179 ? 39.4858+-1.1539 ? might be 1.0133x slower slow-array-profile-convergence 3.2964+-0.0292 ? 3.4093+-0.1412 ? might be 1.0343x slower slow-convergence 3.1405+-0.0846 ? 3.3137+-0.2090 ? might be 1.0552x slower slow-ternaries 19.2983+-0.5736 19.1786+-0.2447 sorting-benchmark 21.4072+-0.7068 ? 21.5103+-0.2647 ? sparse-conditional 1.5270+-0.0322 ? 1.5304+-0.0274 ? splice-to-remove 16.0169+-0.3979 ? 17.5068+-1.4294 ? might be 1.0930x slower string-char-code-at 17.7368+-0.2529 ? 18.0103+-0.6591 ? might be 1.0154x slower string-concat-object 2.2623+-0.1513 2.2411+-0.0545 string-concat-pair-object 2.2573+-0.1759 ? 2.3110+-0.2012 ? might be 1.0238x slower string-concat-pair-simple 11.8776+-0.2647 ? 11.8843+-0.5448 ? string-concat-simple 12.7270+-0.6083 12.3411+-0.5285 might be 1.0313x faster string-cons-repeat 8.1901+-0.4831 7.8770+-0.1957 might be 1.0398x faster string-cons-tower 8.0848+-0.4890 7.9174+-0.3185 might be 1.0211x faster string-equality 21.7540+-1.4492 21.1542+-0.3362 might be 1.0284x faster string-get-by-val-big-char 7.5136+-0.3010 7.4562+-0.0872 string-get-by-val-out-of-bounds-insane 3.8138+-0.0482 ! 3.9836+-0.1212 ! definitely 1.0445x slower string-get-by-val-out-of-bounds 5.5170+-0.1309 ? 5.6025+-0.2796 ? might be 1.0155x slower string-get-by-val 3.7853+-0.1346 3.6633+-0.2099 might be 1.0333x faster string-hash 2.4575+-0.0656 ? 2.4910+-0.0713 ? might be 1.0136x slower string-long-ident-equality 17.4394+-0.5833 ? 17.4798+-0.2713 ? string-out-of-bounds 14.2417+-0.5771 ? 14.4189+-0.8388 ? might be 1.0124x slower string-repeat-arith 34.1017+-0.9173 ? 34.4257+-0.4999 ? string-sub 45.0196+-0.2276 ! 47.6935+-0.8967 ! definitely 1.0594x slower string-test 3.3940+-0.1272 3.3309+-0.0773 might be 1.0189x faster string-var-equality 38.1022+-0.7942 ? 38.3745+-1.6514 ? structure-hoist-over-transitions 2.7568+-0.2159 2.7117+-0.0648 might be 1.0166x faster substring-concat-weird 42.4368+-0.4042 ? 43.2223+-2.3519 ? might be 1.0185x slower substring-concat 47.4225+-2.4154 46.5153+-0.7487 might be 1.0195x faster substring 51.5552+-1.3636 ? 52.1261+-1.2292 ? might be 1.0111x slower switch-char-constant 3.2000+-0.1390 3.1425+-0.0817 might be 1.0183x faster switch-char 7.0909+-0.0581 ? 7.1237+-0.0898 ? switch-constant 9.0905+-0.5595 8.8365+-0.3216 might be 1.0287x faster switch-string-basic-big-var 21.8327+-0.9186 21.5945+-0.5007 might be 1.0110x faster switch-string-basic-big 20.0500+-1.3863 20.0057+-1.2437 switch-string-basic-var 17.2020+-0.3908 ? 17.3467+-0.8893 ? switch-string-basic 16.0932+-0.1286 ? 16.1459+-0.4362 ? switch-string-big-length-tower-var 22.0247+-0.5290 21.7153+-0.2820 might be 1.0142x faster switch-string-length-tower-var 16.9913+-0.0817 ? 17.0858+-0.3335 ? switch-string-length-tower 14.7601+-0.5246 14.2712+-0.3215 might be 1.0343x faster switch-string-short 14.5628+-0.5942 14.3789+-0.3714 might be 1.0128x faster switch 12.4240+-0.2025 ? 12.4554+-0.1156 ? tear-off-arguments-simple 3.5258+-0.1252 3.4968+-0.1013 tear-off-arguments 4.6718+-0.0757 ? 4.7432+-0.1596 ? might be 1.0153x slower temporal-structure 14.5571+-0.7941 13.8337+-0.1354 might be 1.0523x faster to-int32-boolean 14.6557+-0.5095 ? 14.8253+-0.3650 ? might be 1.0116x slower try-catch-get-by-val-cloned-arguments 10.9973+-0.2978 ? 11.2655+-0.3190 ? might be 1.0244x slower try-catch-get-by-val-direct-arguments 2.3627+-0.0680 ? 2.3988+-0.1280 ? might be 1.0153x slower try-catch-get-by-val-scoped-arguments 4.7209+-0.1380 ? 4.9345+-0.6595 ? might be 1.0452x slower typed-array-get-set-by-val-profiling 32.7750+-1.2308 32.3395+-0.9393 might be 1.0135x faster undefined-property-access 376.1519+-2.5618 375.4832+-2.6256 undefined-test 3.5625+-0.1091 ? 3.5634+-0.1320 ? unprofiled-licm 13.9675+-0.1911 13.8305+-0.2800 v8-raytrace-with-empty-try-catch 38.9875+-0.9726 ? 39.6663+-0.7579 ? might be 1.0174x slower v8-raytrace-with-try-catch 85.6195+-2.1823 ? 85.9213+-3.6828 ? varargs-call 15.8158+-0.6032 15.7855+-0.3133 varargs-construct-inline 28.4830+-1.3030 28.3255+-1.6233 varargs-construct 23.1974+-0.2809 23.0873+-0.1818 varargs-inline 11.1090+-0.8851 10.6231+-0.2119 might be 1.0457x faster varargs-strict-mode 11.8751+-0.1662 ? 11.9362+-0.2158 ? varargs 11.9181+-0.6026 11.7031+-0.1970 might be 1.0184x faster weird-inlining-const-prop 2.6556+-0.0852 ? 2.6638+-0.0674 ? <geometric> 9.8580+-0.0105 ? 9.8649+-0.0191 ? might be 1.0007x slower Baseline PreBoxFTLInt32s AsmBench: bigfib.cpp 553.4460+-6.1980 ? 565.6827+-44.5545 ? might be 1.0221x slower cray.c 459.1454+-5.4047 ? 465.3065+-7.0360 ? might be 1.0134x slower dry.c 516.5363+-16.3745 ? 525.2347+-4.7565 ? might be 1.0168x slower FloatMM.c 781.2607+-20.5970 779.3821+-10.8368 gcc-loops.cpp 4368.5750+-41.7060 4362.1725+-37.0815 n-body.c 1056.9893+-7.9860 ? 1057.2897+-5.4107 ? Quicksort.c 450.1691+-6.5093 ? 453.3549+-6.4937 ? stepanov_container.cpp 3974.8275+-31.1488 3958.0193+-54.6758 Towers.c 271.4822+-3.0965 270.3738+-1.5871 <geometric> 849.3123+-0.1450 ? 853.7124+-8.9838 ? might be 1.0052x slower Baseline PreBoxFTLInt32s CompressionBench: huffman 68.0642+-0.6238 ? 68.2988+-0.6783 ? arithmetic-simple 368.2755+-3.9323 367.7142+-6.5299 arithmetic-precise 302.4823+-6.1740 301.0412+-6.2679 arithmetic-complex-precise 310.5186+-25.4735 300.7183+-5.3145 might be 1.0326x faster arithmetic-precise-order-0 379.4862+-2.8589 ? 381.4241+-3.8845 ? arithmetic-precise-order-1 350.0787+-5.7335 348.9977+-6.7402 arithmetic-precise-order-2 414.2921+-2.9026 412.5286+-5.5312 arithmetic-simple-order-1 418.2430+-3.2648 ? 421.1620+-4.1892 ? arithmetic-simple-order-2 481.2140+-9.3168 478.6895+-7.3607 lz-string 327.8388+-13.4518 318.6832+-6.2978 might be 1.0287x faster <geometric> 311.2715+-2.3994 309.3223+-1.7041 might be 1.0063x faster Baseline PreBoxFTLInt32s Geomean of preferred means: <scaled-result> 61.6674+-0.2363 61.5155+-0.1422 might be 1.0025x faster
(In reply to comment #3) There were quite a few "definitely slower"s in the JSRegress results. Are any of those for real, or are they just noise?
Comment on attachment 264131 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=264131&action=review > Source/JavaScriptCore/jit/CallFrameShuffler.cpp:-309 > - ASSERT(!isUndecided()); The bug description mentioned that you encountered this assertion, and that you will address it. But I didn't see anything that explains why this assertion is unneeded, or maybe I'm not making the connection. Can you please clarify? Thanks.
(In reply to comment #5) > Comment on attachment 264131 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=264131&action=review > > > Source/JavaScriptCore/jit/CallFrameShuffler.cpp:-309 > > - ASSERT(!isUndecided()); > > The bug description mentioned that you encountered this assertion, and that > you will address it. But I didn't see anything that explains why this > assertion is unneeded, or maybe I'm not making the connection. Can you > please clarify? Thanks. I should have stated that the ASSERT is actually wrong. The function isUndecided() means that we haven't determined the new base for the callee's frame. bool isUndecided() const { return m_newFrameBase == InvalidGPRReg; } extendFrameIfNeeded() is called from two places, CallFrameShuffler::spill() and CallFrameShuffler::prepareForSlowPath(). If you look at prepareForSlowPath(), the ASSERT makes sense. From the spill() path though, this could be when we are spilling a register so that we have a spare that we can use as the new frame's base pointer. I will add text explaining that in the ChangeLog.
Comment on attachment 264131 [details] Patch r=me with ChangeLog changes to explain why the assertion in extendFrameIfNeeded() is wrong.
Committed r191625: <http://trac.webkit.org/changeset/191625>
rdar://problem/23205990