Bug 150580

Summary: REGRESSION (r191360): Crash: com.apple.WebKit.WebContent at com.apple.JavaScriptCore: JSC::FTL:: + 386
Product: WebKit Reporter: Michael Saboff <msaboff>
Component: JavaScriptCoreAssignee: Michael Saboff <msaboff>
Status: RESOLVED FIXED    
Severity: Normal CC: mark.lam
Priority: P2 Keywords: InRadar
Version: WebKit Nightly Build   
Hardware: All   
OS: All   
Attachments:
Description Flags
Regression tests
none
Patch mark.lam: review+

Description Michael Saboff 2015-10-26 16:28:14 PDT
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.
Comment 1 Michael Saboff 2015-10-26 17:02:26 PDT
Created attachment 264101 [details]
Regression tests
Comment 2 Michael Saboff 2015-10-27 07:59:18 PDT
Created attachment 264131 [details]
Patch
Comment 3 Michael Saboff 2015-10-27 08:59:40 PDT
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
Comment 4 Mark Lam 2015-10-27 09:26:59 PDT
(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 5 Mark Lam 2015-10-27 09:35:58 PDT
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.
Comment 6 Michael Saboff 2015-10-27 09:59:24 PDT
(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 7 Mark Lam 2015-10-27 10:36:13 PDT
Comment on attachment 264131 [details]
Patch

r=me with ChangeLog changes to explain why the assertion in extendFrameIfNeeded() is wrong.
Comment 8 Michael Saboff 2015-10-27 10:49:34 PDT
Committed r191625: <http://trac.webkit.org/changeset/191625>
Comment 9 Michael Saboff 2015-10-27 10:51:37 PDT
rdar://problem/23205990