Bug 124630

Summary: Infer constant closure variables
Product: WebKit Reporter: Filip Pizlo <fpizlo>
Component: JavaScriptCoreAssignee: Filip Pizlo <fpizlo>
Status: RESOLVED FIXED    
Severity: Normal CC: barraclough, buildbot, commit-queue, eflews.bot, ggaren, gyuyoung.kim, mark.lam, mhahnenberg, msaboff, oliver, rniwa, sam
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Bug Depends on: 124464, 124760, 124812, 124883, 125052    
Bug Blocks: 125205    
Attachments:
Description Flags
it begins
none
it's about to get real
none
I wrote all of the code.
none
it successfully inferred things
none
and now, with tests!
buildbot: commit-queue-
the patch
none
the patch
buildbot: commit-queue-
the patch ggaren: review+, eflews.bot: commit-queue-

Description Filip Pizlo 2013-11-19 19:48:44 PST
Because that would be super cool
Comment 1 Geoffrey Garen 2013-11-20 12:18:28 PST
Most of the time, a constant closure variable is assigned only once, and not inside a loop. Should we consider asking the parser to supply this information, instead of fancier run-time checks?
Comment 2 Filip Pizlo 2013-11-20 12:29:50 PST
(In reply to comment #1)
> Most of the time, a constant closure variable is assigned only once, and not inside a loop. Should we consider asking the parser to supply this information, instead of fancier run-time checks?

How would that solve the problem?

Consider the following examples that would probably not work with a non-fancy parser-based analysis:

Example #1:

function foo() {
    function bar() { x; }
    var x;
    bar();
    x = 42;  // Assigned once!
    bar();
}

There is no good way to naively fix this in the parser unless we required all constant closure variables to be assigned before anything that looked like a function call.

Example #2:

function foo() {
    var heap = new Array();
    function bar() {
        heap;
    }
}

"heap" is only constant if foo() is only called once.  You need at least some check for that.

Example #3:

function foo() {
    var heap = new Array();
    function bar() {
        var heap2 = heap;
        function baz() {
            heap2;
        }
    }
}

Here, bar() is called twice and heap2 is assigned multiple times - but it will have the same value so long as foo() runs only once.  It would be good to catch such cases.


Bottom line, I'd like to build a closure variable inference that is powerful enough that I don't have to work on this problem again anytime soon.  The obvious way to do that is to just have a store barrier on closure variables, and make sure that the store barrier is elided if it's already been tripped (similarly to how the global variable constant inference works already).
Comment 3 Oliver Hunt 2013-11-20 12:37:42 PST
I've considered this in the past, but basically came to the same conclusion that Fil has.

Interestingly let variables may actually be doable in the parser (they are block scoped so don't suffer the same problems we might get from vars, but I also recall at some point the logical behaviour of |let| was the the value itself was included in the closure, rather than a reference.  That said, it was a couple of years ago that that was the case, so who knows what the behaviour is now.
Comment 4 Filip Pizlo 2013-11-23 16:51:25 PST
It seems that the best way to do this is to combine watchpointing the fact that a scope is instantiated once and watchpointing the fact that the variable won't be assigned again.

Basically, we start out by not watching closure variables.  But we do set a watchpoint on whether create_activation was called once of more than once.

If in the DFG we encounter a load from a scoped variable and:

- We know that this scope has only been created once, and

- We know that the variable either has no watchpoint yet or has a still-valid watchpoint set, then:

We can create a watchpoint set for the variable (if necessary) and register watchpoints on both the created-once scope watchpoint set and the variable watchpoint set.

Then we just need to figure out how best to trigger a fireAll() when someone writes to the closure variable.
Comment 5 Filip Pizlo 2013-12-02 14:45:15 PST
Created attachment 218217 [details]
it begins
Comment 6 Filip Pizlo 2013-12-02 15:14:44 PST
Created attachment 218221 [details]
it's about to get real
Comment 7 Filip Pizlo 2013-12-02 15:26:24 PST
Created attachment 218224 [details]
I wrote all of the code.

I'm too chicken to see if it works.
Comment 8 Filip Pizlo 2013-12-02 20:39:02 PST
Created attachment 218262 [details]
it successfully inferred things
Comment 9 Filip Pizlo 2013-12-02 22:05:06 PST
Created attachment 218264 [details]
and now, with tests!
Comment 10 WebKit Commit Bot 2013-12-02 22:32:45 PST
Attachment 218264 [details] did not pass style-queue:

Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/js/regress/infer-closure-const-then-mov-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-mov-no-inline-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-mov-no-inline.html', u'LayoutTests/js/regress/infer-closure-const-then-mov.html', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline.html', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope.html', u'LayoutTests/js/regress/infer-closure-const-then-reenter-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline.html', u'LayoutTests/js/regress/infer-closure-const-then-reenter.html', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-mov-no-inline.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-mov.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope-no-inline.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter-no-inline.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter.js', u'Source/JavaScriptCore/bytecode/CodeBlock.cpp', u'Source/JavaScriptCore/bytecode/Instruction.h', u'Source/JavaScriptCore/bytecode/Opcode.h', u'Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h', u'Source/JavaScriptCore/bytecode/VariableWatchpointSet.h', u'Source/JavaScriptCore/bytecode/Watchpoint.h', u'Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp', u'Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h', u'Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp', u'Source/JavaScriptCore/dfg/DFGGraph.cpp', u'Source/JavaScriptCore/dfg/DFGGraph.h', u'Source/JavaScriptCore/jit/JIT.cpp', u'Source/JavaScriptCore/jit/JIT.h', u'Source/JavaScriptCore/jit/JITOpcodes.cpp', u'Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm', u'Source/JavaScriptCore/llint/LowLevelInterpreter64.asm', u'Source/JavaScriptCore/runtime/CommonSlowPaths.cpp', u'Source/JavaScriptCore/runtime/CommonSlowPaths.h', u'Source/JavaScriptCore/runtime/ConstantMode.h', u'Source/JavaScriptCore/runtime/JSGlobalObject.h', u'Source/JavaScriptCore/runtime/JSScope.cpp', u'Source/JavaScriptCore/runtime/SymbolTable.cpp']" exit_code: 1
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:251:  The parameter name "set" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:261:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:262:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:264:  The parameter name "set" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 40 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 11 Build Bot 2013-12-02 23:04:04 PST
Comment on attachment 218264 [details]
and now, with tests!

Attachment 218264 [details] did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/40458104
Comment 12 Build Bot 2013-12-02 23:19:32 PST
Comment on attachment 218264 [details]
and now, with tests!

Attachment 218264 [details] did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/42088049
Comment 13 Build Bot 2013-12-02 23:20:11 PST
Comment on attachment 218264 [details]
and now, with tests!

Attachment 218264 [details] did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/42518013
Comment 14 Filip Pizlo 2013-12-03 15:44:05 PST
Created attachment 218355 [details]
the patch
Comment 15 WebKit Commit Bot 2013-12-03 15:45:24 PST
Attachment 218355 [details] did not pass style-queue:

Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/js/regress/infer-closure-const-then-mov-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-mov-no-inline-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-mov-no-inline.html', u'LayoutTests/js/regress/infer-closure-const-then-mov.html', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline.html', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope.html', u'LayoutTests/js/regress/infer-closure-const-then-reenter-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline.html', u'LayoutTests/js/regress/infer-closure-const-then-reenter.html', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-mov-no-inline.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-mov.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope-no-inline.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter-no-inline.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter.js', u'Source/JavaScriptCore/ChangeLog', u'Source/JavaScriptCore/bytecode/CodeBlock.cpp', u'Source/JavaScriptCore/bytecode/Instruction.h', u'Source/JavaScriptCore/bytecode/Opcode.h', u'Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h', u'Source/JavaScriptCore/bytecode/VariableWatchpointSet.h', u'Source/JavaScriptCore/bytecode/Watchpoint.h', u'Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp', u'Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h', u'Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp', u'Source/JavaScriptCore/dfg/DFGGraph.cpp', u'Source/JavaScriptCore/dfg/DFGGraph.h', u'Source/JavaScriptCore/jit/JIT.cpp', u'Source/JavaScriptCore/jit/JIT.h', u'Source/JavaScriptCore/jit/JITOpcodes.cpp', u'Source/JavaScriptCore/jit/JITOpcodes32_64.cpp', u'Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm', u'Source/JavaScriptCore/llint/LowLevelInterpreter64.asm', u'Source/JavaScriptCore/runtime/CommonSlowPaths.cpp', u'Source/JavaScriptCore/runtime/CommonSlowPaths.h', u'Source/JavaScriptCore/runtime/ConstantMode.h', u'Source/JavaScriptCore/runtime/JSGlobalObject.h', u'Source/JavaScriptCore/runtime/JSScope.cpp', u'Source/JavaScriptCore/runtime/SymbolTable.cpp']" exit_code: 1
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:251:  The parameter name "set" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:261:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:262:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:264:  The parameter name "set" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 16 Filip Pizlo 2013-12-03 15:46:13 PST
Comment on attachment 218355 [details]
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=218355&action=review

> Source/JavaScriptCore/runtime/CommonSlowPaths.h:201
> +SLOW_PATH_HIDDEN_DECL(slow_path_captured_mov);
> +SLOW_PATH_HIDDEN_DECL(slow_path_new_captured_func);
> +SLOW_PATH_HIDDEN_DECL(slow_path_not);
> +SLOW_PATH_HIDDEN_DECL(slow_path_eq);
> +SLOW_PATH_HIDDEN_DECL(slow_path_neq);
> +SLOW_PATH_HIDDEN_DECL(slow_path_stricteq);
> +SLOW_PATH_HIDDEN_DECL(slow_path_nstricteq);
> +SLOW_PATH_HIDDEN_DECL(slow_path_less);
> +SLOW_PATH_HIDDEN_DECL(slow_path_lesseq);
> +SLOW_PATH_HIDDEN_DECL(slow_path_greater);
> +SLOW_PATH_HIDDEN_DECL(slow_path_greatereq);
> +SLOW_PATH_HIDDEN_DECL(slow_path_inc);
> +SLOW_PATH_HIDDEN_DECL(slow_path_dec);
> +SLOW_PATH_HIDDEN_DECL(slow_path_to_number);
> +SLOW_PATH_HIDDEN_DECL(slow_path_negate);
> +SLOW_PATH_HIDDEN_DECL(slow_path_add);
> +SLOW_PATH_HIDDEN_DECL(slow_path_mul);
> +SLOW_PATH_HIDDEN_DECL(slow_path_sub);
> +SLOW_PATH_HIDDEN_DECL(slow_path_div);
> +SLOW_PATH_HIDDEN_DECL(slow_path_mod);
> +SLOW_PATH_HIDDEN_DECL(slow_path_lshift);
> +SLOW_PATH_HIDDEN_DECL(slow_path_rshift);
> +SLOW_PATH_HIDDEN_DECL(slow_path_urshift);
> +SLOW_PATH_HIDDEN_DECL(slow_path_bitand);
> +SLOW_PATH_HIDDEN_DECL(slow_path_bitor);
> +SLOW_PATH_HIDDEN_DECL(slow_path_bitxor);
> +SLOW_PATH_HIDDEN_DECL(slow_path_typeof);
> +SLOW_PATH_HIDDEN_DECL(slow_path_is_object);
> +SLOW_PATH_HIDDEN_DECL(slow_path_is_function);
> +SLOW_PATH_HIDDEN_DECL(slow_path_in);
> +SLOW_PATH_HIDDEN_DECL(slow_path_del_by_val);
> +SLOW_PATH_HIDDEN_DECL(slow_path_strcat);
> +SLOW_PATH_HIDDEN_DECL(slow_path_to_primitive);
> +SLOW_PATH_HIDDEN_DECL(slow_path_captured_mov);

I don't know what happened here.  I think I have some reverting to do.
Comment 17 Filip Pizlo 2013-12-03 15:51:42 PST
Created attachment 218357 [details]
the patch

Fix some style issues.
Comment 18 WebKit Commit Bot 2013-12-03 15:52:57 PST
Attachment 218357 [details] did not pass style-queue:

Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/js/regress/infer-closure-const-then-mov-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-mov-no-inline-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-mov-no-inline.html', u'LayoutTests/js/regress/infer-closure-const-then-mov.html', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline.html', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope.html', u'LayoutTests/js/regress/infer-closure-const-then-reenter-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline.html', u'LayoutTests/js/regress/infer-closure-const-then-reenter.html', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-mov-no-inline.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-mov.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope-no-inline.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter-no-inline.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter.js', u'Source/JavaScriptCore/ChangeLog', u'Source/JavaScriptCore/bytecode/CodeBlock.cpp', u'Source/JavaScriptCore/bytecode/Instruction.h', u'Source/JavaScriptCore/bytecode/Opcode.h', u'Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h', u'Source/JavaScriptCore/bytecode/VariableWatchpointSet.h', u'Source/JavaScriptCore/bytecode/Watchpoint.h', u'Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp', u'Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h', u'Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp', u'Source/JavaScriptCore/dfg/DFGGraph.cpp', u'Source/JavaScriptCore/dfg/DFGGraph.h', u'Source/JavaScriptCore/jit/JIT.cpp', u'Source/JavaScriptCore/jit/JIT.h', u'Source/JavaScriptCore/jit/JITOpcodes.cpp', u'Source/JavaScriptCore/jit/JITOpcodes32_64.cpp', u'Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm', u'Source/JavaScriptCore/llint/LowLevelInterpreter64.asm', u'Source/JavaScriptCore/runtime/CommonSlowPaths.cpp', u'Source/JavaScriptCore/runtime/CommonSlowPaths.h', u'Source/JavaScriptCore/runtime/ConstantMode.h', u'Source/JavaScriptCore/runtime/JSGlobalObject.h', u'Source/JavaScriptCore/runtime/JSScope.cpp', u'Source/JavaScriptCore/runtime/SymbolTable.cpp']" exit_code: 1
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:251:  The parameter name "set" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:265:  The parameter name "set" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 19 Build Bot 2013-12-03 16:12:18 PST
Comment on attachment 218357 [details]
the patch

Attachment 218357 [details] did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/39218300
Comment 20 Build Bot 2013-12-03 16:50:35 PST
Comment on attachment 218357 [details]
the patch

Attachment 218357 [details] did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/42948064
Comment 21 Filip Pizlo 2013-12-03 18:14:06 PST
This is a big deal for emscripten/asm.js code.  It does incur some small start-up costs so short-running or "code load" style tests are slightly penalized.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r160044)
"InferConstClosure" at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r160044)

Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree             InferConstClosure                                 
SunSpider:
   3d-cube                                            7.6387+-0.0644     ?      7.7471+-0.0767        ? might be 1.0142x slower
   3d-morph                                           8.8122+-0.0829     ?      8.8220+-0.0746        ?
   3d-raytrace                                        8.7783+-0.1044     ?      8.9295+-0.1573        ? might be 1.0172x slower
   access-binary-trees                                2.0191+-0.0077     ?      2.0459+-0.0674        ? might be 1.0133x slower
   access-fannkuch                                    7.9568+-0.1212            7.9172+-0.0872        
   access-nbody                                       4.2404+-0.0295            4.2378+-0.0213        
   access-nsieve                                      5.0054+-0.0435            4.9861+-0.0682        
   bitops-3bit-bits-in-byte                           1.8149+-0.0278            1.8092+-0.0064        
   bitops-bits-in-byte                                6.9592+-0.1195     ?      7.0121+-0.0519        ?
   bitops-bitwise-and                                 2.9390+-0.0212     ?      2.9572+-0.0181        ?
   bitops-nsieve-bits                                 4.5473+-0.0715     ?      4.6083+-0.0050        ? might be 1.0134x slower
   controlflow-recursive                              3.1231+-0.0115     ?      3.1307+-0.0138        ?
   crypto-aes                                         5.4359+-0.0189     ?      5.4702+-0.0389        ?
   crypto-md5                                         3.0878+-0.0112     !      3.2198+-0.0217        ! definitely 1.0427x slower
   crypto-sha1                                        2.9966+-0.0322            2.9633+-0.0085          might be 1.0112x faster
   date-format-tofte                                 11.3554+-0.0715     !     11.5464+-0.0723        ! definitely 1.0168x slower
   date-format-xparb                                  8.8198+-0.1266            8.6020+-0.0959          might be 1.0253x faster
   math-cordic                                        4.1979+-0.0133     ?      4.2147+-0.0203        ?
   math-partial-sums                                 10.1689+-0.1053     ?     10.2243+-0.0892        ?
   math-spectral-norm                                 2.7260+-0.0061            2.7256+-0.0047        
   regexp-dna                                        12.9910+-0.0866           12.9636+-0.0963        
   string-base64                                      5.4227+-0.0300     ?      5.4452+-0.0683        ?
   string-fasta                                      10.1692+-0.1796     ?     10.4419+-0.1741        ? might be 1.0268x slower
   string-tagcloud                                   14.9960+-0.1506     ?     15.0649+-0.0902        ?
   string-unpack-code                                31.0751+-0.4038     ?     31.1186+-0.1856        ?
   string-validate-input                              7.0238+-0.1051     ?      7.0292+-0.0589        ?

   <arithmetic> *                                     7.4731+-0.0149     !      7.5090+-0.0121        ! definitely 1.0048x slower
   <geometric>                                        5.9636+-0.0044     !      5.9948+-0.0098        ! definitely 1.0052x slower
   <harmonic>                                         4.8706+-0.0069     !      4.8962+-0.0139        ! definitely 1.0053x slower

                                                        TipOfTree             InferConstClosure                                 
LongSpider:
   3d-cube                                         2688.1418+-10.6655    ?   2694.1693+-6.0853        ?
   3d-morph                                        1505.6124+-1.4850         1505.2880+-1.4175        
   3d-raytrace                                     1546.8071+-20.7261        1538.3861+-4.5666        
   access-binary-trees                             2195.0808+-10.9519    ?   2200.0656+-12.1293       ?
   access-fannkuch                                  671.2556+-7.2202          666.8389+-3.0307        
   access-nbody                                    1496.0919+-1.2850         1495.8481+-0.8373        
   access-nsieve                                   1549.9365+-3.5279     ?   1561.5308+-28.1170       ?
   bitops-3bit-bits-in-byte                         121.4071+-0.1159     ?    121.5552+-0.3241        ?
   bitops-bits-in-byte                              619.4471+-2.5097          617.7735+-1.9121        
   bitops-nsieve-bits                              1045.9646+-0.7847     ?   1047.1044+-0.9716        ?
   controlflow-recursive                           1492.4583+-0.4425     ?   1492.6165+-0.6944        ?
   crypto-aes                                      1646.2260+-2.9662     ?   1648.5565+-6.3053        ?
   crypto-md5                                      1177.6470+-13.5925        1171.8501+-1.3995        
   crypto-sha1                                     1702.6676+-149.1954       1641.6657+-17.1778         might be 1.0372x faster
   date-format-tofte                               1177.7609+-6.5563     !   1209.3618+-17.8115       ! definitely 1.0268x slower
   date-format-xparb                               1462.3250+-9.3955     ^   1431.7562+-11.1928       ^ definitely 1.0214x faster
   math-cordic                                     1735.6093+-1.4208         1731.4899+-6.3273        
   math-partial-sums                               1306.1804+-2.3798         1305.6983+-1.8734        
   math-spectral-norm                              1826.9591+-1.5972         1826.3617+-0.6073        
   string-base64                                    506.0012+-1.5937          504.1431+-1.6183        
   string-fasta                                     988.9673+-2.6235     ?    994.8262+-5.2153        ?
   string-tagcloud                                  377.8290+-1.3537     !    384.8073+-0.9561        ! definitely 1.0185x slower

   <arithmetic>                                    1310.9262+-6.5843         1308.7133+-2.1479          might be 1.0017x faster
   <geometric> *                                   1115.6763+-3.7509         1115.0316+-1.6436          might be 1.0006x faster
   <harmonic>                                       799.2485+-1.1917     ?    800.2049+-0.9782        ? might be 1.0012x slower

                                                        TipOfTree             InferConstClosure                                 
V8Spider:
   crypto                                            79.4193+-0.2292     ?     79.4963+-0.4007        ?
   deltablue                                         97.8427+-0.7746     ?     97.9674+-0.7418        ?
   earley-boyer                                      71.3501+-0.6923           70.9401+-0.3431        
   raytrace                                          40.5313+-0.8088           40.3742+-0.3703        
   regexp                                           100.2500+-0.3853     ?    100.5651+-0.3583        ?
   richards                                         134.3512+-1.8194          133.2791+-0.9807        
   splay                                             46.8579+-1.4577           45.8055+-0.3641          might be 1.0230x faster

   <arithmetic>                                      81.5146+-0.3407           81.2040+-0.1909          might be 1.0038x faster
   <geometric> *                                     75.6379+-0.3897           75.2722+-0.1733          might be 1.0049x faster
   <harmonic>                                        69.7861+-0.5190           69.3500+-0.2073          might be 1.0063x faster

                                                        TipOfTree             InferConstClosure                                 
Octane and V8v7:
   encrypt                                           0.46508+-0.00042    ?     0.46567+-0.00043       ?
   decrypt                                           8.56674+-0.01046    ?     8.61606+-0.10372       ?
   deltablue                                x2       0.56078+-0.00360    ?     0.56582+-0.00800       ?
   earley                                            0.90335+-0.00520    ?     0.90517+-0.00615       ?
   boyer                                            12.25230+-0.03791    ?    12.37577+-0.11147       ? might be 1.0101x slower
   raytrace                                 x2       4.32045+-0.03102          4.28477+-0.02267       
   regexp                                   x2      33.06621+-0.30748         33.02849+-0.11323       
   richards                                 x2       0.43048+-0.00607          0.42611+-0.00602         might be 1.0103x faster
   splay                                    x2       0.64250+-0.00780    ^     0.63143+-0.00313       ^ definitely 1.0175x faster
   navier-stokes                            x2      10.70671+-0.00698    ?    10.75972+-0.12440       ?
   closure                                           0.42686+-0.00031    !     0.43352+-0.00099       ! definitely 1.0156x slower
   jquery                                            6.17270+-0.01945    !     6.34557+-0.00792       ! definitely 1.0280x slower
   gbemu                                    x2      71.81246+-0.66737         71.77826+-0.88062       
   mandreel                                 x2     141.81848+-0.23738        141.78387+-0.09789       
   pdfjs                                    x2     101.35605+-0.38267    ?   101.93625+-0.26740       ?
   box2d                                    x2      35.73520+-0.41931    ^    35.09301+-0.21133       ^ definitely 1.0183x faster

V8v7:
   <arithmetic>                                      7.60261+-0.04066    ?     7.60971+-0.02459       ? might be 1.0009x slower
   <geometric> *                                     2.50988+-0.00884          2.50556+-0.00737         might be 1.0017x faster
   <harmonic>                                        1.03273+-0.00563          1.02826+-0.00584         might be 1.0043x faster

Octane including V8v7:
   <arithmetic>                                     31.91099+-0.05836    ?    31.91220+-0.07783       ? might be 1.0000x slower
   <geometric> *                                     6.98526+-0.01532          6.98241+-0.01634         might be 1.0004x faster
   <harmonic>                                        1.43524+-0.00671          1.43304+-0.00717         might be 1.0015x faster

                                                        TipOfTree             InferConstClosure                                 
Kraken:
   ai-astar                                          494.064+-0.534            493.463+-0.652         
   audio-beat-detection                              237.347+-0.720            237.091+-0.428         
   audio-dft                                         289.929+-1.580            289.672+-0.681         
   audio-fft                                         143.069+-0.201            143.037+-0.207         
   audio-oscillator                                  244.545+-0.921            243.982+-0.372         
   imaging-darkroom                                  285.128+-0.690      ?     285.218+-0.621         ?
   imaging-desaturate                                158.438+-0.152            158.407+-0.115         
   imaging-gaussian-blur                             363.654+-0.387            363.580+-0.269         
   json-parse-financial                               79.881+-0.233      ?      80.735+-0.884         ? might be 1.0107x slower
   json-stringify-tinderbox                          105.025+-0.432            104.961+-0.240         
   stanford-crypto-aes                                90.684+-0.451      ?      91.121+-0.328         ?
   stanford-crypto-ccm                               101.625+-1.061      ?     101.931+-1.897         ?
   stanford-crypto-pbkdf2                            263.707+-0.997      ?     266.069+-2.690         ?
   stanford-crypto-sha256-iterative                  113.981+-0.445      ?     114.356+-0.493         ?

   <arithmetic> *                                    212.220+-0.290      ?     212.402+-0.213         ? might be 1.0009x slower
   <geometric>                                       182.482+-0.291      ?     182.794+-0.337         ? might be 1.0017x slower
   <harmonic>                                        157.640+-0.312      ?     158.075+-0.498         ? might be 1.0028x slower

                                                        TipOfTree             InferConstClosure                                 
JSRegress:
   adapt-to-double-divide                            22.7328+-0.0695           22.6688+-0.1014        
   aliased-arguments-getbyval                         0.9574+-0.0051     ?      0.9617+-0.0049        ?
   allocate-big-object                                2.6308+-0.0294            2.6263+-0.0094        
   arity-mismatch-inlining                            0.9253+-0.0054     ?      0.9389+-0.0368        ? might be 1.0148x slower
   array-access-polymorphic-structure                10.0620+-0.7100            9.8188+-0.0770          might be 1.0248x faster
   array-nonarray-polymorhpic-access                 56.5547+-0.3582           56.4829+-0.3402        
   array-with-double-add                              5.7442+-0.0737     ?      5.7852+-0.0248        ?
   array-with-double-increment                        4.2837+-0.0337     ?      4.3070+-0.0127        ?
   array-with-double-mul-add                          6.8137+-0.0557            6.7543+-0.0875        
   array-with-double-sum                              7.9785+-0.1222     ?      8.0089+-0.0239        ?
   array-with-int32-add-sub                          10.4180+-0.1122     ?     10.4293+-0.1137        ?
   array-with-int32-or-double-sum                     7.9658+-0.0809     ?      8.0337+-0.0422        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    118.7181+-0.8529     ?    118.8959+-0.7333        ?
   ArrayBuffer-DataView-alloc-long-lived             30.4118+-0.1161     ?     30.5505+-0.1382        ?
   ArrayBuffer-Int32Array-byteOffset                  7.0755+-0.0510            7.0550+-0.0718        
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    215.7998+-2.1402     ?    217.0345+-1.9527        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    166.6461+-1.4534     ?    167.6655+-1.1342        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    120.2743+-1.7025          119.8776+-1.7932        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     50.8003+-1.2617     ^     48.3267+-0.2586        ^ definitely 1.0512x faster
   ArrayBuffer-Int8Array-alloc-long-lived            31.4243+-0.7813           30.8441+-0.1706          might be 1.0188x faster
   ArrayBuffer-Int8Array-alloc                       27.6349+-0.8288     ^     26.6049+-0.1229        ^ definitely 1.0387x faster
   asmjs_bool_bug                                     9.4795+-0.0649     ?      9.5421+-0.0579        ?
   basic-set                                         26.3323+-0.2748     ^     21.7538+-0.2551        ^ definitely 1.2105x faster
   big-int-mul                                        5.5120+-0.0256     ?      5.5482+-0.0408        ?
   boolean-test                                       4.3297+-0.0071     ?      4.3707+-0.0583        ?
   branch-fold                                        4.9608+-0.0061     ?      4.9675+-0.0170        ?
   captured-assignments                               0.6116+-0.0366            0.5934+-0.0085          might be 1.0307x faster
   cast-int-to-double                                12.4823+-0.1455           12.4045+-0.1003        
   cell-argument                                     15.7777+-0.4046     ?     16.2226+-0.3642        ? might be 1.0282x slower
   cfg-simplify                                       3.9512+-0.0119            3.9466+-0.0060        
   cmpeq-obj-to-obj-other                            13.2437+-0.3604           12.8109+-0.7073          might be 1.0338x faster
   constant-test                                      8.8807+-0.1129            8.7993+-0.0971        
   DataView-custom-properties                       125.3973+-0.9066     ?    126.0536+-0.6077        ?
   delay-tear-off-arguments-strictmode                3.5124+-0.0102     ?      3.5180+-0.0074        ?
   destructuring-arguments-length                   171.7488+-0.6448          171.6874+-1.3538        
   destructuring-arguments                            8.5639+-0.0927     !      8.7638+-0.0589        ! definitely 1.0234x slower
   destructuring-swap                                 8.5542+-0.0500            8.5489+-0.0471        
   direct-arguments-getbyval                          0.8478+-0.0139     ?      0.8584+-0.0040        ? might be 1.0125x slower
   double-pollution-getbyval                         11.1129+-0.1036           11.1000+-0.1234        
   double-pollution-putbyoffset                       6.6234+-0.0369            6.5860+-0.0231        
   empty-string-plus-int                             11.0492+-0.0786     ?     11.1739+-0.0752        ? might be 1.0113x slower
   emscripten-cube2hash                              53.4529+-0.2841     !     54.9739+-0.1216        ! definitely 1.0285x slower
   emscripten-memops                               7795.4755+-51.3751    ^   6979.9327+-95.2383       ^ definitely 1.1168x faster
   external-arguments-getbyval                        2.0111+-0.0185     ?      2.0432+-0.0663        ? might be 1.0160x slower
   external-arguments-putbyval                        3.0772+-0.0163            3.0449+-0.0209          might be 1.0106x faster
   Float32Array-matrix-mult                           6.5115+-0.0345     ?      6.5156+-0.0468        ?
   Float32Array-to-Float64Array-set                  95.7622+-0.4151           94.6017+-1.2150          might be 1.0123x faster
   Float64Array-alloc-long-lived                    103.7769+-0.6520          103.3845+-0.3392        
   Float64Array-to-Int16Array-set                   122.7161+-1.1848     ^    117.3658+-0.6867        ^ definitely 1.0456x faster
   fold-double-to-int                                21.0493+-0.1417           20.9068+-0.0728        
   for-of-iterate-array-entries                       8.6530+-0.1280            8.5061+-0.0431          might be 1.0173x faster
   for-of-iterate-array-keys                          3.4605+-0.0747     ?      3.4756+-0.0410        ?
   for-of-iterate-array-values                        2.9547+-0.0462     ?      2.9898+-0.0790        ? might be 1.0119x slower
   function-dot-apply                                 3.1245+-0.0138     ?      3.1263+-0.0042        ?
   function-test                                      4.6676+-0.0802     ?      4.7811+-0.0428        ? might be 1.0243x slower
   get-by-id-chain-from-try-block                     7.9956+-0.1289     ?      8.0783+-0.0672        ? might be 1.0103x slower
   get-by-id-proto-or-self                           26.0391+-0.2496           25.9992+-0.1710        
   get-by-id-self-or-proto                           23.7499+-0.6781           23.5318+-0.5851        
   get_callee_monomorphic                             4.7693+-0.0354     !      4.8813+-0.0542        ! definitely 1.0235x slower
   get_callee_polymorphic                             4.4665+-0.0129     ?      4.4921+-0.0226        ?
   global-var-const-infer-fire-from-opt               0.9463+-0.0121     ?      0.9529+-0.0102        ?
   global-var-const-infer                             0.7613+-0.0034     !      0.7720+-0.0057        ! definitely 1.0140x slower
   HashMap-put-get-iterate-keys                      41.5692+-0.4400     ?     42.0465+-0.1471        ? might be 1.0115x slower
   HashMap-put-get-iterate                           63.0926+-2.4861           61.1107+-1.1143          might be 1.0324x faster
   HashMap-string-put-get-iterate                    55.4212+-0.7306           54.0280+-0.6852          might be 1.0258x faster
   imul-double-only                                  17.7911+-0.1716           17.7389+-0.1048        
   imul-int-only                                     14.7243+-0.1353     ?     14.8227+-0.1041        ?
   imul-mixed                                        21.9117+-0.0920     ?     22.4463+-0.8797        ? might be 1.0244x slower
   in-four-cases                                     25.9424+-0.1089     ?     25.9730+-0.1128        ?
   in-one-case-false                                 12.0701+-0.1327     ?     12.0870+-0.0435        ?
   in-one-case-true                                  12.0993+-0.1424           12.0729+-0.0884        
   in-two-cases                                      13.0198+-0.0918           12.8709+-0.0935          might be 1.0116x faster
   indexed-properties-in-objects                      4.6358+-0.0512     ?      4.6704+-0.0099        ?
   infer-closure-const-then-mov-no-inline             7.3790+-0.0764     !     15.4794+-0.1261        ! definitely 2.0978x slower
   infer-closure-const-then-mov                      88.1257+-0.1026     ^     28.8633+-0.1170        ^ definitely 3.0532x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     27.2998+-0.2236     ^     17.7046+-0.1079        ^ definitely 1.5420x faster
   infer-closure-const-then-put-to-scope             80.3574+-0.0869     ^     35.7252+-0.0820        ^ definitely 2.2493x faster
   infer-closure-const-then-reenter-no-inline   
                                                    131.8811+-0.1285     ^     84.2390+-0.2008        ^ definitely 1.5656x faster
   infer-closure-const-then-reenter                  84.4510+-0.2728     ^     36.0372+-0.2965        ^ definitely 2.3434x faster
   infer-one-time-closure-ten-vars                   92.1990+-0.1100     ^     29.0712+-0.2669        ^ definitely 3.1715x faster
   infer-one-time-closure-two-vars                   28.7893+-0.1183           28.7515+-0.1431        
   infer-one-time-closure                            28.8128+-0.2159     ?     28.9166+-0.2181        ?
   infer-one-time-deep-closure                       60.8296+-0.1261     ^     58.5076+-0.1740        ^ definitely 1.0397x faster
   inline-arguments-access                            1.6119+-0.0166     ?      1.6176+-0.0040        ?
   inline-arguments-local-escape                     22.4428+-0.1992     ?     22.8501+-0.2138        ? might be 1.0181x slower
   inline-get-scoped-var                              7.3817+-0.1379     ?      7.4612+-0.0731        ? might be 1.0108x slower
   inlined-put-by-id-transition                      15.2557+-0.2052           14.9467+-0.2515          might be 1.0207x faster
   int-or-other-abs-then-get-by-val                   9.4083+-0.0508     ?      9.4113+-0.0821        ?
   int-or-other-abs-zero-then-get-by-val             41.4324+-0.2700           41.2165+-0.3582        
   int-or-other-add-then-get-by-val                  10.4694+-0.1289     ?     10.4840+-0.0197        ?
   int-or-other-add                                  10.7401+-0.1033     ?     10.8850+-0.0923        ? might be 1.0135x slower
   int-or-other-div-then-get-by-val                   6.3512+-0.0498     ?      6.3980+-0.1033        ?
   int-or-other-max-then-get-by-val                   8.7746+-0.1471            8.7323+-0.1245        
   int-or-other-min-then-get-by-val                   6.9771+-0.0239     ?      6.9904+-0.1203        ?
   int-or-other-mod-then-get-by-val                   6.1162+-0.0127     ?      6.1181+-0.0173        ?
   int-or-other-mul-then-get-by-val                   6.5173+-0.0879     ?      6.5293+-0.0868        ?
   int-or-other-neg-then-get-by-val                   7.8571+-0.0154     ?      7.8729+-0.0324        ?
   int-or-other-neg-zero-then-get-by-val             42.6450+-1.0077           42.0935+-0.1698          might be 1.0131x faster
   int-or-other-sub-then-get-by-val                  10.4290+-0.0794     ?     10.5828+-0.1117        ? might be 1.0147x slower
   int-or-other-sub                                   8.7681+-0.1312     ?      8.8729+-0.0754        ? might be 1.0120x slower
   int-overflow-local                                 6.4192+-0.0992     ?      6.4325+-0.0642        ?
   Int16Array-alloc-long-lived                       67.4344+-0.3356           67.4165+-0.4927        
   Int16Array-bubble-sort-with-byteLength            49.0290+-0.1237     ?     49.0698+-0.2043        ?
   Int16Array-bubble-sort                            48.4399+-0.1559           48.3439+-0.1189        
   Int16Array-load-int-mul                            1.8048+-0.0116     ?      1.8205+-0.0205        ?
   Int16Array-to-Int32Array-set                      94.1709+-0.6158     ^     88.4683+-0.5921        ^ definitely 1.0645x faster
   Int32Array-alloc-huge-long-lived                 707.4789+-6.3190          705.2322+-5.4013        
   Int32Array-alloc-huge                            801.1260+-7.8242     ?    802.7616+-6.5923        ?
   Int32Array-alloc-large-long-lived                968.5314+-6.9465     ?    979.0441+-7.6307        ? might be 1.0109x slower
   Int32Array-alloc-large                            45.1514+-0.9163     ?     45.2350+-0.9358        ?
   Int32Array-alloc-long-lived                       80.2466+-0.6802     ?     80.5690+-0.5625        ?
   Int32Array-alloc                                   4.4883+-0.0152     ?      4.4987+-0.0090        ?
   Int32Array-Int8Array-view-alloc                   15.8532+-0.3394     ^     15.2002+-0.3081        ^ definitely 1.0430x faster
   int52-spill                                       13.3227+-0.1608     ?     13.6355+-0.2333        ? might be 1.0235x slower
   Int8Array-alloc-long-lived                        67.4277+-1.0180           66.8928+-0.6107        
   Int8Array-load-with-byteLength                     5.0249+-0.0575     ?      5.0605+-0.0084        ?
   Int8Array-load                                     5.0525+-0.0486            5.0479+-0.0462        
   integer-divide                                    14.8829+-0.0750     ?     14.9689+-0.1694        ?
   integer-modulo                                     2.0001+-0.0101     ?      2.0065+-0.0098        ?
   large-int-captured                                 9.7005+-0.1350     !     10.0284+-0.1024        ! definitely 1.0338x slower
   large-int-neg                                     26.3249+-0.2677     ?     26.5246+-0.1809        ?
   large-int                                         23.5454+-0.1817           23.5243+-0.1900        
   lots-of-fields                                    11.0478+-0.1527           10.9352+-0.1043          might be 1.0103x faster
   make-indexed-storage                               4.2604+-0.0561     ?      4.3024+-0.0799        ?
   make-rope-cse                                      5.9810+-0.0662     ?      5.9939+-0.1483        ?
   marsaglia-larger-ints                            112.0397+-0.2621          112.0026+-0.3080        
   marsaglia-osr-entry                               47.0259+-0.0985     ?     47.1119+-0.1815        ?
   marsaglia                                        463.9281+-0.3487     ?    465.5078+-4.7632        ?
   method-on-number                                  30.8364+-0.4381     ?     31.1339+-0.4830        ?
   negative-zero-divide                               0.4240+-0.0033     !      0.4343+-0.0018        ! definitely 1.0244x slower
   negative-zero-modulo                               0.4065+-0.0026     !      0.4191+-0.0023        ! definitely 1.0310x slower
   negative-zero-negate                               0.3953+-0.0060     ?      0.4221+-0.0263        ? might be 1.0678x slower
   nested-function-parsing-random                   381.4915+-0.3715     !    383.0010+-0.7066        ! definitely 1.0040x slower
   nested-function-parsing                           48.0322+-0.0804           48.0255+-0.2124        
   new-array-buffer-dead                              3.7207+-0.0472            3.7160+-0.0150        
   new-array-buffer-push                             10.4829+-0.1496     ?     10.6141+-0.1380        ? might be 1.0125x slower
   new-array-dead                                    28.5293+-0.1136     ?     28.5826+-0.1340        ?
   new-array-push                                     6.8304+-0.0811     ?      6.8945+-0.0544        ?
   number-test                                        4.2705+-0.0137     !      4.2975+-0.0073        ! definitely 1.0063x slower
   object-closure-call                               13.2238+-0.0787     ?     13.2758+-0.0283        ?
   object-test                                        4.8460+-0.0493     ?      4.8700+-0.0356        ?
   poly-stricteq                                     75.9438+-0.1864     ?     76.8582+-1.3692        ? might be 1.0120x slower
   polymorphic-structure                             21.1963+-0.0887           21.0806+-0.0678        
   polyvariant-monomorphic-get-by-id                 11.9407+-0.0738     ?     12.0076+-0.1596        ?
   put-by-id                                         19.1250+-0.3711     ?     19.3291+-0.1985        ? might be 1.0107x slower
   put-by-val-large-index-blank-indexing-type   
                                                     10.8350+-0.1058           10.8255+-0.1102        
   rare-osr-exit-on-local                            20.2508+-0.1127     ?     20.2563+-0.1010        ?
   register-pressure-from-osr                        31.2747+-0.0515           31.2624+-0.0973        
   simple-activation-demo                            35.0997+-0.0641     !     39.0609+-0.1438        ! definitely 1.1129x slower
   slow-array-profile-convergence                     4.0331+-0.0223     ?      4.1010+-0.1713        ? might be 1.0168x slower
   slow-convergence                                   4.1750+-0.0223     ?      4.2023+-0.0142        ?
   sparse-conditional                                 1.3463+-0.0019     !      1.3604+-0.0068        ! definitely 1.0105x slower
   splice-to-remove                                  77.3097+-0.1252           77.2926+-0.1994        
   stepanov_container                             10574.1981+-35.3169    ^  10079.5626+-25.7090       ^ definitely 1.0491x faster
   string-concat-object                               2.9823+-0.0115     ?      2.9914+-0.0107        ?
   string-concat-pair-object                          2.9503+-0.0253            2.9310+-0.0098        
   string-concat-pair-simple                         16.9589+-0.2881     ?     17.0600+-0.2501        ?
   string-concat-simple                              17.2697+-0.2101           16.8959+-0.3971          might be 1.0221x faster
   string-cons-repeat                                10.4980+-0.0299     ?     10.5032+-0.0149        ?
   string-cons-tower                                 11.1196+-0.0404           11.0422+-0.0424        
   string-equality                                   42.1516+-0.1052     !     42.4629+-0.0902        ! definitely 1.0074x slower
   string-get-by-val-big-char                        12.7971+-0.0625     !     13.1920+-0.1001        ! definitely 1.0309x slower
   string-get-by-val-out-of-bounds-insane             5.8139+-0.1233            5.8003+-0.0759        
   string-get-by-val-out-of-bounds                    5.3495+-0.0302            5.3453+-0.0103        
   string-get-by-val                                  4.8937+-0.0652            4.8299+-0.0793          might be 1.0132x faster
   string-hash                                        2.7448+-0.0119     ?      2.7519+-0.0048        ?
   string-long-ident-equality                        37.7510+-0.6113     ?     38.0123+-0.7714        ?
   string-repeat-arith                               49.9212+-0.3825     ?     50.4378+-0.2920        ? might be 1.0103x slower
   string-sub                                        98.1765+-0.4327     ?     98.8461+-0.6513        ?
   string-test                                        4.2326+-0.0096     !      4.2617+-0.0063        ! definitely 1.0069x slower
   string-var-equality                               70.2884+-0.1626     ?     73.3425+-6.8271        ? might be 1.0435x slower
   structure-hoist-over-transitions                   3.3966+-0.0687            3.3779+-0.0231        
   switch-char-constant                               3.4608+-0.0121     ?      3.4846+-0.0203        ?
   switch-char                                        8.1564+-0.0824     ?      8.1569+-0.0759        ?
   switch-constant                                    9.2999+-0.1213            9.2564+-0.1251        
   switch-string-basic-big-var                       20.2915+-0.1369     ?     20.3280+-0.1411        ?
   switch-string-basic-big                           21.6543+-0.8716           21.5615+-0.7276        
   switch-string-basic-var                           20.1884+-0.0842           20.1300+-0.1272        
   switch-string-basic                               21.4617+-0.7202           21.4024+-0.8822        
   switch-string-big-length-tower-var                29.0044+-0.0918           28.9097+-0.1448        
   switch-string-length-tower-var                    21.5760+-0.1213           21.4601+-0.0878        
   switch-string-length-tower                        16.4781+-0.1013     ?     16.4801+-0.1352        ?
   switch-string-short                               16.4452+-0.0536           16.4339+-0.0612        
   switch                                            13.5520+-0.1113           13.5406+-0.0907        
   tear-off-arguments-simple                          2.2378+-0.0419            2.2256+-0.0057        
   tear-off-arguments                                 3.5557+-0.0074     ?      3.5689+-0.0150        ?
   temporal-structure                                17.0236+-0.1554     ?     17.0538+-0.0568        ?
   to-int32-boolean                                  21.8172+-0.1498           21.7991+-0.1510        
   undefined-test                                     4.4914+-0.0292            4.4691+-0.0360        
   weird-inlining-const-prop                          2.2844+-0.0058     ?      2.2939+-0.0080        ?

   <arithmetic>                                     139.8108+-0.3185     ^    131.5298+-0.4734        ^ definitely 1.0630x faster
   <geometric> *                                     14.7927+-0.0134     ^     14.4775+-0.0148        ^ definitely 1.0218x faster
   <harmonic>                                         5.3339+-0.0130     !      5.3819+-0.0224        ! definitely 1.0090x slower

                                                        TipOfTree             InferConstClosure                                 
All benchmarks:
   <arithmetic>                                     210.4214+-0.6744     ^    204.7346+-0.3765        ^ definitely 1.0278x faster
   <geometric>                                       20.9056+-0.0182     ^     20.6150+-0.0137        ^ definitely 1.0141x faster
   <harmonic>                                         4.8067+-0.0077     !      4.8326+-0.0143        ! definitely 1.0054x slower

                                                        TipOfTree             InferConstClosure                                 
Geomean of preferred means:
   <scaled-result>                                   48.9925+-0.0579     ^     48.8156+-0.0278        ^ definitely 1.0036x faster
Comment 22 Filip Pizlo 2013-12-03 18:26:12 PST
Created attachment 218371 [details]
the patch

Fix a bunch of build issues.
Comment 23 WebKit Commit Bot 2013-12-03 18:27:54 PST
Attachment 218371 [details] did not pass style-queue:

Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/js/regress/infer-closure-const-then-mov-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-mov-no-inline-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-mov-no-inline.html', u'LayoutTests/js/regress/infer-closure-const-then-mov.html', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline.html', u'LayoutTests/js/regress/infer-closure-const-then-put-to-scope.html', u'LayoutTests/js/regress/infer-closure-const-then-reenter-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline-expected.txt', u'LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline.html', u'LayoutTests/js/regress/infer-closure-const-then-reenter.html', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-mov-no-inline.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-mov.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope-no-inline.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter-no-inline.js', u'LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter.js', u'Source/JavaScriptCore/ChangeLog', u'Source/JavaScriptCore/GNUmakefile.list.am', u'Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj', u'Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj', u'Source/JavaScriptCore/bytecode/CodeBlock.cpp', u'Source/JavaScriptCore/bytecode/Instruction.h', u'Source/JavaScriptCore/bytecode/Opcode.h', u'Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h', u'Source/JavaScriptCore/bytecode/VariableWatchpointSet.h', u'Source/JavaScriptCore/bytecode/Watchpoint.h', u'Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp', u'Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h', u'Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp', u'Source/JavaScriptCore/dfg/DFGGraph.cpp', u'Source/JavaScriptCore/dfg/DFGGraph.h', u'Source/JavaScriptCore/jit/JIT.cpp', u'Source/JavaScriptCore/jit/JIT.h', u'Source/JavaScriptCore/jit/JITOpcodes.cpp', u'Source/JavaScriptCore/jit/JITOpcodes32_64.cpp', u'Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm', u'Source/JavaScriptCore/llint/LowLevelInterpreter64.asm', u'Source/JavaScriptCore/runtime/CommonSlowPaths.cpp', u'Source/JavaScriptCore/runtime/CommonSlowPaths.h', u'Source/JavaScriptCore/runtime/ConstantMode.h', u'Source/JavaScriptCore/runtime/JSGlobalObject.h', u'Source/JavaScriptCore/runtime/JSScope.cpp', u'Source/JavaScriptCore/runtime/SymbolTable.cpp']" exit_code: 1
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:251:  The parameter name "set" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:265:  The parameter name "set" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 46 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 24 EFL EWS Bot 2013-12-04 06:28:30 PST
Comment on attachment 218371 [details]
the patch

Attachment 218371 [details] did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/40778074
Comment 25 Filip Pizlo 2013-12-04 09:12:16 PST
(In reply to comment #24)
> (From update of attachment 218371 [details])
> Attachment 218371 [details] did not pass efl-wk2-ews (efl-wk2):
> Output: http://webkit-queues.appspot.com/results/40778074

Internal compiler error.  I will ignore.
Comment 26 Geoffrey Garen 2013-12-04 10:55:27 PST
Comment on attachment 218371 [details]
the patch

r=me
Comment 27 Filip Pizlo 2013-12-04 11:29:12 PST
Landed in http://trac.webkit.org/changeset/160109