Bug 146929 - DFG should have adaptive structure watchpoints
Summary: DFG should have adaptive structure watchpoints
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: All All
: P2 Normal
Assignee: Filip Pizlo
URL:
Keywords:
Depends on: 147030 147034 147218 147250
Blocks: 147271
  Show dependency treegraph
 
Reported: 2015-07-13 23:28 PDT by Filip Pizlo
Modified: 2015-08-04 10:56 PDT (History)
17 users (show)

See Also:


Attachments
work in progress (19.03 KB, patch)
2015-07-13 23:28 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
it is written (31.33 KB, patch)
2015-07-14 13:23 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
start of a better approach (41.81 KB, patch)
2015-07-15 16:04 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
a bit more (45.63 KB, patch)
2015-07-15 16:20 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more things (57.62 KB, patch)
2015-07-15 20:16 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more carnage (72.47 KB, patch)
2015-07-15 21:28 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
moar (86.32 KB, patch)
2015-07-16 00:47 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
some more progress (105.30 KB, patch)
2015-07-16 13:37 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
this isn't going to be a tiny incremental change (118.83 KB, patch)
2015-07-16 19:54 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
a bit more (126.95 KB, patch)
2015-07-17 23:33 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
a little more (132.23 KB, patch)
2015-07-18 13:40 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more things (151.78 KB, patch)
2015-07-18 21:02 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
slowly figuring out the best way to handle conditions in the DFG frontend (157.36 KB, patch)
2015-07-19 16:14 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
a little more (189.60 KB, patch)
2015-07-23 14:10 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
so small patch (203.31 KB, patch)
2015-07-23 15:43 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
some tweaking (206.04 KB, patch)
2015-07-23 19:34 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more (210.43 KB, patch)
2015-07-23 21:27 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
starting to look like a complete picture (223.31 KB, patch)
2015-07-24 13:13 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
a bit more (224.03 KB, patch)
2015-07-24 15:16 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more (238.21 KB, patch)
2015-07-27 14:46 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
even more (246.37 KB, patch)
2015-07-27 22:56 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
OMG it compiles (249.95 KB, patch)
2015-07-28 15:30 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
OMG it's a 58x speed-up (256.39 KB, patch)
2015-07-28 17:32 PDT, Filip Pizlo
buildbot: commit-queue-
Details | Formatted Diff | Diff
Archive of layout-test-results from ews103 for mac-mavericks (728.31 KB, application/zip)
2015-07-28 18:23 PDT, Build Bot
no flags Details
Archive of layout-test-results from ews105 for mac-mavericks-wk2 (603.91 KB, application/zip)
2015-07-28 18:35 PDT, Build Bot
no flags Details
passing more tests (256.74 KB, patch)
2015-07-29 14:26 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
fix absence condition validation (263.57 KB, patch)
2015-07-29 15:37 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
passing so many tests (291.21 KB, patch)
2015-07-29 16:15 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
fixed more bugs (293.87 KB, patch)
2015-07-29 21:30 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
passing JSC tests (295.68 KB, patch)
2015-07-30 14:07 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more improvements (308.34 KB, patch)
2015-07-30 23:03 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
almost ready (311.54 KB, patch)
2015-07-31 00:41 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
closer to done (315.55 KB, patch)
2015-07-31 12:16 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more fixes (315.57 KB, patch)
2015-07-31 12:25 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
more fixes (317.87 KB, patch)
2015-07-31 12:32 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
fix debug tests (319.84 KB, patch)
2015-07-31 14:23 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
revised patch (321.14 KB, patch)
2015-07-31 23:12 PDT, Filip Pizlo
ggaren: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Filip Pizlo 2015-07-13 23:28:21 PDT
If we want a singleton object to have, or not have, some property then we shouldn't deoptimize just because some other unrelated property was added (or removed).
Comment 1 Filip Pizlo 2015-07-13 23:28:58 PDT
Created attachment 256760 [details]
work in progress
Comment 2 Filip Pizlo 2015-07-14 13:23:41 PDT
Created attachment 256789 [details]
it is written

Of course it fails to build.
Comment 3 WebKit Commit Bot 2015-07-15 10:14:06 PDT
Attachment 256789 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:694:  The parameter name "structure" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:64:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:65:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:66:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:67:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:131:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:132:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 7 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 4 Filip Pizlo 2015-07-15 16:04:53 PDT
Created attachment 256875 [details]
start of a better approach
Comment 5 Filip Pizlo 2015-07-15 16:20:09 PDT
Created attachment 256876 [details]
a bit more
Comment 6 Filip Pizlo 2015-07-15 16:27:50 PDT
Here's the plan for what I'll do: This work will replace StructureChain with the concept of an ObjectPropertyConditionSet.  Each of the ObjectPropertyConditions in the set can either be validated using a structure check, or they can be turned into a transition watchpoint.  The transition watchpoint can then revalidate the ObjectPropertyCondition when it fires, to see if a new transition watchpoint could be set.

This will eliminate StructureChain and the "normalizeStructureChain" code, and replace it with new code that reasons about ObjectPropertyConditions.  It's not a small change.  But I realized when running simple tests that we need our inline caches to also use adaptive watchpoints, or else the profiling feedback to the DFG/FTL will be bogus.
Comment 7 Filip Pizlo 2015-07-15 20:16:19 PDT
Created attachment 256889 [details]
more things
Comment 8 Filip Pizlo 2015-07-15 21:28:47 PDT
Created attachment 256891 [details]
more carnage
Comment 9 Filip Pizlo 2015-07-16 00:47:39 PDT
Created attachment 256894 [details]
moar
Comment 10 Filip Pizlo 2015-07-16 13:37:06 PDT
Created attachment 256919 [details]
some more progress
Comment 11 Filip Pizlo 2015-07-16 19:54:33 PDT
Created attachment 256952 [details]
this isn't going to be a tiny incremental change
Comment 12 Filip Pizlo 2015-07-17 23:33:57 PDT
Created attachment 257024 [details]
a bit more
Comment 13 Filip Pizlo 2015-07-18 13:40:03 PDT
Created attachment 257031 [details]
a little more
Comment 14 Filip Pizlo 2015-07-18 21:02:51 PDT
Created attachment 257048 [details]
more things
Comment 15 Filip Pizlo 2015-07-19 16:14:07 PDT
Created attachment 257068 [details]
slowly figuring out the best way to handle conditions in the DFG frontend
Comment 16 WebKit Commit Bot 2015-07-20 14:13:11 PDT
Attachment 257068 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCommonData.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/PutByIdVariant.h:63:  The parameter name "structure" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:30:  Missing spaces around /  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:91:  The parameter name "object" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:155:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:157:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:159:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:163:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:163:  The parameter name "globalObject" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:45:  The parameter name "codeBlock" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:84:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:44:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:40:  The parameter name "codeBlock" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 22 in 40 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 17 Filip Pizlo 2015-07-23 14:10:41 PDT
Created attachment 257376 [details]
a little more
Comment 18 Filip Pizlo 2015-07-23 15:43:05 PDT
Created attachment 257395 [details]
so small patch
Comment 19 Filip Pizlo 2015-07-23 19:34:09 PDT
Created attachment 257422 [details]
some tweaking
Comment 20 Filip Pizlo 2015-07-23 21:27:47 PDT
Created attachment 257432 [details]
more

I've gotten closer to figuring out how to make MultiGetByOffset work.
Comment 21 Filip Pizlo 2015-07-24 13:13:38 PDT
Created attachment 257472 [details]
starting to look like a complete picture
Comment 22 Filip Pizlo 2015-07-24 15:16:11 PDT
Created attachment 257484 [details]
a bit more

Still not compiling, but I believe that the code is written.
Comment 23 Filip Pizlo 2015-07-27 14:46:22 PDT
Created attachment 257594 [details]
more

It's getting closer to compiling.  Still a lot of work left though.
Comment 24 Filip Pizlo 2015-07-27 22:56:37 PDT
Created attachment 257635 [details]
even more
Comment 25 Filip Pizlo 2015-07-28 15:30:08 PDT
Created attachment 257694 [details]
OMG it compiles
Comment 26 Filip Pizlo 2015-07-28 17:32:42 PDT
Created attachment 257713 [details]
OMG it's a 58x speed-up

It's a 58x speed-up on this test:

 function foo(o) {
    var result = 0;
    for (var i = 0; i < 100; ++i)
        result += o.f;
    return result;
}

noInline(foo);

var p = {f:42};
var o = Object.create(p);

for (var i = 0; i < 10000; ++i) {
    //print("test: i = " + i);
    //print("Adding property.");
    p["i" + i] = i;
    //print("Calling foo().");
    var result = foo(o);
    if (result != 42 * 100)
        throw "Error: bad result: " + result;
}
Comment 27 WebKit Commit Bot 2015-07-28 17:35:18 PDT
Attachment 257713 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCommonData.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/PutByIdVariant.h:63:  The parameter name "structure" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:91:  The parameter name "object" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:156:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:158:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:160:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:164:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:164:  The parameter name "globalObject" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:45:  The parameter name "codeBlock" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:84:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:40:  The parameter name "codeBlock" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:212:  The parameter name "variant" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 22 in 49 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 28 Filip Pizlo 2015-07-28 17:36:35 PDT
Comment on attachment 257713 [details]
OMG it's a 58x speed-up

I didn't mean to mark this r? yet.
Comment 29 Build Bot 2015-07-28 18:23:45 PDT
Comment on attachment 257713 [details]
OMG it's a 58x speed-up

Attachment 257713 [details] did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/4577683656671232

Number of test failures exceeded the failure limit.
Comment 30 Build Bot 2015-07-28 18:23:50 PDT
Created attachment 257715 [details]
Archive of layout-test-results from ews103 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews103  Port: mac-mavericks  Platform: Mac OS X 10.9.5
Comment 31 Build Bot 2015-07-28 18:35:02 PDT
Comment on attachment 257713 [details]
OMG it's a 58x speed-up

Attachment 257713 [details] did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/6266533516935168

Number of test failures exceeded the failure limit.
Comment 32 Build Bot 2015-07-28 18:35:07 PDT
Created attachment 257717 [details]
Archive of layout-test-results from ews105 for mac-mavericks-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews105  Port: mac-mavericks-wk2  Platform: Mac OS X 10.9.5
Comment 33 Filip Pizlo 2015-07-29 14:26:09 PDT
Created attachment 257768 [details]
passing more tests
Comment 34 Filip Pizlo 2015-07-29 15:37:10 PDT
Created attachment 257778 [details]
fix absence condition validation

And remove more dead code.
Comment 35 Filip Pizlo 2015-07-29 16:15:53 PDT
Created attachment 257781 [details]
passing so many tests
Comment 36 Filip Pizlo 2015-07-29 21:30:25 PDT
Created attachment 257812 [details]
fixed more bugs
Comment 37 Filip Pizlo 2015-07-30 14:07:56 PDT
Created attachment 257851 [details]
passing JSC tests
Comment 38 Filip Pizlo 2015-07-30 15:40:03 PDT
Performance so far.  Note that I have some microbenchmark regressions to look at.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r187605)
"Adaptive" at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r187605)

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

                                                        TipOfTree                  Adaptive                                     
SunSpider:
   3d-cube                                            4.6193+-0.4241            4.6173+-0.3142        
   3d-morph                                           5.3265+-0.2625            5.1967+-0.1403          might be 1.0250x faster
   3d-raytrace                                        5.1626+-0.1744     ?      5.3983+-0.2012        ? might be 1.0457x slower
   access-binary-trees                                2.2131+-0.2604            2.0710+-0.0617          might be 1.0686x faster
   access-fannkuch                                    5.5886+-0.2619            5.4248+-0.1480          might be 1.0302x faster
   access-nbody                                       2.4626+-0.1168     ?      2.5122+-0.1906        ? might be 1.0201x slower
   access-nsieve                                      2.9914+-0.0537            2.9796+-0.0568        
   bitops-3bit-bits-in-byte                           1.4476+-0.0285     ?      1.4687+-0.0300        ? might be 1.0145x slower
   bitops-bits-in-byte                                3.2468+-0.0368     ?      3.2573+-0.1354        ?
   bitops-bitwise-and                                 2.0701+-0.0421            2.0426+-0.0496          might be 1.0135x faster
   bitops-nsieve-bits                                 2.9061+-0.0650     ?      3.1956+-0.8377        ? might be 1.0996x slower
   controlflow-recursive                              1.9943+-0.0312     ?      2.0454+-0.1181        ? might be 1.0256x slower
   crypto-aes                                         3.8182+-0.0499     ?      3.8812+-0.1234        ? might be 1.0165x slower
   crypto-md5                                         2.4956+-0.3584            2.4030+-0.0542          might be 1.0385x faster
   crypto-sha1                                        2.6584+-0.6234            2.3982+-0.1374          might be 1.1085x faster
   date-format-tofte                                  6.7519+-0.3216            6.3844+-0.1636          might be 1.0576x faster
   date-format-xparb                                  4.6660+-0.4783            4.4670+-0.2043          might be 1.0446x faster
   math-cordic                                        2.7815+-0.1494            2.7655+-0.0486        
   math-partial-sums                                  5.0549+-0.2882            4.8279+-0.1813          might be 1.0470x faster
   math-spectral-norm                                 1.8088+-0.0849     ?      1.8537+-0.0618        ? might be 1.0248x slower
   regexp-dna                                         6.1425+-0.1436            6.1330+-0.1995        
   string-base64                                      4.5883+-0.7176            4.4254+-0.3998          might be 1.0368x faster
   string-fasta                                       6.3585+-1.5756            5.7488+-0.2307          might be 1.1061x faster
   string-tagcloud                                    7.8803+-0.1241     ?      8.0861+-0.4959        ? might be 1.0261x slower
   string-unpack-code                                18.9592+-0.2673     ?     19.8291+-1.2568        ? might be 1.0459x slower
   string-validate-input                              4.6056+-0.2290            4.4280+-0.1447          might be 1.0401x faster

   <arithmetic>                                       4.5615+-0.0608            4.5323+-0.0580          might be 1.0064x faster

                                                        TipOfTree                  Adaptive                                     
LongSpider:
   3d-cube                                          781.1438+-12.1758    ?    788.0723+-21.3100       ?
   3d-morph                                        1487.4667+-5.3676     ?   1487.5267+-6.8380        ?
   3d-raytrace                                      621.7550+-2.2847          620.7495+-3.0772        
   access-binary-trees                              811.1824+-7.8156          806.2681+-5.5164        
   access-fannkuch                                  283.6971+-8.5959          279.0286+-3.3338          might be 1.0167x faster
   access-nbody                                     508.0830+-2.3538     ?    508.7104+-3.1607        ?
   access-nsieve                                    361.0101+-2.0913     ?    362.3283+-1.5993        ?
   bitops-3bit-bits-in-byte                          42.0715+-2.0793           41.1171+-1.6266          might be 1.0232x faster
   bitops-bits-in-byte                               81.6127+-3.2778           79.4235+-2.5846          might be 1.0276x faster
   bitops-nsieve-bits                               406.4989+-8.3946          402.4927+-5.2498        
   controlflow-recursive                            419.4960+-3.0812          416.8892+-1.5208        
   crypto-aes                                       582.9516+-4.5257          582.4740+-5.5528        
   crypto-md5                                       475.9110+-6.3881     ?    478.6185+-6.7434        ?
   crypto-sha1                                      624.0099+-9.9987          623.0769+-4.3869        
   date-format-tofte                                509.7210+-11.3070         493.4487+-8.5462          might be 1.0330x faster
   date-format-xparb                                626.0375+-2.2516     ?    648.7347+-73.1470       ? might be 1.0363x slower
   hash-map                                         151.4670+-1.1867     ?    153.6672+-3.4143        ? might be 1.0145x slower
   math-cordic                                      481.5949+-1.4584     ?    481.6936+-1.7854        ?
   math-partial-sums                                460.1578+-0.7810     ?    464.3350+-7.0472        ?
   math-spectral-norm                               545.2871+-0.9020     ?    545.3309+-1.0568        ?
   string-base64                                    350.5933+-5.3771          348.2313+-4.1255        
   string-fasta                                     355.6555+-3.6114          355.6117+-4.4138        
   string-tagcloud                                  176.1256+-1.3514     ?    181.8405+-6.7696        ? might be 1.0324x slower

   <geometric>                                      390.1004+-0.9735          389.6696+-2.2825          might be 1.0011x faster

                                                        TipOfTree                  Adaptive                                     
V8Spider:
   crypto                                            49.7838+-2.1920     ?     49.9388+-2.3672        ?
   deltablue                                         79.4367+-3.1490           78.8587+-1.8656        
   earley-boyer                                      39.5583+-0.9748     ?     40.4896+-1.3059        ? might be 1.0235x slower
   raytrace                                          29.0769+-0.5740           28.6049+-1.4495          might be 1.0165x faster
   regexp                                            62.3997+-2.8605     ?     70.5702+-20.7702       ? might be 1.1309x slower
   richards                                          69.1912+-2.0287     ?     69.4009+-1.6388        ?
   splay                                             35.4365+-1.8812           34.5102+-3.2850          might be 1.0268x faster

   <geometric>                                       49.1567+-0.6120     ?     49.7066+-1.9707        ? might be 1.0112x slower

                                                        TipOfTree                  Adaptive                                     
Octane:
   encrypt                                           0.19130+-0.00066    ?     0.19135+-0.00037       ?
   decrypt                                           3.34255+-0.06326          3.33672+-0.04680       
   deltablue                                x2       0.15256+-0.00157    ?     0.15328+-0.00270       ?
   earley                                            0.30207+-0.00348          0.30028+-0.00191       
   boyer                                             4.19236+-0.13866          4.14824+-0.14232         might be 1.0106x faster
   navier-stokes                            x2       4.90298+-0.00724    ?     4.91604+-0.01562       ?
   raytrace                                 x2       1.02128+-0.03372    ?     1.02830+-0.06121       ?
   richards                                 x2       0.09901+-0.00148          0.09880+-0.00087       
   splay                                    x2       0.33268+-0.00286    ?     0.33533+-0.00263       ?
   regexp                                   x2      25.38155+-0.64297    ?    25.75572+-0.85975       ? might be 1.0147x slower
   pdfjs                                    x2      37.77166+-0.37494         37.54305+-0.56389       
   mandreel                                 x2      44.30029+-0.65248         44.08082+-0.43609       
   gbemu                                    x2      33.70240+-0.61546    ?    33.86129+-0.60479       ?
   closure                                           0.55220+-0.00427    ?     0.55472+-0.00354       ?
   jquery                                            7.05821+-0.04746    ?     7.09195+-0.03579       ?
   box2d                                    x2       9.97939+-0.06772    ?    10.12206+-0.08841       ? might be 1.0143x slower
   zlib                                     x2     387.92212+-13.44063   ?   390.64252+-12.37582      ?
   typescript                               x2     657.91361+-10.37668       652.76383+-15.58996      

   <geometric>                                       5.59012+-0.02852    ?     5.60360+-0.02940       ? might be 1.0024x slower

                                                        TipOfTree                  Adaptive                                     
Kraken:
   ai-astar                                          237.830+-1.056            236.707+-1.919         
   audio-beat-detection                               83.230+-0.223      !      85.308+-0.472         ! definitely 1.0250x slower
   audio-dft                                          97.385+-2.209             95.866+-1.299           might be 1.0158x faster
   audio-fft                                          55.090+-1.154      ?      56.395+-1.822         ? might be 1.0237x slower
   audio-oscillator                                   61.028+-1.219      ?      61.854+-1.111         ? might be 1.0135x slower
   imaging-darkroom                                   96.855+-1.179      ^      95.205+-0.322         ^ definitely 1.0173x faster
   imaging-desaturate                                 53.821+-2.759             51.433+-3.653           might be 1.0464x faster
   imaging-gaussian-blur                              86.640+-5.443      ?      86.758+-5.012         ?
   json-parse-financial                               38.102+-0.989      ?      39.171+-1.470         ? might be 1.0281x slower
   json-stringify-tinderbox                           22.622+-0.714      ?      22.811+-0.684         ?
   stanford-crypto-aes                                42.634+-1.073      ?      43.362+-0.872         ? might be 1.0171x slower
   stanford-crypto-ccm                                39.468+-1.113      ?      40.134+-3.105         ? might be 1.0169x slower
   stanford-crypto-pbkdf2                             93.477+-0.346      ?      93.729+-0.203         ?
   stanford-crypto-sha256-iterative                   36.691+-0.965             35.727+-0.175           might be 1.0270x faster

   <arithmetic>                                       74.634+-0.629             74.604+-0.626           might be 1.0004x faster

                                                        TipOfTree                  Adaptive                                     
JSRegress:
   abc-forward-loop-equal                            28.6636+-0.3036     ?     28.7794+-0.3465        ?
   abc-postfix-backward-loop                         29.3296+-1.1625     ?     29.8837+-1.5305        ? might be 1.0189x slower
   abc-simple-backward-loop                          28.8717+-0.6681     ?     29.2138+-1.5135        ? might be 1.0118x slower
   abc-simple-forward-loop                           32.2845+-8.5735           28.7243+-0.6717          might be 1.1239x faster
   abc-skippy-loop                                   20.8477+-0.3880     ?     20.9388+-0.6212        ?
   abs-boolean                                        2.7128+-0.1218            2.6812+-0.1132          might be 1.0118x faster
   adapt-to-double-divide                            16.1355+-0.3257     ?     16.1674+-0.3093        ?
   aliased-arguments-getbyval                         1.1517+-0.0681     ?      1.2261+-0.1233        ? might be 1.0646x slower
   allocate-big-object                                2.4665+-0.2179     ?      2.6025+-0.3521        ? might be 1.0551x slower
   arguments-named-and-reflective                    11.1381+-0.5079           10.9393+-0.4219          might be 1.0182x faster
   arguments-out-of-bounds                            9.9111+-0.4737            9.7742+-0.4887          might be 1.0140x faster
   arguments-strict-mode                              9.9282+-0.8234     ?     10.0958+-0.9902        ? might be 1.0169x slower
   arguments                                          8.6400+-0.3460            8.4488+-0.2134          might be 1.0226x faster
   arity-mismatch-inlining                            0.8477+-0.0681            0.8160+-0.0385          might be 1.0388x faster
   array-access-polymorphic-structure                 6.1612+-0.4656            5.9999+-0.4811          might be 1.0269x faster
   array-nonarray-polymorhpic-access                 25.3004+-0.9484           24.7388+-0.6132          might be 1.0227x faster
   array-prototype-every                             73.8861+-0.8252     ?     75.9624+-1.4439        ? might be 1.0281x slower
   array-prototype-forEach                           73.0075+-1.6448     ?     74.3008+-1.0654        ? might be 1.0177x slower
   array-prototype-map                               82.2693+-3.3483     ?     82.6565+-0.3617        ?
   array-prototype-reduce                            70.6801+-0.6780     ?     71.0198+-0.8074        ?
   array-prototype-reduceRight                       70.4910+-1.2066     ?     70.6394+-2.0272        ?
   array-prototype-some                              74.2084+-1.5162     ?     75.0840+-0.5101        ? might be 1.0118x slower
   array-splice-contiguous                           21.6021+-0.8614           21.5867+-0.5021        
   array-with-double-add                              3.4509+-0.2769     ?      3.5318+-0.6326        ? might be 1.0234x slower
   array-with-double-increment                        3.0000+-0.0433     ?      3.0891+-0.1044        ? might be 1.0297x slower
   array-with-double-mul-add                          4.1120+-0.0590     ?      4.1296+-0.0898        ?
   array-with-double-sum                              3.1229+-0.0824     ?      3.1270+-0.0156        ?
   array-with-int32-add-sub                           5.7630+-0.1258     ?      6.1871+-1.0694        ? might be 1.0736x slower
   array-with-int32-or-double-sum                     3.1724+-0.0546     ?      3.1978+-0.0545        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     29.1735+-1.0479           29.0764+-1.0598        
   ArrayBuffer-DataView-alloc-long-lived             12.6346+-0.2917           12.5753+-0.4288        
   ArrayBuffer-Int32Array-byteOffset                  3.5267+-0.0635            3.5012+-0.0925        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     31.6101+-0.7920           31.5382+-0.7143        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.6685+-1.2740           20.1178+-0.5657          might be 1.0274x faster
   ArrayBuffer-Int8Array-alloc-long-lived            12.1139+-0.3044     ?     12.1307+-0.4383        ?
   ArrayBuffer-Int8Array-alloc                        9.5345+-0.3254     ?      9.7273+-0.3935        ? might be 1.0202x slower
   asmjs_bool_bug                                     7.4093+-0.2086     ?      7.8170+-1.5421        ? might be 1.0550x slower
   assign-custom-setter-polymorphic                   2.6746+-0.0642     !      9.8872+-0.8793        ! definitely 3.6966x slower
   assign-custom-setter                               3.3783+-0.0905     !     20.9528+-1.3798        ! definitely 6.2022x slower
   basic-set                                          7.9431+-0.5477            7.5143+-0.2902          might be 1.0571x faster
   big-int-mul                                        3.3890+-0.0364     ?      3.4617+-0.1074        ? might be 1.0214x slower
   boolean-test                                       2.8844+-0.0355            2.8014+-0.0503          might be 1.0296x faster
   branch-fold                                        3.5968+-0.1083            3.5393+-0.0640          might be 1.0163x faster
   branch-on-string-as-boolean                       16.2110+-0.6495     ?     16.5423+-0.6174        ? might be 1.0204x slower
   by-val-generic                                     7.3732+-0.4463            7.2927+-0.5928          might be 1.0110x faster
   call-spread-apply                                 28.2214+-2.0117           27.1017+-1.6464          might be 1.0413x faster
   call-spread-call                                  21.7940+-0.9045     ?     22.5137+-1.5370        ? might be 1.0330x slower
   captured-assignments                               0.4091+-0.0460            0.3982+-0.0173          might be 1.0274x faster
   cast-int-to-double                                 5.0380+-0.0449     ?      5.2513+-0.5848        ? might be 1.0424x slower
   cell-argument                                      6.4428+-0.4825     ?      6.5090+-0.5853        ? might be 1.0103x slower
   cfg-simplify                                       2.7734+-0.0785            2.7074+-0.0361          might be 1.0244x faster
   chain-getter-access                                7.9632+-0.1174     ?      8.0197+-0.1402        ?
   cmpeq-obj-to-obj-other                            11.9469+-0.3865           11.5911+-0.6865          might be 1.0307x faster
   constant-test                                      4.7156+-0.0850     ?      4.7857+-0.1101        ? might be 1.0149x slower
   create-lots-of-functions                          10.8433+-2.3303            9.2683+-0.3368          might be 1.1699x faster
   cse-new-array-buffer                               2.2327+-0.1186     ?      2.2410+-0.0596        ?
   cse-new-array                                      2.2989+-0.0542            2.2856+-0.1127        
   DataView-custom-properties                        34.8639+-0.8424     ?     35.2685+-1.1218        ? might be 1.0116x slower
   delay-tear-off-arguments-strictmode               12.4345+-0.2755     ?     12.5212+-0.3334        ?
   deltablue-varargs                                148.7791+-1.6170     ?    149.9564+-2.3082        ?
   destructuring-arguments                          162.7688+-2.4811     ?    166.9583+-10.1834       ? might be 1.0257x slower
   destructuring-parameters-overridden-by-function   
                                                      0.5118+-0.0809     ?      0.5374+-0.0711        ? might be 1.0500x slower
   destructuring-swap                                 4.7239+-0.2498            4.6018+-0.0292          might be 1.0265x faster
   direct-arguments-getbyval                          1.1790+-0.0532     ?      1.1942+-0.0814        ? might be 1.0128x slower
   div-boolean-double                                 5.3957+-0.2232            5.3085+-0.0694          might be 1.0164x faster
   div-boolean                                        8.0489+-0.0926     ?      8.0648+-0.0538        ?
   double-get-by-val-out-of-bounds                    3.9609+-0.0712     ?      4.0282+-0.1182        ? might be 1.0170x slower
   double-pollution-getbyval                          8.8355+-0.5354     ?      8.8590+-0.3778        ?
   double-pollution-putbyoffset                       3.7761+-0.1005     ?      3.8222+-0.0765        ? might be 1.0122x slower
   double-real-use                                   26.3426+-2.0368     ?     28.4450+-5.5679        ? might be 1.0798x slower
   double-to-int32-typed-array-no-inline              2.0411+-0.0378            2.0128+-0.0613          might be 1.0141x faster
   double-to-int32-typed-array                        1.7653+-0.0452     ?      1.7875+-0.1303        ? might be 1.0125x slower
   double-to-uint32-typed-array-no-inline             2.0815+-0.0498     ?      2.0863+-0.0480        ?
   double-to-uint32-typed-array                       1.8372+-0.0577            1.8198+-0.0366        
   elidable-new-object-dag                           33.5136+-0.5546     ?     34.3744+-1.7512        ? might be 1.0257x slower
   elidable-new-object-roflcopter                    33.2262+-1.1015     ?     33.9949+-1.3305        ? might be 1.0231x slower
   elidable-new-object-then-call                     31.4548+-1.1963     ?     31.5133+-1.1143        ?
   elidable-new-object-tree                          35.7080+-0.3374     ?     36.8626+-1.5649        ? might be 1.0323x slower
   empty-string-plus-int                              4.6251+-0.1094     ?      4.7104+-0.3808        ? might be 1.0184x slower
   emscripten-cube2hash                              25.4968+-1.0434     ?     28.7761+-5.8199        ? might be 1.1286x slower
   exit-length-on-plain-object                       13.0568+-0.8698           12.9199+-0.5493          might be 1.0106x faster
   external-arguments-getbyval                        1.2406+-0.0798            1.2172+-0.0436          might be 1.0192x faster
   external-arguments-putbyval                        2.1590+-0.0585     ?      2.2480+-0.1230        ? might be 1.0413x slower
   fixed-typed-array-storage-var-index                1.2295+-0.0982            1.1553+-0.0218          might be 1.0642x faster
   fixed-typed-array-storage                          0.8476+-0.0299     ?      0.8708+-0.0374        ? might be 1.0274x slower
   Float32Array-matrix-mult                           4.1297+-0.5240            4.1116+-0.4966        
   Float32Array-to-Float64Array-set                  46.3646+-0.8792     ?     48.2498+-1.7349        ? might be 1.0407x slower
   Float64Array-alloc-long-lived                     75.7845+-2.1264     ?     77.0388+-1.9262        ? might be 1.0166x slower
   Float64Array-to-Int16Array-set                    57.0330+-0.8686     ?     58.0069+-1.7486        ? might be 1.0171x slower
   fold-double-to-int                                12.9717+-0.6168           12.7483+-0.2409          might be 1.0175x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.6876+-0.7119           10.1901+-0.4543          might be 1.0488x faster
   fold-get-by-id-to-multi-get-by-offset              8.6353+-0.4710     ?      9.0087+-0.6952        ? might be 1.0432x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.4194+-0.4178            7.5130+-1.0939          might be 1.1207x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.9902+-0.5865            7.6838+-0.2292          might be 1.0399x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.7399+-0.5529            7.3689+-0.3610          might be 1.0503x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.5110+-0.1995     ?      4.5717+-0.5964        ? might be 1.0134x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.7987+-0.8476            8.3987+-0.4798          might be 1.0476x faster
   fold-put-by-id-to-multi-put-by-offset              8.2701+-0.4216     ?      8.4134+-0.7904        ? might be 1.0173x slower
   fold-put-structure                                 5.2879+-0.5057            4.7682+-0.6395          might be 1.1090x faster
   for-of-iterate-array-entries                      11.3014+-0.5616           11.0322+-0.2773          might be 1.0244x faster
   for-of-iterate-array-keys                          3.4248+-0.2417            3.3993+-0.2935        
   for-of-iterate-array-values                        3.4708+-0.3852            3.3016+-0.1481          might be 1.0513x faster
   fround                                            18.6487+-0.6299     ?     18.9576+-0.5793        ? might be 1.0166x slower
   ftl-library-inlining-dataview                     57.3069+-2.3456     ?     57.8158+-2.6357        ?
   ftl-library-inlining                             107.0020+-0.7762     ?    107.0547+-0.6294        ?
   function-dot-apply                                 2.0058+-0.1378            1.9820+-0.0628          might be 1.0120x faster
   function-test                                      2.6477+-0.1026     ?      2.7302+-0.2456        ? might be 1.0312x slower
   function-with-eval                                92.7821+-1.8527           92.2350+-2.0514        
   gcse-poly-get-less-obvious                        14.1954+-0.2703           14.0573+-0.3864        
   gcse-poly-get                                     14.7201+-0.9989           14.0186+-0.1734          might be 1.0500x faster
   gcse                                               3.7992+-0.1393            3.7917+-0.0650        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.5738+-0.0449     !      2.7875+-0.0494        ! definitely 1.0830x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.7198+-0.2258     !     10.1746+-0.1487        ! definitely 1.7788x slower
   get-by-id-chain-from-try-block                     5.5675+-0.3424            5.4482+-0.1801          might be 1.0219x faster
   get-by-id-check-structure-elimination              4.6979+-0.8712            4.4482+-0.2554          might be 1.0561x faster
   get-by-id-proto-or-self                           15.7513+-0.8786     ?     16.2369+-3.6862        ? might be 1.0308x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0360+-0.1057     ?      3.3167+-0.1863        ? might be 1.0925x slower
   get-by-id-self-or-proto                           14.5896+-0.7252     ?     15.2358+-1.2726        ? might be 1.0443x slower
   get-by-val-out-of-bounds                           3.8134+-0.1397     ?      3.9787+-0.2795        ? might be 1.0434x slower
   get_callee_monomorphic                             2.2690+-0.1532            2.1674+-0.1334          might be 1.0469x faster
   get_callee_polymorphic                             3.4572+-0.4772            3.3247+-0.2253          might be 1.0398x faster
   getter-no-activation                               4.7446+-0.0684            4.7086+-0.1085        
   getter-prototype                                  10.5387+-1.9840            9.7930+-0.2846          might be 1.0761x faster
   getter-richards                                  123.4040+-4.0896     ^    102.8457+-9.9160        ^ definitely 1.1999x faster
   getter                                             5.2867+-0.2957     ?      5.5695+-0.4702        ? might be 1.0535x slower
   global-var-const-infer-fire-from-opt               0.9167+-0.0614     ?      0.9508+-0.0405        ? might be 1.0373x slower
   global-var-const-infer                             0.8296+-0.1782            0.7192+-0.0307          might be 1.1535x faster
   HashMap-put-get-iterate-keys                      26.9833+-0.5403     ?     31.3082+-8.8017        ? might be 1.1603x slower
   HashMap-put-get-iterate                           26.0661+-1.6239     ?     26.5822+-1.5198        ? might be 1.0198x slower
   HashMap-string-put-get-iterate                    24.2545+-0.9683           23.3170+-0.2971          might be 1.0402x faster
   hoist-make-rope                                    8.5766+-1.0242     ?      8.6717+-0.5620        ? might be 1.0111x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.7181+-1.3384            4.5857+-0.5993          might be 1.0289x faster
   hoist-poly-check-structure                         3.2655+-0.1223     ?      3.2935+-0.2204        ?
   imul-double-only                                   7.0196+-0.2924     ?      7.1530+-0.5063        ? might be 1.0190x slower
   imul-int-only                                      9.2288+-0.7766            9.0310+-0.8303          might be 1.0219x faster
   imul-mixed                                         7.4592+-1.4967            6.8933+-0.5591          might be 1.0821x faster
   in-four-cases                                     17.3451+-0.4732     ?     17.4107+-0.3440        ?
   in-one-case-false                                  9.2902+-0.3620     ?      9.4762+-0.4578        ? might be 1.0200x slower
   in-one-case-true                                   9.3185+-0.4161            9.0942+-0.1575          might be 1.0247x faster
   in-two-cases                                       9.6662+-0.3946            9.4649+-0.2789          might be 1.0213x faster
   indexed-properties-in-objects                      2.7593+-0.0332     ?      2.9369+-0.4877        ? might be 1.0644x slower
   infer-closure-const-then-mov-no-inline             3.1932+-0.0860     ?      3.2695+-0.2072        ? might be 1.0239x slower
   infer-closure-const-then-mov                      17.9458+-1.0063           16.9921+-0.7970          might be 1.0561x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.3404+-0.1362           10.3175+-0.1576        
   infer-closure-const-then-put-to-scope             21.1562+-0.7089           21.0119+-0.5560        
   infer-closure-const-then-reenter-no-inline   
                                                     49.2666+-0.3388     ?     49.6322+-0.9545        ?
   infer-closure-const-then-reenter                  22.3357+-1.8734           22.0723+-1.0267          might be 1.0119x faster
   infer-constant-global-property                     3.6177+-0.4743            3.3724+-0.0805          might be 1.0727x faster
   infer-constant-property                            2.6155+-0.0674            2.5680+-0.0204          might be 1.0185x faster
   infer-one-time-closure-ten-vars                    8.4598+-0.5966            8.2515+-0.5917          might be 1.0252x faster
   infer-one-time-closure-two-vars                    7.7204+-0.3239            7.6956+-0.2450        
   infer-one-time-closure                             7.9403+-0.6371            7.7902+-0.4518          might be 1.0193x faster
   infer-one-time-deep-closure                       13.9745+-2.7331           13.7100+-3.2597          might be 1.0193x faster
   inline-arguments-access                            3.7982+-0.4408            3.7479+-0.4462          might be 1.0134x faster
   inline-arguments-aliased-access                    3.8649+-0.7537            3.5381+-0.0686          might be 1.0924x faster
   inline-arguments-local-escape                      3.8758+-0.2076     ?      4.3405+-0.8123        ? might be 1.1199x slower
   inline-get-scoped-var                              4.5300+-0.0733     ?      4.7096+-0.2711        ? might be 1.0397x slower
   inlined-put-by-id-transition                      10.4407+-0.6997     ?     10.6057+-0.6302        ? might be 1.0158x slower
   int-or-other-abs-then-get-by-val                   4.9198+-0.4721     ?      5.4646+-1.5169        ? might be 1.1107x slower
   int-or-other-abs-zero-then-get-by-val             16.6591+-0.4899           15.9414+-0.3322          might be 1.0450x faster
   int-or-other-add-then-get-by-val                   4.2557+-0.3067            3.9673+-0.0569          might be 1.0727x faster
   int-or-other-add                                   4.9488+-0.2048            4.8189+-0.0504          might be 1.0269x faster
   int-or-other-div-then-get-by-val                   3.7061+-0.1693            3.6644+-0.0694          might be 1.0114x faster
   int-or-other-max-then-get-by-val                   4.0355+-0.1257     ?      4.3797+-0.4665        ? might be 1.0853x slower
   int-or-other-min-then-get-by-val                   4.1406+-0.0880     ?      4.1725+-0.0640        ?
   int-or-other-mod-then-get-by-val                   3.6225+-0.3372            3.4471+-0.1002          might be 1.0509x faster
   int-or-other-mul-then-get-by-val                   3.6038+-0.1600            3.5533+-0.0545          might be 1.0142x faster
   int-or-other-neg-then-get-by-val                   4.4337+-0.0907            4.4180+-0.1163        
   int-or-other-neg-zero-then-get-by-val             16.4442+-1.8142           15.9183+-0.7973          might be 1.0330x faster
   int-or-other-sub-then-get-by-val                   3.9532+-0.0782     ?      4.0205+-0.0479        ? might be 1.0170x slower
   int-or-other-sub                                   4.2274+-2.2646            3.3440+-0.0362          might be 1.2642x faster
   int-overflow-local                                 4.1909+-0.0682            4.1613+-0.0808        
   Int16Array-alloc-long-lived                       47.5739+-1.2675     ?     48.0203+-1.5671        ?
   Int16Array-bubble-sort-with-byteLength            19.0885+-0.7002           18.7055+-0.3747          might be 1.0205x faster
   Int16Array-bubble-sort                            20.0246+-1.3442           18.9355+-0.4286          might be 1.0575x faster
   Int16Array-load-int-mul                            1.4412+-0.0629            1.4021+-0.0198          might be 1.0279x faster
   Int16Array-to-Int32Array-set                      42.0087+-0.4799     ?     42.3774+-1.0217        ?
   Int32Array-alloc-large                            12.2949+-0.4945           11.8431+-0.5310          might be 1.0381x faster
   Int32Array-alloc-long-lived                       57.5802+-1.8002           57.5562+-1.8987        
   Int32Array-alloc                                   2.9159+-0.3476            2.8664+-0.1931          might be 1.0173x faster
   Int32Array-Int8Array-view-alloc                    6.1444+-0.3726            5.9382+-0.0976          might be 1.0347x faster
   int52-spill                                        4.6702+-0.5355            4.5351+-0.1797          might be 1.0298x faster
   Int8Array-alloc-long-lived                        43.7195+-1.7260     ?     43.7538+-2.1350        ?
   Int8Array-load-with-byteLength                     3.3568+-0.0417     ?      3.5455+-0.3102        ? might be 1.0562x slower
   Int8Array-load                                     3.3023+-0.0269     ?      3.3341+-0.0530        ?
   integer-divide                                    10.2420+-0.1753     ?     10.3115+-0.3249        ?
   integer-modulo                                     1.7951+-0.1741            1.6781+-0.0497          might be 1.0697x faster
   is-boolean-fold-tricky                             3.6845+-0.0492            3.6815+-0.0404        
   is-boolean-fold                                    2.6580+-0.1225            2.6220+-0.0354          might be 1.0137x faster
   is-function-fold-tricky-internal-function   
                                                      9.7993+-0.0442     ?      9.9168+-0.0814        ? might be 1.0120x slower
   is-function-fold-tricky                            4.2568+-0.3678            4.1094+-0.0770          might be 1.0359x faster
   is-function-fold                                   2.6664+-0.1395     ?      2.7624+-0.3528        ? might be 1.0360x slower
   is-number-fold-tricky                              4.0328+-0.1229            3.9942+-0.0865        
   is-number-fold                                     2.8178+-0.2678            2.6117+-0.0943          might be 1.0789x faster
   is-object-or-null-fold-functions                   2.6384+-0.0700            2.6020+-0.0360          might be 1.0140x faster
   is-object-or-null-fold-less-tricky                 4.1414+-0.1578            4.0220+-0.0509          might be 1.0297x faster
   is-object-or-null-fold-tricky                      5.1470+-0.2822            4.9774+-0.1345          might be 1.0341x faster
   is-object-or-null-fold                             2.6189+-0.0371     ?      3.0324+-0.6326        ? might be 1.1579x slower
   is-object-or-null-trickier-function                4.1136+-0.1315     ?      4.2384+-0.4801        ? might be 1.0303x slower
   is-object-or-null-trickier-internal-function   
                                                     10.0602+-0.0967           10.0282+-0.0365        
   is-object-or-null-tricky-function                  4.1246+-0.1262            4.0343+-0.0458          might be 1.0224x faster
   is-object-or-null-tricky-internal-function   
                                                      7.8245+-0.2830     ?      7.9946+-0.3071        ? might be 1.0217x slower
   is-string-fold-tricky                              3.9841+-0.1105            3.9786+-0.1023        
   is-string-fold                                     2.6787+-0.2078            2.6494+-0.0945          might be 1.0111x faster
   is-undefined-fold-tricky                           3.4807+-0.3486            3.3146+-0.0456          might be 1.0501x faster
   is-undefined-fold                                  2.5878+-0.0457     ?      2.7630+-0.5016        ? might be 1.0677x slower
   large-int-captured                                 3.8756+-0.0897     ?      3.9800+-0.2142        ? might be 1.0269x slower
   large-int-neg                                     13.6461+-0.3528           13.6065+-0.1688        
   large-int                                         13.2536+-0.2570     ?     13.3144+-0.4503        ?
   load-varargs-elimination                          21.0111+-0.8115     ?     21.0404+-0.2875        ?
   logical-not-weird-types                            2.9490+-0.3236            2.8607+-0.0798          might be 1.0309x faster
   logical-not                                        4.0573+-0.0644     ?      4.2365+-0.2867        ? might be 1.0442x slower
   lots-of-fields                                     9.4109+-0.2375     ?      9.5437+-0.7058        ? might be 1.0141x slower
   make-indexed-storage                               2.8715+-0.2325            2.7984+-0.3583          might be 1.0261x faster
   make-rope-cse                                      3.5838+-0.0861     ?      3.6282+-0.2434        ? might be 1.0124x slower
   marsaglia-larger-ints                             33.4193+-1.2192           32.8129+-1.3696          might be 1.0185x faster
   marsaglia-osr-entry                               21.2196+-1.0511     ?     21.4191+-0.7543        ?
   math-with-out-of-bounds-array-values              21.4572+-0.3421           20.9445+-0.3799          might be 1.0245x faster
   max-boolean                                        2.4596+-0.1427            2.4482+-0.0992        
   method-on-number                                  16.1738+-1.0358     ?     16.3706+-1.2619        ? might be 1.0122x slower
   min-boolean                                        2.4252+-0.0411     ?      2.4258+-0.0508        ?
   minus-boolean-double                               3.1005+-0.0991            3.0510+-0.0632          might be 1.0162x faster
   minus-boolean                                      2.3173+-0.0486     ?      2.3382+-0.1358        ?
   misc-strict-eq                                    31.2285+-1.6700     ?     31.6536+-2.1209        ? might be 1.0136x slower
   mod-boolean-double                                11.4886+-1.1582           11.1188+-0.2862          might be 1.0333x faster
   mod-boolean                                        8.1659+-0.0401     ?      8.1735+-0.0530        ?
   mul-boolean-double                                 3.6369+-0.1820            3.6188+-0.2153        
   mul-boolean                                        2.7400+-0.0518     ?      2.7466+-0.0425        ?
   neg-boolean                                        3.1353+-0.1398            3.0209+-0.0416          might be 1.0379x faster
   negative-zero-divide                               0.3473+-0.0572            0.3312+-0.0280          might be 1.0488x faster
   negative-zero-modulo                               0.3295+-0.0420     ?      0.3462+-0.0804        ? might be 1.0504x slower
   negative-zero-negate                               0.3065+-0.0255            0.2973+-0.0118          might be 1.0309x faster
   nested-function-parsing                           44.5765+-1.1270           44.0473+-1.1525          might be 1.0120x faster
   new-array-buffer-dead                             88.0514+-1.4205           87.8051+-0.4104        
   new-array-buffer-push                              6.3704+-0.4851            6.3697+-0.5664        
   new-array-dead                                    15.0146+-1.2015           14.3078+-1.1026          might be 1.0494x faster
   new-array-push                                     6.4416+-0.4921            6.0780+-0.1209          might be 1.0598x faster
   no-inline-constructor                             32.6570+-1.6503           32.0035+-0.8180          might be 1.0204x faster
   number-test                                        2.7985+-0.0397     ?      2.8446+-0.0648        ? might be 1.0165x slower
   object-closure-call                                4.8488+-0.1246     ?      4.9190+-0.1935        ? might be 1.0145x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.0564+-0.1747            3.9995+-0.2937          might be 1.0142x faster
   object-test                                        2.5784+-0.0376     ?      2.6183+-0.1793        ? might be 1.0155x slower
   obvious-sink-pathology-taken                      99.9159+-2.0988           99.5206+-1.3875        
   obvious-sink-pathology                            94.5744+-1.1330     ?     94.9219+-0.9332        ?
   obviously-elidable-new-object                     27.0456+-1.8210     ?     27.6380+-1.5904        ? might be 1.0219x slower
   plus-boolean-arith                                 2.5092+-0.3592            2.3519+-0.0803          might be 1.0669x faster
   plus-boolean-double                                3.0844+-0.1114     ?      3.1628+-0.1399        ? might be 1.0254x slower
   plus-boolean                                       2.5214+-0.0339     ?      2.5255+-0.0534        ?
   poly-chain-access-different-prototypes-simple   
                                                      2.7784+-0.0998     !      3.2971+-0.1213        ! definitely 1.1867x slower
   poly-chain-access-different-prototypes             2.4840+-0.0444     !      2.9540+-0.2052        ! definitely 1.1892x slower
   poly-chain-access-simpler                          2.8042+-0.2878     !      3.1774+-0.0660        ! definitely 1.1331x slower
   poly-chain-access                                  2.4746+-0.0396     !      3.2710+-0.1366        ! definitely 1.3218x slower
   poly-stricteq                                     49.8067+-0.6190     ?     50.1938+-0.7048        ?
   polymorphic-array-call                             1.2627+-0.0802            1.2412+-0.0602          might be 1.0174x faster
   polymorphic-get-by-id                              2.8521+-0.0945     ?      3.0221+-0.3755        ? might be 1.0596x slower
   polymorphic-put-by-id                             25.5405+-1.3840           24.3660+-0.7384          might be 1.0482x faster
   polymorphic-structure                             13.0146+-0.3310     ?     13.0847+-0.1325        ?
   polyvariant-monomorphic-get-by-id                  6.6203+-0.5675            6.3339+-0.7091          might be 1.0452x faster
   proto-getter-access                                7.9343+-0.1908     ?      8.1456+-0.3951        ? might be 1.0266x slower
   prototype-access-with-mutating-prototype         351.7904+-1.7535     ^      5.1399+-0.1730        ^ definitely 68.4437x faster
   put-by-id-replace-and-transition                   7.7849+-0.5053     ?      7.8482+-0.6954        ?
   put-by-id-slightly-polymorphic                     2.7456+-0.0613     ?      2.7489+-0.0620        ?
   put-by-id                                          9.9476+-0.6289     ?     10.1498+-1.0503        ? might be 1.0203x slower
   put-by-val-direct                                  0.3759+-0.1182            0.3151+-0.0029          might be 1.1932x faster
   put-by-val-large-index-blank-indexing-type   
                                                     11.8308+-0.3935     ?     12.6003+-0.8176        ? might be 1.0650x slower
   put-by-val-machine-int                             2.4815+-0.1233     ?      2.8072+-0.7685        ? might be 1.1312x slower
   rare-osr-exit-on-local                            14.4332+-0.3871           14.2678+-0.3395          might be 1.0116x faster
   register-pressure-from-osr                        16.0638+-0.2714     ?     16.2747+-0.6610        ? might be 1.0131x slower
   repeat-multi-get-by-offset                        20.6750+-0.2064     ?     20.7538+-0.5312        ?
   setter-prototype                                   7.6235+-0.2735     ?      7.6678+-0.5336        ?
   setter                                             5.6305+-0.4597            5.3180+-0.4525          might be 1.0588x faster
   simple-activation-demo                            24.4511+-0.5446           24.3002+-0.7269        
   simple-getter-access                              10.4116+-0.3918     ?     10.4442+-0.5801        ?
   simple-poly-call-nested                            8.9312+-0.5607            8.6057+-0.5026          might be 1.0378x faster
   simple-poly-call                                   1.2294+-0.0381            1.2177+-0.0350        
   sin-boolean                                       18.1641+-1.7614     ?     19.2746+-1.8698        ? might be 1.0611x slower
   singleton-scope                                   55.3509+-0.8763     ?     55.9382+-0.6020        ? might be 1.0106x slower
   sink-function                                      9.8286+-0.5301            9.7428+-0.6604        
   sink-huge-activation                              16.2479+-0.7669           15.7999+-0.3747          might be 1.0284x faster
   sinkable-new-object-dag                           55.9018+-2.1166           55.2126+-1.0371          might be 1.0125x faster
   sinkable-new-object-taken                         41.8918+-0.8264     ?     42.0367+-1.2116        ?
   sinkable-new-object                               29.1692+-0.2451     ?     29.4102+-1.0222        ?
   slow-array-profile-convergence                     2.5619+-0.0758     ?      2.6657+-0.4503        ? might be 1.0405x slower
   slow-convergence                                   2.3686+-0.0871            2.3660+-0.0307        
   slow-ternaries                                    16.3352+-0.4204           16.1968+-0.3219        
   sorting-benchmark                                 17.1375+-0.9135           16.7754+-0.3842          might be 1.0216x faster
   sparse-conditional                                 1.2215+-0.2774            1.1471+-0.0539          might be 1.0649x faster
   splice-to-remove                                  11.8257+-0.3158     ?     12.0729+-0.6339        ? might be 1.0209x slower
   string-char-code-at                               14.0776+-0.3377           14.0496+-0.3029        
   string-concat-object                               2.2905+-0.1411            2.2667+-0.0649          might be 1.0105x faster
   string-concat-pair-object                          2.1330+-0.2069            2.1235+-0.2186        
   string-concat-pair-simple                          9.6665+-0.8710            9.4567+-0.5402          might be 1.0222x faster
   string-concat-simple                               9.1582+-0.4230            8.9540+-0.1806          might be 1.0228x faster
   string-cons-repeat                                 6.6907+-0.5419            6.3697+-0.3520          might be 1.0504x faster
   string-cons-tower                                  6.9348+-0.4467            6.8894+-0.8117        
   string-equality                                   15.4838+-1.4412           15.0157+-0.3590          might be 1.0312x faster
   string-get-by-val-big-char                         6.4215+-0.0622     ?      6.5645+-0.3346        ? might be 1.0223x slower
   string-get-by-val-out-of-bounds-insane             3.2135+-0.0505     ?      3.2597+-0.0984        ? might be 1.0144x slower
   string-get-by-val-out-of-bounds                    4.0210+-0.1602     ?      4.0211+-0.1176        ?
   string-get-by-val                                  2.8532+-0.1435            2.7673+-0.0188          might be 1.0310x faster
   string-hash                                        1.8484+-0.0416     ?      1.9000+-0.1184        ? might be 1.0279x slower
   string-long-ident-equality                        12.7404+-0.5057           12.6399+-0.6240        
   string-out-of-bounds                              10.4863+-0.5185           10.4419+-0.2050        
   string-repeat-arith                               27.0098+-1.9095     ?     27.1653+-1.7619        ?
   string-sub                                        53.1845+-1.3861     ?     53.2865+-1.8306        ?
   string-test                                        2.6860+-0.0422     ?      2.7445+-0.0714        ? might be 1.0218x slower
   string-var-equality                               26.6074+-2.2339           25.8734+-0.5180          might be 1.0284x faster
   structure-hoist-over-transitions                   2.4499+-0.3098     ?      2.4540+-0.1526        ?
   substring-concat-weird                            36.0050+-1.4512           35.8964+-1.1817        
   substring-concat                                  38.7246+-0.7902     ?     39.2421+-1.6044        ? might be 1.0134x slower
   substring                                         45.2454+-1.2932           44.4405+-0.5824          might be 1.0181x faster
   switch-char-constant                               2.6363+-0.0508     ?      2.6445+-0.0626        ?
   switch-char                                        5.5087+-0.4611     ?      5.9192+-0.4909        ? might be 1.0745x slower
   switch-constant                                    8.2641+-0.4093     ?      9.0404+-0.8273        ? might be 1.0939x slower
   switch-string-basic-big-var                       15.4349+-0.4600     ?     15.6055+-0.4460        ? might be 1.0111x slower
   switch-string-basic-big                           14.5461+-0.2049     ?     15.0240+-0.4206        ? might be 1.0329x slower
   switch-string-basic-var                           13.3102+-0.4783           13.2080+-0.7068        
   switch-string-basic                               12.7876+-0.1794           12.7295+-0.2220        
   switch-string-big-length-tower-var                17.6442+-0.4205     ?     17.7734+-0.4886        ?
   switch-string-length-tower-var                    13.0135+-0.1692           12.8828+-0.1970          might be 1.0101x faster
   switch-string-length-tower                        11.6202+-0.2016     ?     11.6600+-0.2125        ?
   switch-string-short                               11.7506+-0.1958     ?     11.9377+-0.7186        ? might be 1.0159x slower
   switch                                            12.1676+-0.7959           12.0280+-0.6192          might be 1.0116x faster
   tear-off-arguments-simple                          2.9035+-0.0981     ?      2.9928+-0.1792        ? might be 1.0308x slower
   tear-off-arguments                                 4.1297+-0.1544            3.9821+-0.2878          might be 1.0371x faster
   temporal-structure                                13.2281+-0.6246           12.3163+-0.4357          might be 1.0740x faster
   to-int32-boolean                                  13.2150+-0.5114           12.9702+-0.1917          might be 1.0189x faster
   try-catch-get-by-val-cloned-arguments             14.5156+-1.0553           14.2218+-0.6460          might be 1.0207x faster
   try-catch-get-by-val-direct-arguments              6.3399+-0.0709            6.3264+-0.1071        
   try-catch-get-by-val-scoped-arguments              7.9604+-1.2546            7.4787+-0.4456          might be 1.0644x faster
   typed-array-get-set-by-val-profiling              27.1637+-1.0488     ?     27.6028+-0.2052        ? might be 1.0162x slower
   undefined-property-access                        233.7094+-10.0949    ^    220.4449+-0.6560        ^ definitely 1.0602x faster
   undefined-test                                     2.7587+-0.0386     ?      2.8605+-0.0729        ? might be 1.0369x slower
   unprofiled-licm                                   14.3959+-1.3724           13.8188+-0.2663          might be 1.0418x faster
   varargs-call                                      13.7848+-0.3728           13.7784+-0.1115        
   varargs-construct-inline                          22.9680+-1.0782           22.3769+-1.1650          might be 1.0264x faster
   varargs-construct                                 20.9712+-0.4106           20.1508+-0.7637          might be 1.0407x faster
   varargs-inline                                     8.4830+-0.3011     ?      8.5225+-0.3425        ?
   varargs-strict-mode                                8.8112+-0.0883     ?      9.1601+-0.6448        ? might be 1.0396x slower
   varargs                                            8.8678+-0.0621     ?      8.9950+-0.4031        ? might be 1.0143x slower
   weird-inlining-const-prop                          2.7414+-0.3864            2.7334+-0.1246        

   <geometric>                                        7.8987+-0.0188            7.8759+-0.0341          might be 1.0029x faster

                                                        TipOfTree                  Adaptive                                     
AsmBench:
   bigfib.cpp                                       451.6307+-2.4082     ?    454.1812+-4.1752        ?
   cray.c                                           440.1460+-101.8193        398.4875+-5.4730          might be 1.1045x faster
   dry.c                                            429.6557+-1.7161     ?    429.8030+-2.1985        ?
   FloatMM.c                                        682.1206+-3.0334          680.5926+-2.2657        
   gcc-loops.cpp                                   3398.7229+-4.7666     ?   3412.0628+-13.0031       ?
   n-body.c                                         821.1183+-1.0596     ?    822.3647+-4.4883        ?
   Quicksort.c                                      405.8761+-1.2643          403.5260+-4.0620        
   stepanov_container.cpp                          3559.1079+-54.0341    ?   3562.3343+-34.1752       ?
   Towers.c                                         232.3597+-1.2920     ?    242.8305+-12.1807       ? might be 1.0451x slower

   <geometric>                                      722.6528+-15.9040         719.6955+-3.8038          might be 1.0041x faster

                                                        TipOfTree                  Adaptive                                     
CompressionBench:
   huffman                                           59.3627+-1.6185     ?     59.5089+-1.8501        ?
   arithmetic-simple                                266.6227+-1.2777     ?    267.7437+-2.1781        ?
   arithmetic-precise                               244.5331+-1.9165          243.2857+-2.0613        
   arithmetic-complex-precise                       243.6890+-1.6756     ?    244.6880+-1.2672        ?
   arithmetic-precise-order-0                       276.8322+-2.0244          276.5964+-1.2721        
   arithmetic-precise-order-1                       305.6397+-0.8863          305.0024+-1.2424        
   arithmetic-precise-order-2                       350.0862+-1.5309     ?    353.1543+-5.7607        ?
   arithmetic-simple-order-1                        326.6050+-13.5172         320.2240+-1.0709          might be 1.0199x faster
   arithmetic-simple-order-2                        382.6626+-7.8548     ?    386.5146+-9.7357        ? might be 1.0101x slower
   lz-string                                        306.4259+-4.4282     !    322.0076+-10.8946       ! definitely 1.0508x slower

   <geometric>                                      252.8649+-1.5979     ?    254.1626+-0.7291        ? might be 1.0051x slower

                                                        TipOfTree                  Adaptive                                     
Geomean of preferred means:
   <scaled-result>                                   51.9017+-0.1592     ?     51.9241+-0.2819        ? might be 1.0004x slower
Comment 39 Filip Pizlo 2015-07-30 16:07:30 PDT
Looks like this change breaks custom setter/getter caching.  Should be easy to fix that.  Basically, a "hit" on a custom setter/getter actually requires a structure check, rather than an object property condition.  I think we just want an ObjectPropertyCondition that says "ExactStructure".
Comment 40 Filip Pizlo 2015-07-30 21:15:14 PDT
Latest performance numbers, after I fixed two bugs:


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r187605)
"Adaptive" at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r187605)

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

                                                        TipOfTree                  Adaptive                                     
SunSpider:
   3d-cube                                            4.3405+-0.1375     ?      4.4174+-0.4288        ? might be 1.0177x slower
   3d-morph                                           4.9715+-0.1731            4.9014+-0.1104          might be 1.0143x faster
   3d-raytrace                                        4.9716+-0.2378     ?      5.2073+-0.3705        ? might be 1.0474x slower
   access-binary-trees                                1.8412+-0.0525            1.8230+-0.1082        
   access-fannkuch                                    4.9543+-0.2183     ?      5.0070+-0.5812        ? might be 1.0106x slower
   access-nbody                                       2.3710+-0.0262     ?      2.3963+-0.0465        ? might be 1.0107x slower
   access-nsieve                                      2.8097+-0.0490     ?      2.9589+-0.4061        ? might be 1.0531x slower
   bitops-3bit-bits-in-byte                           1.4623+-0.1787            1.4102+-0.0431          might be 1.0370x faster
   bitops-bits-in-byte                                2.4177+-0.0791            2.3698+-0.0113          might be 1.0202x faster
   bitops-bitwise-and                                 2.2598+-0.5476            2.0284+-0.0365          might be 1.1141x faster
   bitops-nsieve-bits                                 2.7734+-0.2867            2.6802+-0.0958          might be 1.0348x faster
   controlflow-recursive                              1.8731+-0.1214            1.8047+-0.0209          might be 1.0379x faster
   crypto-aes                                         3.7638+-0.2152     ?      3.7698+-0.2866        ?
   crypto-md5                                         2.2712+-0.1132     ?      2.3574+-0.2109        ? might be 1.0379x slower
   crypto-sha1                                        2.1826+-0.2561            2.0297+-0.0241          might be 1.0754x faster
   date-format-tofte                                  6.2957+-0.3489     ?      6.3365+-0.2365        ?
   date-format-xparb                                  4.4730+-0.1230     ?      4.5116+-0.1620        ?
   math-cordic                                        2.7402+-0.1527            2.6666+-0.0929          might be 1.0276x faster
   math-partial-sums                                  5.0223+-0.1902            4.9394+-0.4522          might be 1.0168x faster
   math-spectral-norm                                 1.8878+-0.1876            1.6940+-0.0898          might be 1.1144x faster
   regexp-dna                                         6.0138+-0.1311     ?      6.2524+-0.2085        ? might be 1.0397x slower
   string-base64                                      4.6428+-0.8664            4.3226+-0.4220          might be 1.0741x faster
   string-fasta                                       5.5003+-0.0725            5.4376+-0.0602          might be 1.0115x faster
   string-tagcloud                                    9.3554+-2.8984            7.9436+-0.1146          might be 1.1777x faster
   string-unpack-code                                19.3846+-1.1821           18.4934+-0.4768          might be 1.0482x faster
   string-validate-input                              4.3625+-0.2767     ?      4.3854+-0.0500        ?

   <arithmetic>                                       4.4208+-0.1372            4.3132+-0.0344          might be 1.0249x faster

                                                        TipOfTree                  Adaptive                                     
LongSpider:
   3d-cube                                         1212.8121+-9.3397     ?   1213.3240+-6.7136        ?
   3d-morph                                        1496.3914+-2.9627     ?   1498.4756+-4.6954        ?
   3d-raytrace                                      622.5411+-8.4617          616.7606+-4.2106        
   access-binary-trees                              831.9980+-10.1137         830.8778+-6.7741        
   access-fannkuch                                  345.0103+-1.4532     ?    346.7039+-4.1750        ?
   access-nbody                                     672.7270+-2.1606     ?    674.3242+-3.2482        ?
   access-nsieve                                    580.3634+-9.6416     ?    587.7087+-12.8002       ? might be 1.0127x slower
   bitops-3bit-bits-in-byte                          84.0201+-1.1909     ?     84.4380+-2.4105        ?
   bitops-bits-in-byte                              145.0054+-2.0741          143.2141+-2.0737          might be 1.0125x faster
   bitops-nsieve-bits                               586.4235+-5.5586     ?    587.2652+-4.9645        ?
   controlflow-recursive                            400.7846+-1.3390          399.9923+-1.6578        
   crypto-aes                                       891.9073+-11.2728         885.7059+-4.2790        
   crypto-md5                                       529.1204+-1.7504     ?    530.9856+-0.8928        ?
   crypto-sha1                                      857.9565+-0.9171     ?    859.5070+-2.4165        ?
   date-format-tofte                                551.9672+-17.3763         539.3242+-5.5055          might be 1.0234x faster
   date-format-xparb                                641.7507+-28.9352         628.0892+-5.1942          might be 1.0218x faster
   hash-map                                         150.7532+-1.8200          149.9746+-0.6995        
   math-cordic                                      883.7861+-0.8105     ?    885.5474+-2.6253        ?
   math-partial-sums                                518.5377+-0.4819          518.4358+-0.8699        
   math-spectral-norm                               848.8582+-2.5595          847.0210+-1.2259        
   string-base64                                    336.9316+-3.8896          336.3076+-3.7293        
   string-fasta                                     410.3844+-5.2796          407.5646+-2.3949        
   string-tagcloud                                  176.5044+-3.5794          175.8569+-1.4238        

   <geometric>                                      489.8248+-1.9442          488.5416+-1.5532          might be 1.0026x faster

                                                        TipOfTree                  Adaptive                                     
V8Spider:
   crypto                                            41.3140+-0.4485     ?     42.3547+-0.8861        ? might be 1.0252x slower
   deltablue                                         59.3652+-1.3695     ?     61.5750+-1.6551        ? might be 1.0372x slower
   earley-boyer                                      37.5650+-1.4831     ?     37.6976+-1.3282        ?
   raytrace                                          20.2805+-0.7371     ?     20.8130+-0.9335        ? might be 1.0263x slower
   regexp                                            61.8472+-1.5250     ?     62.5482+-2.2520        ? might be 1.0113x slower
   richards                                          62.5890+-1.6368     ?     63.3208+-1.6085        ? might be 1.0117x slower
   splay                                             32.8887+-1.5602     ?     34.0994+-2.0680        ? might be 1.0368x slower

   <geometric>                                       42.1738+-0.3934     ?     43.0817+-0.6077        ? might be 1.0215x slower

                                                        TipOfTree                  Adaptive                                     
Octane:
   encrypt                                           0.23634+-0.00383          0.23608+-0.00352       
   decrypt                                           4.25456+-0.04384    ?     4.27078+-0.03430       ?
   deltablue                                x2       0.30511+-0.00322    ?     0.31014+-0.00725       ? might be 1.0165x slower
   earley                                            0.44003+-0.00351    ?     0.44151+-0.00612       ?
   boyer                                             5.27338+-0.01730    ?     5.40587+-0.19298       ? might be 1.0251x slower
   navier-stokes                            x2       6.35530+-0.11125          6.32848+-0.04141       
   raytrace                                 x2       1.85265+-0.05254    ?     1.87590+-0.04703       ? might be 1.0125x slower
   richards                                 x2       0.15851+-0.00133          0.15801+-0.00157       
   splay                                    x2       0.42254+-0.02149          0.40861+-0.02511         might be 1.0341x faster
   regexp                                   x2      25.57722+-0.49352    ^    24.64607+-0.37154       ^ definitely 1.0378x faster
   pdfjs                                    x2      37.93991+-0.19501         37.71138+-0.16264       
   mandreel                                 x2      79.47343+-0.42105    ?    80.11611+-1.02901       ?
   gbemu                                    x2      40.84271+-0.78898         40.53306+-0.38914       
   closure                                           0.55270+-0.00249    ?     0.55512+-0.00264       ?
   jquery                                            7.02711+-0.03806    ?     7.11471+-0.07767       ? might be 1.0125x slower
   box2d                                    x2      10.63699+-0.06486         10.59029+-0.04781       
   zlib                                     x2     493.39379+-14.96340   ?   510.51389+-8.41890       ? might be 1.0347x slower
   typescript                               x2     618.42306+-6.47855    ?   628.53499+-26.54682      ? might be 1.0164x slower

   <geometric>                                       7.20957+-0.05139    ?     7.21626+-0.04343       ? might be 1.0009x slower

                                                        TipOfTree                  Adaptive                                     
Kraken:
   ai-astar                                          274.780+-7.783            270.963+-6.730           might be 1.0141x faster
   audio-beat-detection                               91.525+-0.408      ?      91.708+-0.583         ?
   audio-dft                                         136.659+-2.606      ?     139.313+-4.013         ? might be 1.0194x slower
   audio-fft                                          62.165+-0.497             61.985+-0.375         
   audio-oscillator                                   70.353+-0.940      ?      70.539+-0.848         ?
   imaging-darkroom                                  121.820+-0.101      ?     123.824+-3.144         ? might be 1.0165x slower
   imaging-desaturate                                 91.702+-17.831            86.021+-3.153           might be 1.0660x faster
   imaging-gaussian-blur                             151.419+-1.679            150.812+-0.193         
   json-parse-financial                               37.268+-0.792      ?      38.195+-1.356         ? might be 1.0249x slower
   json-stringify-tinderbox                           21.863+-0.651      ?      22.122+-0.404         ? might be 1.0119x slower
   stanford-crypto-aes                                47.833+-1.601      ?      48.052+-0.902         ?
   stanford-crypto-ccm                                38.573+-3.010      ?      39.332+-2.978         ? might be 1.0197x slower
   stanford-crypto-pbkdf2                             98.924+-0.352      ?      98.978+-0.102         ?
   stanford-crypto-sha256-iterative                   39.577+-1.633             39.365+-0.923         

   <arithmetic>                                       91.747+-1.759             91.515+-0.537           might be 1.0025x faster

                                                        TipOfTree                  Adaptive                                     
JSRegress:
   abc-forward-loop-equal                            99.7306+-0.8030     ?     99.7383+-0.6684        ?
   abc-postfix-backward-loop                        103.7129+-0.7672          103.6982+-0.8487        
   abc-simple-backward-loop                         104.2098+-1.2946          103.7880+-0.6539        
   abc-simple-forward-loop                           96.7075+-0.9720           96.4468+-0.8519        
   abc-skippy-loop                                   50.5761+-0.7398     ?     50.5812+-0.7199        ?
   abs-boolean                                        2.3223+-0.0537     ?      2.3509+-0.2310        ? might be 1.0123x slower
   adapt-to-double-divide                            17.6049+-0.8285           17.3427+-0.5200          might be 1.0151x faster
   aliased-arguments-getbyval                         1.1599+-0.1951            1.1213+-0.1454          might be 1.0345x faster
   allocate-big-object                                2.2122+-0.1605     ?      2.3861+-0.1993        ? might be 1.0786x slower
   arguments-named-and-reflective                    27.1852+-0.6777           26.5341+-0.6668          might be 1.0245x faster
   arguments-out-of-bounds                           17.3575+-0.7414     ?     17.3663+-0.3389        ?
   arguments-strict-mode                             88.1617+-0.3648     !     90.9339+-1.8161        ! definitely 1.0314x slower
   arguments                                         24.8859+-1.6158           24.5900+-0.8418          might be 1.0120x faster
   arity-mismatch-inlining                            0.7667+-0.0463     ?      0.7832+-0.0528        ? might be 1.0216x slower
   array-access-polymorphic-structure                 6.0035+-0.2429     ?      6.0608+-0.4119        ?
   array-nonarray-polymorhpic-access                 24.5839+-0.2296           24.1494+-1.0836          might be 1.0180x faster
   array-prototype-every                             74.4476+-1.6440           73.7026+-1.8773          might be 1.0101x faster
   array-prototype-forEach                           72.6152+-1.1854     ?     73.1842+-2.6165        ?
   array-prototype-map                               81.0299+-1.7173           79.4760+-1.2707          might be 1.0196x faster
   array-prototype-reduce                            71.3740+-3.5399     ?     71.7377+-1.5387        ?
   array-prototype-reduceRight                       71.1108+-5.5331           68.5503+-0.9855          might be 1.0374x faster
   array-prototype-some                              75.5457+-2.5098           73.9687+-1.7826          might be 1.0213x faster
   array-splice-contiguous                           21.1529+-0.6096     ?     21.2787+-0.9916        ?
   array-with-double-add                              3.1166+-0.1984            2.9935+-0.0369          might be 1.0411x faster
   array-with-double-increment                        2.5196+-0.0640            2.5103+-0.0606        
   array-with-double-mul-add                          3.7470+-0.1671            3.6510+-0.0386          might be 1.0263x faster
   array-with-double-sum                              3.0482+-0.1197     ?      3.0496+-0.1382        ?
   array-with-int32-add-sub                           5.1873+-0.1592            5.0818+-0.0890          might be 1.0208x faster
   array-with-int32-or-double-sum                     3.1152+-0.1285            3.0908+-0.0755        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     29.2042+-0.9707           28.8742+-0.5435          might be 1.0114x faster
   ArrayBuffer-DataView-alloc-long-lived             12.7500+-0.3921           12.1316+-0.3625          might be 1.0510x faster
   ArrayBuffer-Int32Array-byteOffset                  3.6550+-0.3987            3.6240+-0.1871        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     30.6010+-0.3101     ?     31.8711+-1.1018        ? might be 1.0415x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.9788+-0.4883           19.8688+-0.4709        
   ArrayBuffer-Int8Array-alloc-long-lived            12.7780+-1.3379           12.3108+-0.5912          might be 1.0380x faster
   ArrayBuffer-Int8Array-alloc                        9.6894+-0.8633            9.5688+-0.5643          might be 1.0126x faster
   asmjs_bool_bug                                     7.0829+-0.1241     ?      7.2448+-0.1284        ? might be 1.0229x slower
   assign-custom-setter-polymorphic                   2.9312+-0.3831            2.4920+-0.1044          might be 1.1762x faster
   assign-custom-setter                               3.4733+-0.2068            3.2599+-0.0374          might be 1.0655x faster
   basic-set                                          6.9174+-0.0643            6.8970+-0.1545        
   big-int-mul                                        3.1725+-0.1177            3.1506+-0.0608        
   boolean-test                                       2.7893+-0.1085            2.7060+-0.0478          might be 1.0308x faster
   branch-fold                                        3.5696+-0.1481     ?      3.5819+-0.1787        ?
   branch-on-string-as-boolean                       33.1986+-0.4666     ?     33.7911+-2.0759        ? might be 1.0178x slower
   by-val-generic                                     7.0302+-0.0929     ?      7.0542+-0.1873        ?
   call-spread-apply                                 25.4904+-1.4125     ?     26.0495+-1.7348        ? might be 1.0219x slower
   call-spread-call                                  21.9901+-0.9124     ?     22.0092+-1.1284        ?
   captured-assignments                               0.3959+-0.0109     ?      0.4146+-0.0413        ? might be 1.0473x slower
   cast-int-to-double                                 4.7035+-0.0288     ?      4.7622+-0.1279        ? might be 1.0125x slower
   cell-argument                                     10.2004+-0.3806     ?     10.3606+-0.3636        ? might be 1.0157x slower
   cfg-simplify                                       2.6146+-0.0483     ?      2.6633+-0.0631        ? might be 1.0186x slower
   chain-getter-access                               11.3464+-0.2796     ?     11.6167+-0.4887        ? might be 1.0238x slower
   cmpeq-obj-to-obj-other                             7.4469+-0.2305     ?      7.5095+-0.1861        ?
   constant-test                                      4.7230+-0.3326            4.5959+-0.1710          might be 1.0276x faster
   create-lots-of-functions                           9.0721+-0.1862            8.9105+-0.3282          might be 1.0181x faster
   cse-new-array-buffer                               2.1112+-0.0647            2.0940+-0.1953        
   cse-new-array                                      2.1034+-0.1557     ?      2.2185+-0.1403        ? might be 1.0547x slower
   DataView-custom-properties                        35.1279+-0.4562           34.9171+-0.3656        
   delay-tear-off-arguments-strictmode               13.3616+-1.9274     ?     13.5189+-1.6929        ? might be 1.0118x slower
   deltablue-varargs                                156.8207+-7.5489          153.7687+-0.6881          might be 1.0198x faster
   destructuring-arguments                          168.8816+-1.7629     ?    169.2161+-0.6480        ?
   destructuring-parameters-overridden-by-function   
                                                      0.5030+-0.0470     ?      0.5036+-0.0577        ?
   destructuring-swap                                 4.4130+-0.1015     ?      4.4334+-0.0364        ?
   direct-arguments-getbyval                          1.2420+-0.5078            1.0230+-0.0865          might be 1.2141x faster
   div-boolean-double                                 5.0258+-0.5316            5.0228+-0.2047        
   div-boolean                                        7.8776+-0.1286            7.7378+-0.2281          might be 1.0181x faster
   double-get-by-val-out-of-bounds                    3.9550+-0.0843            3.9130+-0.1265          might be 1.0107x faster
   double-pollution-getbyval                          8.0963+-0.1983     ?      8.1951+-0.5124        ? might be 1.0122x slower
   double-pollution-putbyoffset                       3.7327+-0.4210            3.5760+-0.0634          might be 1.0438x faster
   double-real-use                                   33.0268+-3.1830           32.1383+-2.0046          might be 1.0276x faster
   double-to-int32-typed-array-no-inline              1.8458+-0.1242            1.7979+-0.0551          might be 1.0267x faster
   double-to-int32-typed-array                        1.7582+-0.3110            1.6048+-0.0563          might be 1.0956x faster
   double-to-uint32-typed-array-no-inline             1.8334+-0.0095     ?      1.8551+-0.0620        ? might be 1.0118x slower
   double-to-uint32-typed-array                       1.6995+-0.0631     ?      1.7175+-0.0418        ? might be 1.0106x slower
   elidable-new-object-dag                          209.1774+-1.0493     ?    209.5011+-0.6542        ?
   elidable-new-object-roflcopter                    97.1274+-0.7615     ?     97.3868+-1.3210        ?
   elidable-new-object-then-call                    110.3305+-0.8859     ?    110.8952+-0.6410        ?
   elidable-new-object-tree                         208.7938+-1.0991     ?    209.8851+-2.0359        ?
   empty-string-plus-int                              4.6119+-0.0852            4.5437+-0.0806          might be 1.0150x faster
   emscripten-cube2hash                              24.6801+-1.2931           24.0528+-0.7305          might be 1.0261x faster
   exit-length-on-plain-object                       13.1140+-1.1558           12.9058+-0.6707          might be 1.0161x faster
   external-arguments-getbyval                        1.1593+-0.1371            1.1429+-0.0634          might be 1.0144x faster
   external-arguments-putbyval                        2.0922+-0.0924            2.0358+-0.0457          might be 1.0277x faster
   fixed-typed-array-storage-var-index                1.1098+-0.0363            1.0913+-0.0505          might be 1.0169x faster
   fixed-typed-array-storage                          0.8137+-0.0210     ?      0.8312+-0.0535        ? might be 1.0215x slower
   Float32Array-matrix-mult                           3.8114+-0.0430     ?      3.8346+-0.0393        ?
   Float32Array-to-Float64Array-set                  46.2705+-1.0486     !     48.5458+-0.8211        ! definitely 1.0492x slower
   Float64Array-alloc-long-lived                     76.1982+-2.2498     ?     76.2630+-1.3128        ?
   Float64Array-to-Int16Array-set                    57.8716+-2.2513           55.8160+-0.8923          might be 1.0368x faster
   fold-double-to-int                                13.8660+-1.2231     ?     14.1093+-0.7351        ? might be 1.0176x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                      6.4113+-0.1092     ?      6.4745+-0.2725        ?
   fold-get-by-id-to-multi-get-by-offset              5.3716+-0.0862     ?      5.4353+-0.2417        ? might be 1.0119x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      5.1993+-0.1661            5.1490+-0.1484        
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      5.0465+-0.0297            5.0325+-0.0609        
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      4.7739+-0.2893     ?      5.0501+-0.3037        ? might be 1.0579x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      3.5633+-0.1174     ?      3.6862+-0.3769        ? might be 1.0345x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      7.9737+-0.7375            7.7085+-0.1857          might be 1.0344x faster
   fold-put-by-id-to-multi-put-by-offset              5.7559+-0.3748            5.6482+-0.3232          might be 1.0191x faster
   fold-put-structure                                 3.3575+-0.0638     ?      3.4097+-0.0851        ? might be 1.0155x slower
   for-of-iterate-array-entries                      11.0412+-0.3976           10.7847+-0.3180          might be 1.0238x faster
   for-of-iterate-array-keys                          3.1090+-0.3920            3.0296+-0.1616          might be 1.0262x faster
   for-of-iterate-array-values                        2.9574+-0.0632     ?      3.0994+-0.4050        ? might be 1.0480x slower
   fround                                            27.5412+-0.8617           26.8476+-0.8991          might be 1.0258x faster
   ftl-library-inlining-dataview                     56.7054+-0.9360           56.4664+-0.7759        
   ftl-library-inlining                             107.7832+-1.0131          101.5253+-6.8516          might be 1.0616x faster
   function-dot-apply                                 1.8791+-0.0483            1.8709+-0.0602        
   function-test                                      2.5116+-0.0865     ?      2.5880+-0.0652        ? might be 1.0304x slower
   function-with-eval                                86.2063+-1.2692     ?     88.4937+-1.5743        ? might be 1.0265x slower
   gcse-poly-get-less-obvious                        13.4067+-0.7086           13.2747+-0.2944        
   gcse-poly-get                                     13.3514+-0.2682     ?     13.6718+-0.7756        ? might be 1.0240x slower
   gcse                                               3.4843+-0.0266            3.4807+-0.0284        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.3852+-0.0493     ?      2.6005+-0.3304        ? might be 1.0903x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.8270+-0.3409            5.6541+-0.1198          might be 1.0306x faster
   get-by-id-chain-from-try-block                     5.5727+-0.1839            5.3726+-0.0328          might be 1.0372x faster
   get-by-id-check-structure-elimination              3.9046+-0.0353            3.8024+-0.1019          might be 1.0269x faster
   get-by-id-proto-or-self                           12.5350+-0.4029     ?     12.5525+-0.9697        ?
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.7154+-0.0492            2.6802+-0.0592          might be 1.0131x faster
   get-by-id-self-or-proto                           13.1263+-0.9241     ?     13.3116+-1.8068        ? might be 1.0141x slower
   get-by-val-out-of-bounds                           3.8281+-0.0703            3.8067+-0.0948        
   get_callee_monomorphic                             2.1851+-0.1819            2.0904+-0.2318          might be 1.0453x faster
   get_callee_polymorphic                             3.2652+-0.0678            3.1205+-0.1697          might be 1.0464x faster
   getter-no-activation                               3.9896+-0.1101            3.9574+-0.1477        
   getter-prototype                                  20.3695+-0.7271           20.2153+-0.8254        
   getter-richards                                   86.7419+-1.4241     ^     72.5133+-0.8649        ^ definitely 1.1962x faster
   getter                                             4.5108+-0.1394            4.4481+-0.1704          might be 1.0141x faster
   global-var-const-infer-fire-from-opt               0.8531+-0.1281            0.8222+-0.1762          might be 1.0375x faster
   global-var-const-infer                             0.7178+-0.0348     ?      0.7390+-0.0453        ? might be 1.0295x slower
   HashMap-put-get-iterate-keys                      21.6976+-0.8835           21.6267+-0.9976        
   HashMap-put-get-iterate                           20.6789+-0.4637     ?     20.8563+-0.7159        ?
   HashMap-string-put-get-iterate                    22.8465+-0.7820     ?     22.9178+-1.2367        ?
   hoist-make-rope                                   40.1345+-0.7536           40.0602+-0.7432        
   hoist-poly-check-structure-effectful-loop   
                                                      3.8219+-0.2885            3.7315+-0.0645          might be 1.0242x faster
   hoist-poly-check-structure                         2.8035+-0.0441     ?      2.8120+-0.0421        ?
   imul-double-only                                   8.7875+-0.1410     !      9.6396+-0.2820        ! definitely 1.0970x slower
   imul-int-only                                      9.0890+-0.3948            9.0693+-0.3692        
   imul-mixed                                        11.1552+-0.3497     ?     11.3132+-0.1485        ? might be 1.0142x slower
   in-four-cases                                     13.3040+-0.1261     ?     13.3894+-0.2485        ?
   in-one-case-false                                  7.3535+-0.0674     ?      7.5468+-0.5360        ? might be 1.0263x slower
   in-one-case-true                                   7.9445+-0.7562            7.4647+-0.3328          might be 1.0643x faster
   in-two-cases                                       7.8799+-0.3147            7.8236+-0.3648        
   indexed-properties-in-objects                      2.5678+-0.0584     ?      2.6033+-0.1060        ? might be 1.0138x slower
   infer-closure-const-then-mov-no-inline             2.4642+-0.0648     ?      2.4776+-0.0921        ?
   infer-closure-const-then-mov                      17.1192+-0.4309     ?     17.1651+-0.3336        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.5882+-0.3827           10.5207+-0.3714        
   infer-closure-const-then-put-to-scope             20.6727+-0.5482     ?     20.8421+-0.4678        ?
   infer-closure-const-then-reenter-no-inline   
                                                     49.6717+-1.0418           49.5778+-0.7843        
   infer-closure-const-then-reenter                  21.7500+-0.7848           21.4784+-0.5878          might be 1.0126x faster
   infer-constant-global-property                     3.3687+-0.2963     ?      3.3988+-0.4030        ?
   infer-constant-property                            2.2252+-0.1244            2.2176+-0.0832        
   infer-one-time-closure-ten-vars                   17.0707+-0.0634     ?     17.3020+-0.3314        ? might be 1.0136x slower
   infer-one-time-closure-two-vars                   17.0333+-0.2592     ?     17.3961+-0.9603        ? might be 1.0213x slower
   infer-one-time-closure                            17.5594+-0.5138     ?     18.2177+-1.3194        ? might be 1.0375x slower
   infer-one-time-deep-closure                       35.5244+-0.5936     ?     35.6965+-3.3424        ?
   inline-arguments-access                            3.7843+-0.6967     ?      3.8443+-0.3193        ? might be 1.0158x slower
   inline-arguments-aliased-access                    3.8191+-0.4790            3.7847+-0.1876        
   inline-arguments-local-escape                      3.6863+-0.1258     ?      3.7586+-0.1018        ? might be 1.0196x slower
   inline-get-scoped-var                              3.7845+-0.0708     ?      3.9287+-0.2447        ? might be 1.0381x slower
   inlined-put-by-id-transition                      10.1510+-0.2723     ?     10.5146+-0.5011        ? might be 1.0358x slower
   int-or-other-abs-then-get-by-val                   4.4528+-0.0886     ?      4.9704+-0.6805        ? might be 1.1162x slower
   int-or-other-abs-zero-then-get-by-val             16.3686+-2.1059           16.3387+-0.7415        
   int-or-other-add-then-get-by-val                   3.7640+-0.0193     ?      3.7965+-0.0824        ?
   int-or-other-add                                   4.5559+-0.0452     ?      4.6305+-0.1048        ? might be 1.0164x slower
   int-or-other-div-then-get-by-val                   3.6270+-0.1179            3.6171+-0.1781        
   int-or-other-max-then-get-by-val                   3.8460+-0.0448     ?      4.0586+-0.5324        ? might be 1.0553x slower
   int-or-other-min-then-get-by-val                   4.2425+-0.4345            4.2321+-0.2097        
   int-or-other-mod-then-get-by-val                   3.3685+-0.0922     ?      3.3693+-0.0968        ?
   int-or-other-mul-then-get-by-val                   3.4484+-0.0518     ?      3.4599+-0.0839        ?
   int-or-other-neg-then-get-by-val                   4.3010+-0.2523            4.2037+-0.0804          might be 1.0232x faster
   int-or-other-neg-zero-then-get-by-val             16.3313+-1.3332           15.7497+-0.4977          might be 1.0369x faster
   int-or-other-sub-then-get-by-val                   3.8669+-0.0908     ?      3.9324+-0.3667        ? might be 1.0169x slower
   int-or-other-sub                                   3.2053+-0.0335     ?      3.2435+-0.0647        ? might be 1.0119x slower
   int-overflow-local                                 4.0275+-0.1110     ?      4.2179+-0.4066        ? might be 1.0473x slower
   Int16Array-alloc-long-lived                       48.6661+-2.0557     ?     48.7664+-1.6658        ?
   Int16Array-bubble-sort-with-byteLength            16.7570+-1.0284           16.7527+-0.5168        
   Int16Array-bubble-sort                            16.1519+-0.4475     ?     16.3800+-0.3904        ? might be 1.0141x slower
   Int16Array-load-int-mul                            1.3368+-0.0538            1.3265+-0.1078        
   Int16Array-to-Int32Array-set                      43.2535+-1.5132     ?     44.4189+-0.8598        ? might be 1.0269x slower
   Int32Array-alloc-large                            12.8055+-0.8881           11.8575+-0.3547          might be 1.0799x faster
   Int32Array-alloc-long-lived                       58.0938+-1.5560     ?     59.7528+-0.5617        ? might be 1.0286x slower
   Int32Array-alloc                                   2.8979+-0.2817     ?      3.0966+-0.1154        ? might be 1.0686x slower
   Int32Array-Int8Array-view-alloc                    6.0151+-0.3191            5.9817+-0.3221        
   int52-spill                                        4.3510+-0.0837     ?      4.4869+-0.2476        ? might be 1.0312x slower
   Int8Array-alloc-long-lived                        42.4501+-0.5834     ?     43.4964+-1.2481        ? might be 1.0246x slower
   Int8Array-load-with-byteLength                     3.2351+-0.0828     ?      3.2421+-0.0843        ?
   Int8Array-load                                     3.2175+-0.0399     ?      3.3103+-0.0742        ? might be 1.0288x slower
   integer-divide                                     9.9785+-0.1711     ?     10.1988+-0.5698        ? might be 1.0221x slower
   integer-modulo                                     1.4656+-0.0623     ?      1.5032+-0.1019        ? might be 1.0257x slower
   is-boolean-fold-tricky                             3.1632+-0.1282            3.1215+-0.1263          might be 1.0133x faster
   is-boolean-fold                                    2.6504+-0.0194     ?      2.6610+-0.0821        ?
   is-function-fold-tricky-internal-function   
                                                      9.2040+-0.1681     ?      9.4558+-0.3076        ? might be 1.0274x slower
   is-function-fold-tricky                            3.3378+-0.0313     ?      3.5618+-0.4398        ? might be 1.0671x slower
   is-function-fold                                   2.6579+-0.0902     ?      2.6980+-0.1099        ? might be 1.0151x slower
   is-number-fold-tricky                              3.5181+-0.1444     ^      3.3092+-0.0459        ^ definitely 1.0631x faster
   is-number-fold                                     2.6937+-0.1320            2.6877+-0.0454        
   is-object-or-null-fold-functions                   2.8019+-0.3339            2.6978+-0.1149          might be 1.0386x faster
   is-object-or-null-fold-less-tricky                 3.4099+-0.1285            3.3941+-0.1502        
   is-object-or-null-fold-tricky                      4.5406+-0.2604            4.4068+-0.1768          might be 1.0304x faster
   is-object-or-null-fold                             2.6749+-0.0976     ?      2.7555+-0.1716        ? might be 1.0301x slower
   is-object-or-null-trickier-function                3.4389+-0.0758     ?      3.4623+-0.1382        ?
   is-object-or-null-trickier-internal-function   
                                                      9.4215+-0.1748     ?      9.7417+-0.4049        ? might be 1.0340x slower
   is-object-or-null-tricky-function                  3.4255+-0.0998     ?      3.4717+-0.1990        ? might be 1.0135x slower
   is-object-or-null-tricky-internal-function   
                                                      6.9891+-0.2929     ?      7.2497+-0.5707        ? might be 1.0373x slower
   is-string-fold-tricky                              3.3159+-0.1179     ?      3.3473+-0.0905        ?
   is-string-fold                                     2.6338+-0.1561     ?      2.7241+-0.2708        ? might be 1.0343x slower
   is-undefined-fold-tricky                           2.8237+-0.1170            2.7749+-0.0850          might be 1.0176x faster
   is-undefined-fold                                  2.6324+-0.0686     ?      2.7529+-0.3900        ? might be 1.0458x slower
   large-int-captured                                 3.7042+-0.3020            3.6562+-0.2551          might be 1.0131x faster
   large-int-neg                                     14.2061+-0.3046           14.1581+-0.2880        
   large-int                                         13.3129+-0.6209     ?     13.4707+-0.6382        ? might be 1.0119x slower
   load-varargs-elimination                          47.9227+-2.7193     ?     49.0135+-1.7750        ? might be 1.0228x slower
   logical-not-weird-types                            2.6812+-0.1830            2.6628+-0.0845        
   logical-not                                        4.0303+-0.5587     ?      4.0715+-0.5176        ? might be 1.0102x slower
   lots-of-fields                                     9.9257+-1.3355            9.1014+-0.3350          might be 1.0906x faster
   make-indexed-storage                               2.6544+-0.0395     ?      2.7302+-0.2903        ? might be 1.0285x slower
   make-rope-cse                                      3.6813+-0.3397     ?      3.6871+-0.3160        ?
   marsaglia-larger-ints                             69.9743+-0.8309           69.2394+-1.1649          might be 1.0106x faster
   marsaglia-osr-entry                               28.9804+-0.4898           28.5734+-0.3045          might be 1.0142x faster
   math-with-out-of-bounds-array-values              21.9584+-1.7157     ?     21.9633+-0.8162        ?
   max-boolean                                        2.1907+-0.0858     ?      2.3344+-0.3182        ? might be 1.0656x slower
   method-on-number                                  15.1962+-0.6990     ?     15.6505+-0.8418        ? might be 1.0299x slower
   min-boolean                                        2.2487+-0.1535     ?      2.3108+-0.2645        ? might be 1.0276x slower
   minus-boolean-double                               2.9926+-0.1774     ?      3.1161+-0.4595        ? might be 1.0413x slower
   minus-boolean                                      2.2248+-0.1199            2.1397+-0.1111          might be 1.0398x faster
   misc-strict-eq                                    36.0246+-0.4779     ?     37.0701+-1.9246        ? might be 1.0290x slower
   mod-boolean-double                                10.5075+-0.3468     ?     10.6806+-0.1642        ? might be 1.0165x slower
   mod-boolean                                        7.9781+-0.6694     ?      8.1728+-0.5064        ? might be 1.0244x slower
   mul-boolean-double                                 3.5446+-0.2426            3.4863+-0.1119          might be 1.0167x faster
   mul-boolean                                        2.7362+-0.2498            2.7192+-0.1496        
   neg-boolean                                        2.9285+-0.0681            2.8996+-0.0398        
   negative-zero-divide                               0.3297+-0.0259            0.3235+-0.0080          might be 1.0192x faster
   negative-zero-modulo                               0.3170+-0.0143     ?      0.3193+-0.0103        ?
   negative-zero-negate                               0.3191+-0.0490            0.2983+-0.0231          might be 1.0698x faster
   nested-function-parsing                           44.8020+-1.1916           43.7590+-1.2472          might be 1.0238x faster
   new-array-buffer-dead                             92.8015+-0.6518     ?     92.9358+-1.2804        ?
   new-array-buffer-push                              6.1507+-0.4658     ?      6.3782+-0.4581        ? might be 1.0370x slower
   new-array-dead                                    96.6737+-0.3442     ?     96.8649+-0.5511        ?
   new-array-push                                     6.1962+-0.4927     ?      6.3299+-0.2314        ? might be 1.0216x slower
   no-inline-constructor                             82.6478+-0.9366     ?     83.2417+-1.4254        ?
   number-test                                        2.7916+-0.2600            2.7103+-0.1155          might be 1.0300x faster
   object-closure-call                                4.5350+-0.0501     ?      4.6789+-0.2932        ? might be 1.0317x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.1220+-0.3078     ?      4.3387+-0.2052        ? might be 1.0526x slower
   object-test                                        2.4308+-0.0227     ?      2.4645+-0.0671        ? might be 1.0139x slower
   obvious-sink-pathology-taken                     125.8352+-0.7630     ?    137.0503+-27.6256       ? might be 1.0891x slower
   obvious-sink-pathology                           109.6307+-0.7650     ?    113.6355+-8.5455        ? might be 1.0365x slower
   obviously-elidable-new-object                    105.7632+-1.2984          105.0171+-0.6213        
   plus-boolean-arith                                 2.2165+-0.1153            2.1447+-0.1113          might be 1.0335x faster
   plus-boolean-double                                2.9473+-0.0515            2.9111+-0.0506          might be 1.0125x faster
   plus-boolean                                       2.1495+-0.0972     ?      2.2216+-0.1362        ? might be 1.0336x slower
   poly-chain-access-different-prototypes-simple   
                                                      2.3079+-0.1556     ?      2.5357+-0.0738        ? might be 1.0987x slower
   poly-chain-access-different-prototypes             2.4231+-0.1378     ?      2.5421+-0.0503        ? might be 1.0491x slower
   poly-chain-access-simpler                          2.2622+-0.0481     !      2.5522+-0.0474        ! definitely 1.1282x slower
   poly-chain-access                                  2.5029+-0.2125     ?      2.6156+-0.1068        ? might be 1.0450x slower
   poly-stricteq                                     49.6668+-0.5925     ?     50.4120+-1.6563        ? might be 1.0150x slower
   polymorphic-array-call                             1.1760+-0.0850     ?      1.2163+-0.1513        ? might be 1.0343x slower
   polymorphic-get-by-id                              2.8329+-0.2917            2.7417+-0.0976          might be 1.0333x faster
   polymorphic-put-by-id                             26.6209+-0.9823     ?     26.9917+-2.8188        ? might be 1.0139x slower
   polymorphic-structure                             12.9253+-0.4773           12.7559+-0.2905          might be 1.0133x faster
   polyvariant-monomorphic-get-by-id                  5.1167+-0.0831     ?      5.1592+-0.1285        ?
   proto-getter-access                               11.6356+-0.8575           11.3725+-0.1637          might be 1.0231x faster
   prototype-access-with-mutating-prototype         356.9255+-7.4976     ^      5.1820+-0.4876        ^ definitely 68.8784x faster
   put-by-id-replace-and-transition                   7.2360+-0.2671     ?      7.4335+-0.4441        ? might be 1.0273x slower
   put-by-id-slightly-polymorphic                     2.7153+-0.1194            2.6375+-0.0699          might be 1.0295x faster
   put-by-id                                          9.5641+-0.5806            9.3055+-0.4360          might be 1.0278x faster
   put-by-val-direct                                  0.3553+-0.1055            0.3153+-0.0086          might be 1.1270x faster
   put-by-val-large-index-blank-indexing-type   
                                                     12.1101+-0.5449     ?     12.3950+-1.2838        ? might be 1.0235x slower
   put-by-val-machine-int                             2.1932+-0.0806     ?      2.2212+-0.0955        ? might be 1.0128x slower
   rare-osr-exit-on-local                            13.1262+-0.5646     ?     13.1277+-0.3632        ?
   register-pressure-from-osr                        15.1930+-0.3329           15.1668+-0.6347        
   repeat-multi-get-by-offset                        21.1700+-0.7269           20.1706+-0.3552          might be 1.0495x faster
   setter-prototype                                  17.6530+-0.4557           17.3315+-0.3829          might be 1.0185x faster
   setter                                             4.7592+-0.3477            4.6274+-0.1935          might be 1.0285x faster
   simple-activation-demo                            23.5460+-0.8060     ?     25.7164+-5.7379        ? might be 1.0922x slower
   simple-getter-access                              17.9011+-0.4074     ?     18.5424+-0.6640        ? might be 1.0358x slower
   simple-poly-call-nested                            5.8394+-0.1160     ?      6.0624+-0.3380        ? might be 1.0382x slower
   simple-poly-call                                   1.0806+-0.0609     ?      1.1058+-0.0539        ? might be 1.0233x slower
   sin-boolean                                       28.7475+-0.4925     ?     29.9402+-3.7825        ? might be 1.0415x slower
   singleton-scope                                   54.2515+-0.8349     ?     55.4218+-2.2904        ? might be 1.0216x slower
   sink-function                                     14.6993+-0.6946     ?     14.7812+-0.4921        ?
   sink-huge-activation                              36.6010+-0.9767     ?     36.8706+-1.3778        ?
   sinkable-new-object-dag                          211.9999+-2.0439     ?    212.1885+-1.7499        ?
   sinkable-new-object-taken                        124.6370+-1.4034          124.0683+-0.5360        
   sinkable-new-object                              109.5222+-0.7396     ?    110.8204+-1.0415        ? might be 1.0119x slower
   slow-array-profile-convergence                     2.6105+-0.1996            2.5219+-0.0495          might be 1.0351x faster
   slow-convergence                                   2.4138+-0.2786            2.3056+-0.0472          might be 1.0469x faster
   slow-ternaries                                    30.2658+-0.4731           30.1412+-0.4025        
   sorting-benchmark                                 16.5682+-0.8765           16.2738+-0.7378          might be 1.0181x faster
   sparse-conditional                                 1.0993+-0.0516            1.0813+-0.0391          might be 1.0166x faster
   splice-to-remove                                  11.9867+-0.2782     ?     13.2209+-1.7076        ? might be 1.1030x slower
   string-char-code-at                               13.7805+-0.0418     ?     14.1652+-0.6953        ? might be 1.0279x slower
   string-concat-object                               2.3007+-0.1756            2.1915+-0.0998          might be 1.0498x faster
   string-concat-pair-object                          2.0253+-0.1267     ?      2.1393+-0.1441        ? might be 1.0563x slower
   string-concat-pair-simple                          9.2528+-0.4671            8.8160+-0.1175          might be 1.0496x faster
   string-concat-simple                               9.1462+-0.6424     ?      9.5130+-0.2633        ? might be 1.0401x slower
   string-cons-repeat                                 6.4023+-0.2482     ?      6.6958+-0.7371        ? might be 1.0458x slower
   string-cons-tower                                  6.4102+-0.0791     ?      6.8009+-0.6933        ? might be 1.0610x slower
   string-equality                                   14.7437+-0.3977           14.6506+-0.3691        
   string-get-by-val-big-char                         6.1937+-0.1135            6.0992+-0.1506          might be 1.0155x faster
   string-get-by-val-out-of-bounds-insane             3.1049+-0.0756     ?      3.3209+-0.2696        ? might be 1.0696x slower
   string-get-by-val-out-of-bounds                    3.7952+-0.9375            3.4028+-0.0267          might be 1.1153x faster
   string-get-by-val                                  2.5911+-0.1496            2.5590+-0.0829          might be 1.0126x faster
   string-hash                                        1.7406+-0.1205     ?      1.7410+-0.0839        ?
   string-long-ident-equality                        12.6304+-0.7010           12.2123+-0.2936          might be 1.0342x faster
   string-out-of-bounds                              17.2630+-0.5140           17.0765+-0.5017          might be 1.0109x faster
   string-repeat-arith                               26.3799+-0.6733     ?     26.9161+-0.4460        ? might be 1.0203x slower
   string-sub                                        53.8107+-1.7851           52.0907+-0.9369          might be 1.0330x faster
   string-test                                        2.7994+-0.3869            2.5788+-0.0721          might be 1.0855x faster
   string-var-equality                               25.6971+-0.3659           25.5155+-0.2749        
   structure-hoist-over-transitions                   2.4694+-0.5516            2.2416+-0.0933          might be 1.1016x faster
   substring-concat-weird                            35.7520+-1.6741     ?     36.1580+-1.0835        ? might be 1.0114x slower
   substring-concat                                  39.2165+-1.5832     ?     39.5662+-1.2145        ?
   substring                                         45.3551+-2.8482           45.1451+-1.1234        
   switch-char-constant                               2.3036+-0.2228            2.1825+-0.0477          might be 1.0555x faster
   switch-char                                        4.7552+-0.2468            4.7027+-0.1430          might be 1.0112x faster
   switch-constant                                    6.8533+-0.3366     ?      7.0160+-0.4220        ? might be 1.0237x slower
   switch-string-basic-big-var                       12.5696+-0.4172     ?     12.7087+-0.4224        ? might be 1.0111x slower
   switch-string-basic-big                           12.9447+-0.8430     ?     13.1544+-1.2532        ? might be 1.0162x slower
   switch-string-basic-var                           12.4618+-0.3006           12.3996+-0.4574        
   switch-string-basic                               12.1426+-0.7937           11.9205+-0.2787          might be 1.0186x faster
   switch-string-big-length-tower-var                18.5413+-1.2149     ?     18.8861+-1.2517        ? might be 1.0186x slower
   switch-string-length-tower-var                    12.9937+-0.7404           12.9550+-0.5489        
   switch-string-length-tower                        11.3564+-0.1774     ?     11.6091+-0.3387        ? might be 1.0223x slower
   switch-string-short                               11.4726+-0.4311           11.3023+-0.4035          might be 1.0151x faster
   switch                                            10.1627+-0.4441     ?     10.7825+-0.8837        ? might be 1.0610x slower
   tear-off-arguments-simple                          2.9274+-0.1565            2.8502+-0.1640          might be 1.0271x faster
   tear-off-arguments                                 3.8965+-0.1704     ?      3.9198+-0.4600        ?
   temporal-structure                                12.6459+-0.2838     ?     12.6751+-0.3651        ?
   to-int32-boolean                                  12.7039+-0.0815     ?     14.0315+-2.7201        ? might be 1.1045x slower
   try-catch-get-by-val-cloned-arguments             14.3306+-0.8927     ?     14.6135+-1.3817        ? might be 1.0197x slower
   try-catch-get-by-val-direct-arguments              6.6620+-0.6730            6.4211+-0.2406          might be 1.0375x faster
   try-catch-get-by-val-scoped-arguments              7.5050+-0.4363     ?      7.8643+-0.7650        ? might be 1.0479x slower
   typed-array-get-set-by-val-profiling              46.0825+-0.8925           45.7719+-0.5131        
   undefined-property-access                        394.3942+-7.3547          389.2532+-1.0704          might be 1.0132x faster
   undefined-test                                     2.7523+-0.1509            2.6624+-0.0758          might be 1.0337x faster
   unprofiled-licm                                   33.4836+-1.1180           33.0085+-0.2924          might be 1.0144x faster
   varargs-call                                      11.7970+-0.3454     ?     11.9053+-0.3110        ?
   varargs-construct-inline                          52.1591+-9.9052           48.6206+-1.5140          might be 1.0728x faster
   varargs-construct                                 20.2098+-0.9686           18.9304+-0.7578          might be 1.0676x faster
   varargs-inline                                     8.5925+-0.3300     ?      8.6802+-0.2772        ? might be 1.0102x slower
   varargs-strict-mode                                8.3530+-0.8871            8.0628+-0.1970          might be 1.0360x faster
   varargs                                            8.2650+-0.5339            8.2381+-0.2991        
   weird-inlining-const-prop                          1.8328+-0.0295     ?      1.9291+-0.0931        ? might be 1.0525x slower

   <geometric>                                        8.4239+-0.0266     ^      8.3260+-0.0195        ^ definitely 1.0117x faster

                                                        TipOfTree                  Adaptive                                     
AsmBench:
   bigfib.cpp                                       902.1175+-7.5630          900.7946+-3.8811        
   cray.c                                           484.0159+-1.7466     ?    484.4693+-0.8212        ?
   dry.c                                            861.0726+-4.8081     ?    863.7561+-11.6565       ?
   FloatMM.c                                       1408.3727+-7.6376         1406.6547+-4.3801        
   gcc-loops.cpp                                   8306.0623+-8.8850     ?   8310.3242+-14.3090       ?
   n-body.c                                        1299.9292+-2.8831     ?   1300.6829+-4.3360        ?
   Quicksort.c                                      714.2642+-2.2441     ?    715.9430+-1.8287        ?
   stepanov_container.cpp                          4673.4735+-11.6130    ?   4690.9571+-16.9341       ?
   Towers.c                                         375.6405+-2.5700          374.7922+-1.5921        

   <geometric>                                     1244.6530+-1.8513     ?   1245.5179+-1.5462        ? might be 1.0007x slower

                                                        TipOfTree                  Adaptive                                     
CompressionBench:
   huffman                                           59.1600+-1.2506           58.2310+-1.4503          might be 1.0160x faster
   arithmetic-simple                                433.7349+-1.9637     ?    433.8332+-0.5912        ?
   arithmetic-precise                               323.5143+-0.7452     ?    324.0337+-2.8154        ?
   arithmetic-complex-precise                       321.5895+-0.9835          320.8944+-0.6361        
   arithmetic-precise-order-0                       466.6235+-2.1515     ?    466.7831+-2.2326        ?
   arithmetic-precise-order-1                       360.2902+-7.0763          358.5236+-2.9588        
   arithmetic-precise-order-2                       385.7147+-3.8825     ?    389.1160+-5.3588        ?
   arithmetic-simple-order-1                        479.9261+-1.2106     ?    480.0532+-2.3004        ?
   arithmetic-simple-order-2                        532.2827+-0.4182     ?    532.3566+-0.9782        ?
   lz-string                                        308.8856+-4.3885     ?    311.4160+-9.1086        ?

   <geometric>                                      326.2328+-1.2997          326.1139+-1.2197          might be 1.0004x faster

                                                        TipOfTree                  Adaptive                                     
Geomean of preferred means:
   <scaled-result>                                   61.5703+-0.3371           61.4276+-0.1416          might be 1.0023x faster
Comment 41 Filip Pizlo 2015-07-30 23:03:03 PDT
Created attachment 257903 [details]
more improvements
Comment 42 Filip Pizlo 2015-07-31 00:41:58 PDT
Created attachment 257913 [details]
almost ready

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r187605)
"Adaptive" at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r187605)

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

                                                        TipOfTree                  Adaptive                                     
SunSpider:
   3d-cube                                            4.3808+-0.0541            4.3348+-0.1515          might be 1.0106x faster
   3d-morph                                           5.2231+-0.1460            5.1908+-0.1357        
   3d-raytrace                                        5.1523+-0.1026     ?      5.1960+-0.1363        ?
   access-binary-trees                                2.1122+-0.1311     ?      2.2259+-0.3614        ? might be 1.0538x slower
   access-fannkuch                                    5.5609+-0.2634            5.5455+-0.3071        
   access-nbody                                       2.4947+-0.1149     ?      2.5649+-0.2315        ? might be 1.0282x slower
   access-nsieve                                      3.0360+-0.1429            2.9742+-0.0265          might be 1.0208x faster
   bitops-3bit-bits-in-byte                           1.5018+-0.0925     ?      1.5290+-0.1590        ? might be 1.0181x slower
   bitops-bits-in-byte                                3.2546+-0.0701            3.1991+-0.0698          might be 1.0173x faster
   bitops-bitwise-and                                 2.0789+-0.1009     ?      2.1160+-0.3609        ? might be 1.0179x slower
   bitops-nsieve-bits                                 3.1007+-0.4141            2.9259+-0.0448          might be 1.0598x faster
   controlflow-recursive                              2.0495+-0.1283     ?      2.0497+-0.0860        ?
   crypto-aes                                         3.8739+-0.2369     ?      4.0400+-0.4830        ? might be 1.0429x slower
   crypto-md5                                         2.4109+-0.0852     ?      2.5465+-0.2717        ? might be 1.0563x slower
   crypto-sha1                                        2.3606+-0.1375     ?      2.4039+-0.0509        ? might be 1.0183x slower
   date-format-tofte                                  6.6738+-0.3949            6.6235+-0.1567        
   date-format-xparb                                  4.7190+-0.3976            4.6390+-0.2260          might be 1.0172x faster
   math-cordic                                        2.7303+-0.0425     ?      2.7817+-0.0817        ? might be 1.0188x slower
   math-partial-sums                                  5.0845+-0.2282     ?      5.2395+-0.1741        ? might be 1.0305x slower
   math-spectral-norm                                 1.9245+-0.2674     ?      2.0255+-0.5299        ? might be 1.0525x slower
   regexp-dna                                         6.1375+-0.1076     ?      6.2199+-0.4507        ? might be 1.0134x slower
   string-base64                                      4.2776+-0.1519            4.2572+-0.0602        
   string-fasta                                       5.7949+-0.4467            5.6986+-0.1502          might be 1.0169x faster
   string-tagcloud                                    8.3992+-0.8544            7.9413+-0.1787          might be 1.0577x faster
   string-unpack-code                                19.9737+-0.6904           19.7535+-1.0210          might be 1.0111x faster
   string-validate-input                              4.7013+-0.4286            4.5157+-0.1308          might be 1.0411x faster

   <arithmetic>                                       4.5772+-0.0694            4.5591+-0.0609          might be 1.0040x faster

                                                        TipOfTree                  Adaptive                                     
LongSpider:
   3d-cube                                          803.7170+-24.3443         779.3566+-17.4079         might be 1.0313x faster
   3d-morph                                        1567.5937+-56.2775        1542.6006+-46.7901         might be 1.0162x faster
   3d-raytrace                                      630.8180+-14.4795    ?    634.7878+-10.9843       ?
   access-binary-trees                              817.9562+-11.4179         813.7315+-14.0955       
   access-fannkuch                                  289.2943+-22.5959         285.4314+-8.6433          might be 1.0135x faster
   access-nbody                                     519.7572+-16.5092    ?    525.1617+-15.7677       ? might be 1.0104x slower
   access-nsieve                                    370.3897+-17.4074    ?    377.3108+-13.3382       ? might be 1.0187x slower
   bitops-3bit-bits-in-byte                          40.4178+-0.7968           40.4106+-1.0800        
   bitops-bits-in-byte                               82.0891+-3.6826     ?     82.2629+-2.2885        ?
   bitops-nsieve-bits                               410.4486+-13.0691    ?    420.3239+-11.8102       ? might be 1.0241x slower
   controlflow-recursive                            423.6414+-11.2773         418.5774+-4.5291          might be 1.0121x faster
   crypto-aes                                       591.7925+-12.5923         584.8023+-6.7298          might be 1.0120x faster
   crypto-md5                                       487.2883+-9.5790     ?    494.9983+-11.0244       ? might be 1.0158x slower
   crypto-sha1                                      636.2426+-14.3537    ?    646.1092+-5.3654        ? might be 1.0155x slower
   date-format-tofte                                505.3443+-10.3532         500.6196+-11.9117       
   date-format-xparb                                643.1280+-21.5852         634.1040+-14.8622         might be 1.0142x faster
   hash-map                                         153.2674+-3.1081          153.0030+-2.6024        
   math-cordic                                      490.2847+-12.7404    ?    490.7933+-12.0414       ?
   math-partial-sums                                478.9452+-11.8328         472.5522+-10.9981         might be 1.0135x faster
   math-spectral-norm                               561.9684+-14.5219    ?    563.0226+-16.4336       ?
   string-base64                                    355.6660+-6.6426          355.4392+-11.4278       
   string-fasta                                     363.0310+-9.9931          355.9754+-5.4096          might be 1.0198x faster
   string-tagcloud                                  177.2513+-1.5271     ?    183.9623+-18.3941       ? might be 1.0379x slower

   <geometric>                                      396.4147+-3.4597          396.1344+-3.2333          might be 1.0007x faster

                                                        TipOfTree                  Adaptive                                     
V8Spider:
   crypto                                            50.4405+-1.9502           49.2869+-1.3041          might be 1.0234x faster
   deltablue                                         77.7799+-2.4983           77.7612+-4.8694        
   earley-boyer                                      39.5403+-0.6068     ?     40.5252+-1.2512        ? might be 1.0249x slower
   raytrace                                          29.0553+-0.5178     ?     29.5962+-1.0872        ? might be 1.0186x slower
   regexp                                            62.5495+-2.2011     ?     67.1951+-3.5012        ? might be 1.0743x slower
   richards                                          68.0607+-2.8353     ?     70.4647+-2.8670        ? might be 1.0353x slower
   splay                                             34.9312+-2.4132           34.6285+-1.9660        

   <geometric>                                       48.8941+-0.8426     ?     49.7069+-0.5289        ? might be 1.0166x slower

                                                        TipOfTree                  Adaptive                                     
Octane:
   encrypt                                           0.19679+-0.00570    !     0.21259+-0.00559       ! definitely 1.0803x slower
   decrypt                                           3.45219+-0.08727    ?     3.47831+-0.20722       ?
   deltablue                                x2       0.15455+-0.00294    ?     0.15613+-0.00290       ? might be 1.0102x slower
   earley                                            0.30602+-0.00727    ?     0.30864+-0.00710       ?
   boyer                                             4.25825+-0.11755          4.13867+-0.08281         might be 1.0289x faster
   navier-stokes                            x2       5.00065+-0.12704    ?     5.09795+-0.15620       ? might be 1.0195x slower
   raytrace                                 x2       1.07395+-0.05847          1.05990+-0.06953         might be 1.0133x faster
   richards                                 x2       0.10161+-0.00243    ?     0.10289+-0.00353       ? might be 1.0126x slower
   splay                                    x2       0.33990+-0.01083    ?     0.34071+-0.00869       ?
   regexp                                   x2      25.57075+-0.81053         25.52920+-1.07648       
   pdfjs                                    x2      38.05185+-0.51413         37.45419+-0.61195         might be 1.0160x faster
   mandreel                                 x2      44.89250+-1.11826         44.83804+-1.14279       
   gbemu                                    x2      34.14590+-0.65217    ?    37.35606+-4.89970       ? might be 1.0940x slower
   closure                                           0.55964+-0.01056    ?     0.56299+-0.01148       ?
   jquery                                            7.16390+-0.15853    ?     7.21254+-0.13621       ?
   box2d                                    x2      10.06140+-0.17565    ?    10.36641+-0.24030       ? might be 1.0303x slower
   zlib                                     x2     383.89803+-15.74720   ?   392.38653+-6.63128       ? might be 1.0221x slower
   typescript                               x2     664.17651+-22.62491       662.25069+-14.35469      

   <geometric>                                       5.67828+-0.04381    ?     5.74818+-0.05393       ? might be 1.0123x slower

                                                        TipOfTree                  Adaptive                                     
Kraken:
   ai-astar                                          234.083+-8.682      ?     237.939+-3.921         ? might be 1.0165x slower
   audio-beat-detection                               84.142+-0.963      ^      58.653+-0.618         ^ definitely 1.4346x faster
   audio-dft                                          96.955+-2.592             95.035+-1.285           might be 1.0202x faster
   audio-fft                                          54.960+-0.441      ^      34.634+-0.134         ^ definitely 1.5869x faster
   audio-oscillator                                   60.427+-0.982      ?      61.506+-1.454         ? might be 1.0179x slower
   imaging-darkroom                                   96.735+-1.711      ^      60.290+-2.887         ^ definitely 1.6045x faster
   imaging-desaturate                                 56.548+-3.945             54.437+-3.931           might be 1.0388x faster
   imaging-gaussian-blur                              87.284+-5.180             83.618+-1.876           might be 1.0438x faster
   json-parse-financial                               38.516+-1.758             38.484+-1.530         
   json-stringify-tinderbox                           22.972+-1.377             21.893+-0.586           might be 1.0493x faster
   stanford-crypto-aes                                42.419+-0.544             42.104+-1.206         
   stanford-crypto-ccm                                39.397+-1.782             36.134+-2.019           might be 1.0903x faster
   stanford-crypto-pbkdf2                             95.075+-1.918             94.837+-1.613         
   stanford-crypto-sha256-iterative                   37.119+-1.707      ?      37.549+-2.664         ? might be 1.0116x slower

   <arithmetic>                                       74.759+-0.843      ^      68.365+-0.426         ^ definitely 1.0935x faster

                                                        TipOfTree                  Adaptive                                     
JSRegress:
   abc-forward-loop-equal                            29.9533+-1.5618     ?     30.0395+-0.9664        ?
   abc-postfix-backward-loop                         28.8273+-0.7667     ?     30.1623+-1.1413        ? might be 1.0463x slower
   abc-simple-backward-loop                          28.9465+-0.9426     ?     29.1605+-1.6676        ?
   abc-simple-forward-loop                           28.9453+-0.5782     ?     29.5963+-1.1073        ? might be 1.0225x slower
   abc-skippy-loop                                   21.4128+-1.1058           21.3022+-0.5183        
   abs-boolean                                        2.6968+-0.0731     ^      2.4237+-0.1077        ^ definitely 1.1127x faster
   adapt-to-double-divide                            16.7083+-0.7247           16.1913+-0.4797          might be 1.0319x faster
   aliased-arguments-getbyval                         1.1338+-0.0732     ?      1.2519+-0.1783        ? might be 1.1041x slower
   allocate-big-object                                2.5403+-0.4778     ?      2.5848+-0.3288        ? might be 1.0175x slower
   arguments-named-and-reflective                    10.7911+-0.4272     ?     11.1093+-0.4884        ? might be 1.0295x slower
   arguments-out-of-bounds                            9.8658+-0.2562            9.7773+-0.4098        
   arguments-strict-mode                              9.7797+-0.4040            9.3405+-0.1334          might be 1.0470x faster
   arguments                                          8.4497+-0.2137            8.3222+-0.1264          might be 1.0153x faster
   arity-mismatch-inlining                            0.8063+-0.0399            0.7996+-0.0323        
   array-access-polymorphic-structure                 5.9147+-0.0990     ?      6.0408+-0.1838        ? might be 1.0213x slower
   array-nonarray-polymorhpic-access                 24.9294+-0.7564     ?     25.1637+-0.8762        ?
   array-prototype-every                             74.1306+-1.1045     ?     76.6635+-2.2490        ? might be 1.0342x slower
   array-prototype-forEach                           75.0664+-3.4269           73.7537+-1.7482          might be 1.0178x faster
   array-prototype-map                               82.3730+-2.0901           81.9724+-0.8412        
   array-prototype-reduce                            70.6294+-1.1634     ?     72.3911+-1.1298        ? might be 1.0249x slower
   array-prototype-reduceRight                       71.0896+-2.2964           70.6728+-1.6609        
   array-prototype-some                              77.1927+-3.1637           76.4907+-1.7948        
   array-splice-contiguous                           21.8806+-1.1705           21.4031+-0.3987          might be 1.0223x faster
   array-with-double-add                              3.3587+-0.1142            3.3282+-0.0625        
   array-with-double-increment                        3.0773+-0.1726            3.0606+-0.2196        
   array-with-double-mul-add                          4.1171+-0.0674     ?      4.1551+-0.1330        ?
   array-with-double-sum                              3.1588+-0.1357     ?      3.2028+-0.1049        ? might be 1.0139x slower
   array-with-int32-add-sub                           5.8914+-0.1179            5.8209+-0.1132          might be 1.0121x faster
   array-with-int32-or-double-sum                     3.1655+-0.1096     ?      3.2023+-0.1645        ? might be 1.0116x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     29.1977+-0.8773     ?     29.6823+-0.9331        ? might be 1.0166x slower
   ArrayBuffer-DataView-alloc-long-lived             12.7096+-0.6667           12.3996+-0.4516          might be 1.0250x faster
   ArrayBuffer-Int32Array-byteOffset                  3.5382+-0.0477     ?      3.6072+-0.1312        ? might be 1.0195x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     31.7179+-1.2394     ?     31.9955+-0.7332        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.1419+-0.3780     ?     20.7037+-1.8235        ? might be 1.0279x slower
   ArrayBuffer-Int8Array-alloc-long-lived            12.3564+-0.7003     ?     12.6117+-1.8143        ? might be 1.0207x slower
   ArrayBuffer-Int8Array-alloc                       10.1704+-1.2773            9.6978+-0.4935          might be 1.0487x faster
   asmjs_bool_bug                                     7.2979+-0.1020     ^      7.0506+-0.0557        ^ definitely 1.0351x faster
   assign-custom-setter-polymorphic                   2.7047+-0.1342     ^      2.4815+-0.0720        ^ definitely 1.0899x faster
   assign-custom-setter                               3.6995+-0.3617     ^      3.2646+-0.0698        ^ definitely 1.1332x faster
   basic-set                                          7.8832+-0.3671            7.7109+-0.1508          might be 1.0223x faster
   big-int-mul                                        3.3965+-0.0451     ?      3.5552+-0.4290        ? might be 1.0467x slower
   boolean-test                                       2.9032+-0.1488            2.8153+-0.1097          might be 1.0312x faster
   branch-fold                                        3.5577+-0.0504     ?      3.7073+-0.2325        ? might be 1.0421x slower
   branch-on-string-as-boolean                       16.1375+-0.8029     ?     16.2752+-0.5672        ?
   by-val-generic                                     7.2155+-0.2017            7.1386+-0.2953          might be 1.0108x faster
   call-spread-apply                                 27.9989+-1.2705           26.4787+-0.8432          might be 1.0574x faster
   call-spread-call                                  22.2526+-0.8994     ^     20.6533+-0.3223        ^ definitely 1.0774x faster
   captured-assignments                               0.3914+-0.0149     ?      0.4248+-0.0426        ? might be 1.0856x slower
   cast-int-to-double                                 5.0895+-0.0708     ?      5.1045+-0.2623        ?
   cell-argument                                      6.3292+-0.2713            6.2017+-0.3440          might be 1.0205x faster
   cfg-simplify                                       2.6884+-0.0361     ?      2.9207+-0.4324        ? might be 1.0864x slower
   chain-getter-access                                8.0675+-0.3353     ?      8.0733+-0.3160        ?
   cmpeq-obj-to-obj-other                            11.4651+-0.2738           11.2384+-0.8602          might be 1.0202x faster
   constant-test                                      4.7946+-0.0888            4.7659+-0.0411        
   create-lots-of-functions                           9.4802+-0.4497     ?      9.5278+-0.4479        ?
   cse-new-array-buffer                               2.2858+-0.0947            2.2765+-0.1062        
   cse-new-array                                      2.3459+-0.1227     ?      2.5636+-0.6333        ? might be 1.0928x slower
   DataView-custom-properties                        35.1452+-0.6898     ?     37.5854+-4.4306        ? might be 1.0694x slower
   delay-tear-off-arguments-strictmode               12.8369+-0.5993           12.6293+-1.0041          might be 1.0164x faster
   deltablue-varargs                                149.5232+-2.9283     ?    150.8802+-3.4729        ?
   destructuring-arguments                          162.4556+-2.5887          161.6713+-1.4254        
   destructuring-parameters-overridden-by-function   
                                                      0.5179+-0.0288            0.4940+-0.0263          might be 1.0484x faster
   destructuring-swap                                 4.7166+-0.1314            4.6800+-0.1419        
   direct-arguments-getbyval                          1.2145+-0.0518            1.1512+-0.0551          might be 1.0549x faster
   div-boolean-double                                 5.2732+-0.0783     ?      5.3327+-0.0700        ? might be 1.0113x slower
   div-boolean                                        8.1508+-0.2797            8.0939+-0.0672        
   double-get-by-val-out-of-bounds                    3.9027+-0.1283     ?      4.0395+-0.2654        ? might be 1.0350x slower
   double-pollution-getbyval                          8.5128+-0.0293     ?      8.8269+-0.3457        ? might be 1.0369x slower
   double-pollution-putbyoffset                       3.9209+-0.3910     ?      4.0286+-0.4875        ? might be 1.0275x slower
   double-real-use                                   27.9683+-1.0260           25.6420+-1.8172          might be 1.0907x faster
   double-to-int32-typed-array-no-inline              2.2340+-0.3869            2.2275+-0.3473        
   double-to-int32-typed-array                        1.7837+-0.0795            1.7334+-0.0572          might be 1.0290x faster
   double-to-uint32-typed-array-no-inline             2.1446+-0.1062            2.0913+-0.0372          might be 1.0255x faster
   double-to-uint32-typed-array                       1.8699+-0.1521     ?      1.8745+-0.1016        ?
   elidable-new-object-dag                           34.4497+-0.9047     ?     34.6320+-1.0848        ?
   elidable-new-object-roflcopter                    33.6725+-1.0597     ?     33.9674+-1.0491        ?
   elidable-new-object-then-call                     31.7717+-0.4983     ?     32.3498+-1.1901        ? might be 1.0182x slower
   elidable-new-object-tree                          36.1918+-0.7656           35.8836+-0.3143        
   empty-string-plus-int                              4.6593+-0.2649            4.6134+-0.2261        
   emscripten-cube2hash                              25.4928+-1.5150           25.4413+-1.3861        
   exit-length-on-plain-object                       12.6088+-0.4639     ?     13.2688+-0.8799        ? might be 1.0524x slower
   external-arguments-getbyval                        1.4044+-0.5421            1.1868+-0.0457          might be 1.1834x faster
   external-arguments-putbyval                        2.2110+-0.0512     ?      2.2183+-0.0581        ?
   fixed-typed-array-storage-var-index                1.1706+-0.0224            1.1419+-0.0619          might be 1.0251x faster
   fixed-typed-array-storage                          0.9187+-0.0589            0.8889+-0.1033          might be 1.0336x faster
   Float32Array-matrix-mult                           4.0061+-0.2617            3.8658+-0.0750          might be 1.0363x faster
   Float32Array-to-Float64Array-set                  46.2232+-1.9344     ?     47.7610+-1.7033        ? might be 1.0333x slower
   Float64Array-alloc-long-lived                     76.9366+-2.4105           75.5374+-1.2653          might be 1.0185x faster
   Float64Array-to-Int16Array-set                    58.0400+-1.3890           57.0935+-2.0424          might be 1.0166x faster
   fold-double-to-int                                13.0910+-0.5604           12.4568+-0.0843          might be 1.0509x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.3255+-0.8005            9.8193+-0.4988          might be 1.0516x faster
   fold-get-by-id-to-multi-get-by-offset              9.0087+-0.3956            8.8951+-0.2644          might be 1.0128x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.5755+-0.6053            8.3871+-0.7363          might be 1.0225x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.4878+-0.6475     ?      8.0677+-0.6173        ? might be 1.0775x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.4707+-0.4707     ?      7.6645+-0.6488        ? might be 1.0259x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.2248+-0.7467     ?      5.4498+-0.8796        ? might be 1.0431x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.7574+-0.5145     ?      9.4012+-0.6594        ? might be 1.0735x slower
   fold-put-by-id-to-multi-put-by-offset              8.4089+-0.3711     ?      8.7390+-0.5272        ? might be 1.0393x slower
   fold-put-structure                                 5.5827+-0.5086            5.4604+-0.1989          might be 1.0224x faster
   for-of-iterate-array-entries                      11.4097+-0.5165           10.9970+-0.1795          might be 1.0375x faster
   for-of-iterate-array-keys                          3.5728+-0.4516            3.3790+-0.2424          might be 1.0573x faster
   for-of-iterate-array-values                        3.3691+-0.2179     ?      3.8209+-0.6154        ? might be 1.1341x slower
   fround                                            19.2325+-0.6478     ?     19.3276+-1.4977        ?
   ftl-library-inlining-dataview                     57.3999+-0.6396           57.3056+-1.7202        
   ftl-library-inlining                             109.4663+-5.1507          107.7667+-1.1111          might be 1.0158x faster
   function-dot-apply                                 2.0778+-0.1288            2.0332+-0.1758          might be 1.0219x faster
   function-test                                      2.5981+-0.0543     ?      2.7951+-0.2810        ? might be 1.0758x slower
   function-with-eval                                95.6740+-2.9631     ?     96.2906+-3.0358        ?
   gcse-poly-get-less-obvious                        15.4349+-1.2486           14.1000+-0.3844          might be 1.0947x faster
   gcse-poly-get                                     13.9506+-0.4341     ?     14.1950+-1.0085        ? might be 1.0175x slower
   gcse                                               3.7239+-0.0415     ?      3.7280+-0.0417        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.6040+-0.1213            2.5515+-0.1115          might be 1.0206x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.8088+-0.2588            5.7045+-0.2109          might be 1.0183x faster
   get-by-id-chain-from-try-block                     5.4697+-0.0955     ?      5.8308+-0.5233        ? might be 1.0660x slower
   get-by-id-check-structure-elimination              4.9384+-1.7315            4.3477+-0.1472          might be 1.1359x faster
   get-by-id-proto-or-self                           14.7067+-0.2983     ?     14.8065+-0.9734        ?
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0445+-0.0931     ?      3.1675+-0.4585        ? might be 1.0404x slower
   get-by-id-self-or-proto                           14.4115+-0.9800     ?     14.8477+-1.3652        ? might be 1.0303x slower
   get-by-val-out-of-bounds                           4.0557+-0.3032            3.9336+-0.0745          might be 1.0310x faster
   get_callee_monomorphic                             2.2613+-0.1512            2.2041+-0.1578          might be 1.0260x faster
   get_callee_polymorphic                             3.2883+-0.3207            3.2354+-0.0577          might be 1.0163x faster
   getter-no-activation                               4.7741+-0.1690            4.6890+-0.0757          might be 1.0182x faster
   getter-prototype                                   9.6720+-0.2233     ?      9.7686+-0.3078        ?
   getter-richards                                  121.6606+-5.5812     ^    108.4585+-2.6731        ^ definitely 1.1217x faster
   getter                                             5.4702+-0.4381     ?      5.6983+-0.5849        ? might be 1.0417x slower
   global-var-const-infer-fire-from-opt               0.8951+-0.1361     ?      0.9704+-0.1130        ? might be 1.0841x slower
   global-var-const-infer                             0.7671+-0.1111     ?      0.8982+-0.1820        ? might be 1.1708x slower
   HashMap-put-get-iterate-keys                      25.7770+-2.4458     ?     25.9889+-2.4021        ?
   HashMap-put-get-iterate                           27.3074+-2.9691           25.9138+-1.2632          might be 1.0538x faster
   HashMap-string-put-get-iterate                    24.3748+-1.2647           23.7717+-0.6408          might be 1.0254x faster
   hoist-make-rope                                    8.2589+-0.8362     ?      8.7115+-1.4909        ? might be 1.0548x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.3829+-0.2199     ?      4.6675+-0.5819        ? might be 1.0649x slower
   hoist-poly-check-structure                         3.2512+-0.0299     ?      3.3952+-0.4768        ? might be 1.0443x slower
   imul-double-only                                   6.8748+-0.1198            6.7501+-0.3581          might be 1.0185x faster
   imul-int-only                                      8.7832+-0.8408            7.9295+-0.4194          might be 1.1077x faster
   imul-mixed                                         6.7037+-0.3091            6.5373+-0.6125          might be 1.0255x faster
   in-four-cases                                     17.1239+-0.2918           16.9402+-0.2575          might be 1.0108x faster
   in-one-case-false                                  9.5426+-0.6550            9.2255+-0.3862          might be 1.0344x faster
   in-one-case-true                                   9.3114+-0.6697     ?      9.4871+-0.4950        ? might be 1.0189x slower
   in-two-cases                                       9.7678+-0.7416            9.5288+-0.0632          might be 1.0251x faster
   indexed-properties-in-objects                      2.8603+-0.1680     ?      2.9626+-0.2390        ? might be 1.0358x slower
   infer-closure-const-then-mov-no-inline             3.4325+-0.4528            3.0192+-0.0746          might be 1.1369x faster
   infer-closure-const-then-mov                      17.3653+-0.5472           17.0131+-0.9230          might be 1.0207x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.3619+-0.1393     !     11.8155+-0.5223        ! definitely 1.1403x slower
   infer-closure-const-then-put-to-scope             21.7806+-1.4871           21.3357+-1.0274          might be 1.0209x faster
   infer-closure-const-then-reenter-no-inline   
                                                     50.2296+-1.2350     ?     50.2685+-0.8848        ?
   infer-closure-const-then-reenter                  22.2054+-0.5384           21.5876+-0.6614          might be 1.0286x faster
   infer-constant-global-property                     3.3403+-0.0932     ?      3.4735+-0.1958        ? might be 1.0399x slower
   infer-constant-property                            2.5667+-0.0553     ?      2.6070+-0.1110        ? might be 1.0157x slower
   infer-one-time-closure-ten-vars                    8.3876+-0.2695     ?      8.7447+-0.5919        ? might be 1.0426x slower
   infer-one-time-closure-two-vars                    8.2207+-0.7575     ?      8.4150+-1.3821        ? might be 1.0236x slower
   infer-one-time-closure                             7.7687+-0.2518     ?      7.8310+-0.1104        ?
   infer-one-time-deep-closure                       12.6114+-0.3735     ?     12.8195+-0.3580        ? might be 1.0165x slower
   inline-arguments-access                            3.6556+-0.3297     ?      3.7280+-0.1435        ? might be 1.0198x slower
   inline-arguments-aliased-access                    3.9902+-0.4420            3.8265+-0.5166          might be 1.0428x faster
   inline-arguments-local-escape                      3.7666+-0.3740     ?      3.7769+-0.2658        ?
   inline-get-scoped-var                              4.5167+-0.1391     ?      4.5987+-0.1334        ? might be 1.0182x slower
   inlined-put-by-id-transition                      10.6174+-0.3400           10.5057+-0.4490          might be 1.0106x faster
   int-or-other-abs-then-get-by-val                   4.7525+-0.0751            4.7442+-0.0903        
   int-or-other-abs-zero-then-get-by-val             16.6692+-0.9506           16.1431+-1.0308          might be 1.0326x faster
   int-or-other-add-then-get-by-val                   4.1168+-0.1381     ?      4.1197+-0.2907        ?
   int-or-other-add                                   4.7632+-0.0316     ?      4.9630+-0.3973        ? might be 1.0420x slower
   int-or-other-div-then-get-by-val                   3.6811+-0.0704     ?      3.8024+-0.4164        ? might be 1.0330x slower
   int-or-other-max-then-get-by-val                   4.0999+-0.2328            3.9314+-0.1088          might be 1.0429x faster
   int-or-other-min-then-get-by-val                   4.1856+-0.0590     ^      3.9475+-0.0976        ^ definitely 1.0603x faster
   int-or-other-mod-then-get-by-val                   3.4741+-0.1092     ?      3.7694+-0.6516        ? might be 1.0850x slower
   int-or-other-mul-then-get-by-val                   3.5874+-0.1176     ?      3.7163+-0.2714        ? might be 1.0359x slower
   int-or-other-neg-then-get-by-val                   4.4858+-0.1361     ?      4.5140+-0.2901        ?
   int-or-other-neg-zero-then-get-by-val             16.0488+-0.7617     ?     16.2743+-0.5360        ? might be 1.0141x slower
   int-or-other-sub-then-get-by-val                   4.4818+-0.8995            3.9841+-0.0770          might be 1.1249x faster
   int-or-other-sub                                   3.4517+-0.1264            3.4019+-0.1171          might be 1.0146x faster
   int-overflow-local                                 4.5232+-0.4381            4.2815+-0.1094          might be 1.0565x faster
   Int16Array-alloc-long-lived                       48.7933+-2.1583           46.7486+-1.2480          might be 1.0437x faster
   Int16Array-bubble-sort-with-byteLength            19.5681+-1.4659           19.2232+-0.7309          might be 1.0179x faster
   Int16Array-bubble-sort                            18.8297+-0.3602     ?     18.9949+-0.7964        ?
   Int16Array-load-int-mul                            1.4692+-0.1054     ?      1.5001+-0.2060        ? might be 1.0210x slower
   Int16Array-to-Int32Array-set                      43.0809+-1.7245     ?     43.1316+-1.3360        ?
   Int32Array-alloc-large                            12.4592+-0.5421     ?     12.8643+-0.5461        ? might be 1.0325x slower
   Int32Array-alloc-long-lived                       58.5166+-1.7366           57.1085+-2.0835          might be 1.0247x faster
   Int32Array-alloc                                   3.0257+-0.3006            2.8929+-0.1872          might be 1.0459x faster
   Int32Array-Int8Array-view-alloc                    6.4521+-0.8155            6.0512+-0.4227          might be 1.0663x faster
   int52-spill                                        4.5883+-0.1729            4.5492+-0.1326        
   Int8Array-alloc-long-lived                        43.1229+-1.1108     ^     40.8302+-1.0073        ^ definitely 1.0562x faster
   Int8Array-load-with-byteLength                     3.4722+-0.4070            3.4171+-0.1169          might be 1.0161x faster
   Int8Array-load                                     3.4688+-0.2068     ?      3.5817+-0.4780        ? might be 1.0325x slower
   integer-divide                                    10.5687+-0.2866           10.3235+-0.1465          might be 1.0238x faster
   integer-modulo                                     1.8357+-0.4339            1.6291+-0.0575          might be 1.1268x faster
   is-boolean-fold-tricky                             3.7202+-0.1199            3.7020+-0.0880        
   is-boolean-fold                                    3.0473+-0.7858            2.7883+-0.1989          might be 1.0929x faster
   is-function-fold-tricky-internal-function   
                                                     10.0159+-0.3160     ?     10.0494+-0.2990        ?
   is-function-fold-tricky                            4.0413+-0.1490            3.9819+-0.0538          might be 1.0149x faster
   is-function-fold                                   2.6522+-0.0903     ?      2.7468+-0.2875        ? might be 1.0357x slower
   is-number-fold-tricky                              3.9361+-0.0749     ?      3.9752+-0.0727        ?
   is-number-fold                                     2.6271+-0.0976     ?      2.6687+-0.2149        ? might be 1.0158x slower
   is-object-or-null-fold-functions                   2.6101+-0.0466     ?      2.6666+-0.1041        ? might be 1.0217x slower
   is-object-or-null-fold-less-tricky                 4.0832+-0.1733     ?      4.1239+-0.1840        ?
   is-object-or-null-fold-tricky                      5.2099+-0.1785            5.1267+-0.1382          might be 1.0162x faster
   is-object-or-null-fold                             2.6438+-0.0918            2.6103+-0.0566          might be 1.0128x faster
   is-object-or-null-trickier-function                4.0369+-0.0449     ?      4.0485+-0.1137        ?
   is-object-or-null-trickier-internal-function   
                                                     10.1735+-0.1545     ?     10.2763+-0.2121        ? might be 1.0101x slower
   is-object-or-null-tricky-function                  4.1169+-0.1868            4.0385+-0.1558          might be 1.0194x faster
   is-object-or-null-tricky-internal-function   
                                                      7.6611+-0.0311     ?      7.8531+-0.3531        ? might be 1.0251x slower
   is-string-fold-tricky                              3.9788+-0.0782            3.9364+-0.0490          might be 1.0108x faster
   is-string-fold                                     2.6204+-0.1259            2.5597+-0.0141          might be 1.0237x faster
   is-undefined-fold-tricky                           3.4995+-0.2796            3.3385+-0.1506          might be 1.0482x faster
   is-undefined-fold                                  2.5855+-0.0371     ?      2.6532+-0.2291        ? might be 1.0262x slower
   large-int-captured                                 3.9810+-0.1572            3.8426+-0.2169          might be 1.0360x faster
   large-int-neg                                     13.7724+-0.3683     ?     14.2799+-0.9650        ? might be 1.0369x slower
   large-int                                         13.2743+-0.5399     ?     13.4562+-0.5171        ? might be 1.0137x slower
   load-varargs-elimination                          22.1274+-1.6301     ?     22.1958+-1.2241        ?
   logical-not-weird-types                            2.8069+-0.0521     ?      2.8623+-0.0633        ? might be 1.0198x slower
   logical-not                                        4.1926+-0.2854     ?      4.2919+-0.1504        ? might be 1.0237x slower
   lots-of-fields                                     9.5002+-0.5543     ?      9.5563+-0.3975        ?
   make-indexed-storage                               2.9961+-0.3953            2.8064+-0.5729          might be 1.0676x faster
   make-rope-cse                                      3.7767+-0.3986            3.6912+-0.3261          might be 1.0232x faster
   marsaglia-larger-ints                             33.1632+-1.2142     ?     33.3218+-1.1142        ?
   marsaglia-osr-entry                               21.3612+-1.0048           20.7170+-0.5880          might be 1.0311x faster
   math-with-out-of-bounds-array-values              21.5814+-0.6134     ?     21.7050+-0.5617        ?
   max-boolean                                        2.4059+-0.0655     !      2.6428+-0.0735        ! definitely 1.0985x slower
   method-on-number                                  16.5717+-0.9345           15.6495+-0.3469          might be 1.0589x faster
   min-boolean                                        2.4071+-0.0262     !      2.6473+-0.0522        ! definitely 1.0998x slower
   minus-boolean-double                               3.0680+-0.1318     ?      3.0894+-0.1431        ?
   minus-boolean                                      2.2933+-0.0425     ?      2.3872+-0.1491        ? might be 1.0409x slower
   misc-strict-eq                                    31.3042+-1.0451     ?     32.9912+-3.3371        ? might be 1.0539x slower
   mod-boolean-double                                11.2128+-0.2951     ?     11.2234+-0.3479        ?
   mod-boolean                                        8.6985+-0.6319            8.2577+-0.0906          might be 1.0534x faster
   mul-boolean-double                                 3.5304+-0.0840            3.5272+-0.0975        
   mul-boolean                                        2.7742+-0.0468     ?      2.9202+-0.2727        ? might be 1.0526x slower
   neg-boolean                                        3.1455+-0.1817            3.0054+-0.0266          might be 1.0466x faster
   negative-zero-divide                               0.3256+-0.0248     ?      0.3464+-0.0488        ? might be 1.0636x slower
   negative-zero-modulo                               0.3341+-0.0274            0.3298+-0.0296          might be 1.0132x faster
   negative-zero-negate                               0.3970+-0.1937            0.3064+-0.0270          might be 1.2958x faster
   nested-function-parsing                           44.8615+-1.3507           43.9156+-0.7265          might be 1.0215x faster
   new-array-buffer-dead                             88.1292+-0.7450     ?     88.5398+-1.0202        ?
   new-array-buffer-push                              6.2259+-0.4488            6.1713+-0.4776        
   new-array-dead                                    15.5071+-1.4325           13.7075+-0.6565          might be 1.1313x faster
   new-array-push                                     6.1503+-0.2175     ?      6.2677+-0.2863        ? might be 1.0191x slower
   no-inline-constructor                             32.0150+-0.7123           31.2878+-1.1253          might be 1.0232x faster
   number-test                                        2.7606+-0.0390     ?      2.7937+-0.1027        ? might be 1.0120x slower
   object-closure-call                                5.0124+-0.3472            4.9697+-0.2456        
   object-get-own-property-symbols-on-large-array   
                                                      4.1591+-0.3334            4.0273+-0.3942          might be 1.0327x faster
   object-test                                        2.5743+-0.0810            2.5733+-0.0560        
   obvious-sink-pathology-taken                      99.3015+-0.8506           98.4384+-1.1496        
   obvious-sink-pathology                            94.6192+-0.9922     ?     94.9547+-1.3280        ?
   obviously-elidable-new-object                     27.4631+-1.9170     ?     28.5603+-2.0957        ? might be 1.0400x slower
   plus-boolean-arith                                 2.3505+-0.1005     ?      2.4349+-0.1655        ? might be 1.0359x slower
   plus-boolean-double                                3.0942+-0.0874     ?      3.1860+-0.3053        ? might be 1.0297x slower
   plus-boolean                                       2.6807+-0.3400            2.5990+-0.0917          might be 1.0314x faster
   poly-chain-access-different-prototypes-simple   
                                                      2.7130+-0.0948     !      3.2443+-0.1234        ! definitely 1.1959x slower
   poly-chain-access-different-prototypes             2.5262+-0.1086     !      2.8069+-0.0630        ! definitely 1.1111x slower
   poly-chain-access-simpler                          2.7487+-0.0830     !      3.4218+-0.3136        ! definitely 1.2449x slower
   poly-chain-access                                  2.5243+-0.1196     !      3.1824+-0.0494        ! definitely 1.2607x slower
   poly-stricteq                                     50.8727+-1.0194     ?     51.5450+-2.1397        ? might be 1.0132x slower
   polymorphic-array-call                             1.5614+-0.3520            1.2225+-0.0715          might be 1.2772x faster
   polymorphic-get-by-id                              2.8639+-0.0521            2.8293+-0.0498          might be 1.0122x faster
   polymorphic-put-by-id                             25.0852+-1.7815     ?     25.4855+-1.8363        ? might be 1.0160x slower
   polymorphic-structure                             13.0402+-0.3242     ?     13.1248+-0.4445        ?
   polyvariant-monomorphic-get-by-id                  6.6565+-0.5710            6.5219+-0.5844          might be 1.0206x faster
   proto-getter-access                                7.9254+-0.1436     ?      7.9270+-0.1637        ?
   prototype-access-with-mutating-prototype         380.8736+-10.3559    ^      5.4162+-0.3696        ^ definitely 70.3215x faster
   put-by-id-replace-and-transition                   8.0024+-0.6192     ?      8.3071+-1.3396        ? might be 1.0381x slower
   put-by-id-slightly-polymorphic                     2.8199+-0.2106            2.7956+-0.1133        
   put-by-id                                         10.2795+-0.5146           10.2212+-0.7569        
   put-by-val-direct                                  0.3433+-0.0338            0.3061+-0.0069          might be 1.1216x faster
   put-by-val-large-index-blank-indexing-type   
                                                     11.5602+-0.5107     ?     12.1145+-0.5170        ? might be 1.0480x slower
   put-by-val-machine-int                             2.4121+-0.1233     ?      2.4880+-0.0810        ? might be 1.0315x slower
   rare-osr-exit-on-local                            14.4660+-0.3129     ?     14.7155+-0.3710        ? might be 1.0172x slower
   register-pressure-from-osr                        16.5262+-0.6673           16.1825+-0.3748          might be 1.0212x faster
   repeat-multi-get-by-offset                        20.9219+-1.4006     ?     22.0367+-0.7254        ? might be 1.0533x slower
   setter-prototype                                   7.5168+-0.1226     ^      7.2111+-0.1109        ^ definitely 1.0424x faster
   setter                                             5.6762+-0.2732            5.5865+-0.3880          might be 1.0161x faster
   simple-activation-demo                            24.2705+-0.5987     ?     24.6012+-0.6930        ? might be 1.0136x slower
   simple-getter-access                              10.7292+-0.7009           10.4356+-0.2739          might be 1.0281x faster
   simple-poly-call-nested                            8.3717+-0.4182     ?      8.8915+-0.5933        ? might be 1.0621x slower
   simple-poly-call                                   1.2573+-0.0656     ?      1.3884+-0.3881        ? might be 1.1043x slower
   sin-boolean                                       20.2922+-1.9243           19.6864+-2.3026          might be 1.0308x faster
   singleton-scope                                   57.3733+-1.5699     ?     58.4947+-1.3036        ? might be 1.0195x slower
   sink-function                                      9.8610+-1.2168            9.4331+-1.1735          might be 1.0454x faster
   sink-huge-activation                              16.8662+-0.9414           16.3344+-1.1433          might be 1.0326x faster
   sinkable-new-object-dag                           54.6995+-1.5307     ?     56.3906+-1.5581        ? might be 1.0309x slower
   sinkable-new-object-taken                         42.7915+-1.2996           42.6075+-1.5082        
   sinkable-new-object                               29.5848+-0.3611           29.2573+-0.3416          might be 1.0112x faster
   slow-array-profile-convergence                     2.8155+-0.5442            2.4823+-0.0777          might be 1.1342x faster
   slow-convergence                                   2.5142+-0.3224            2.3573+-0.0300          might be 1.0666x faster
   slow-ternaries                                    16.5932+-0.3397           16.4958+-0.6351        
   sorting-benchmark                                 17.5098+-2.1213           16.7588+-0.7821          might be 1.0448x faster
   sparse-conditional                                 1.1180+-0.0564     ?      1.2055+-0.1042        ? might be 1.0783x slower
   splice-to-remove                                  11.9097+-0.3758     ?     12.2822+-0.4091        ? might be 1.0313x slower
   string-char-code-at                               14.2538+-0.3509           14.0598+-0.2897          might be 1.0138x faster
   string-concat-object                               2.2810+-0.2209            2.0813+-0.2356          might be 1.0960x faster
   string-concat-pair-object                          2.0044+-0.0952     ?      2.1702+-0.1100        ? might be 1.0827x slower
   string-concat-pair-simple                          9.1767+-0.2324     ?      9.5616+-0.4892        ? might be 1.0419x slower
   string-concat-simple                               9.6600+-1.0453            9.6234+-0.6484        
   string-cons-repeat                                 6.6637+-0.5960            6.4730+-0.1868          might be 1.0295x faster
   string-cons-tower                                  6.6557+-0.4211     ?      6.6698+-0.2554        ?
   string-equality                                   15.7223+-1.2345           15.1822+-0.3442          might be 1.0356x faster
   string-get-by-val-big-char                         6.5250+-0.4070            6.5171+-0.2871        
   string-get-by-val-out-of-bounds-insane             3.3345+-0.2304            3.2049+-0.1638          might be 1.0404x faster
   string-get-by-val-out-of-bounds                    3.9859+-0.0585     ?      4.1449+-0.2366        ? might be 1.0399x slower
   string-get-by-val                                  2.7761+-0.0924     ?      2.7806+-0.0355        ?
   string-hash                                        1.8879+-0.0946            1.8510+-0.0247          might be 1.0199x faster
   string-long-ident-equality                        12.4799+-0.3167     ?     12.5362+-0.4241        ?
   string-out-of-bounds                              10.9229+-1.2142           10.4532+-0.0824          might be 1.0449x faster
   string-repeat-arith                               27.7753+-1.6226           26.4429+-0.9114          might be 1.0504x faster
   string-sub                                        53.0905+-1.0755           52.7675+-0.8678        
   string-test                                        2.6882+-0.0551     ?      2.7697+-0.2142        ? might be 1.0303x slower
   string-var-equality                               25.7693+-0.3015     ?     26.1897+-1.1495        ? might be 1.0163x slower
   structure-hoist-over-transitions                   2.4080+-0.1408            2.3909+-0.0636        
   substring-concat-weird                            35.9714+-1.3759           35.7002+-0.7909        
   substring-concat                                  40.2256+-1.5620           39.7886+-1.8225          might be 1.0110x faster
   substring                                         45.6614+-1.8401           45.4661+-1.1161        
   switch-char-constant                               2.6986+-0.1013            2.6727+-0.0317        
   switch-char                                        5.8380+-0.7417            5.7503+-0.4981          might be 1.0153x faster
   switch-constant                                    9.2950+-0.5108            8.9500+-0.8352          might be 1.0386x faster
   switch-string-basic-big-var                       15.4759+-0.4277           15.2460+-0.1769          might be 1.0151x faster
   switch-string-basic-big                           14.9459+-0.9990     ?     15.1398+-0.4725        ? might be 1.0130x slower
   switch-string-basic-var                           13.0261+-0.2959     ?     13.1676+-0.6149        ? might be 1.0109x slower
   switch-string-basic                               13.5876+-1.7048           12.7543+-0.0595          might be 1.0653x faster
   switch-string-big-length-tower-var                17.8434+-0.7809           17.5588+-0.3507          might be 1.0162x faster
   switch-string-length-tower-var                    13.5552+-1.1397           13.0967+-0.5717          might be 1.0350x faster
   switch-string-length-tower                        11.8094+-0.1857           11.7981+-0.3798        
   switch-string-short                               12.1018+-0.7386           11.9736+-0.4202          might be 1.0107x faster
   switch                                            13.4430+-1.9067           12.4515+-1.0377          might be 1.0796x faster
   tear-off-arguments-simple                          2.9766+-0.0374     ?      3.0770+-0.1121        ? might be 1.0337x slower
   tear-off-arguments                                 3.8459+-0.0987     ?      3.9828+-0.1517        ? might be 1.0356x slower
   temporal-structure                                13.1803+-0.3082     ^     11.9392+-0.2183        ^ definitely 1.1040x faster
   to-int32-boolean                                  13.0266+-0.3306           12.8890+-0.2126          might be 1.0107x faster
   try-catch-get-by-val-cloned-arguments             14.0913+-0.5651           13.8798+-0.6569          might be 1.0152x faster
   try-catch-get-by-val-direct-arguments              6.3417+-0.1290     ?      6.5613+-0.3880        ? might be 1.0346x slower
   try-catch-get-by-val-scoped-arguments              7.7463+-0.4597            7.5802+-0.4072          might be 1.0219x faster
   typed-array-get-set-by-val-profiling              27.8108+-0.9677           27.7780+-0.6545        
   undefined-property-access                        231.5044+-4.0487     ^    221.9122+-2.4025        ^ definitely 1.0432x faster
   undefined-test                                     2.8373+-0.0882            2.7677+-0.0693          might be 1.0251x faster
   unprofiled-licm                                   13.9479+-0.3830     ?     14.1136+-0.4306        ? might be 1.0119x slower
   varargs-call                                      13.8407+-0.2084     ?     13.8632+-0.1188        ?
   varargs-construct-inline                          22.5007+-0.8967     ?     22.9550+-0.9458        ? might be 1.0202x slower
   varargs-construct                                 20.7879+-0.5675           20.2267+-0.7886          might be 1.0277x faster
   varargs-inline                                     8.6116+-0.4245     ?      8.6120+-0.5216        ?
   varargs-strict-mode                                9.2815+-0.6367            8.9648+-0.1086          might be 1.0353x faster
   varargs                                            9.1453+-0.7593            9.0118+-0.2094          might be 1.0148x faster
   weird-inlining-const-prop                          2.6061+-0.3494     ?      2.8678+-0.3812        ? might be 1.1004x slower

   <geometric>                                        7.9343+-0.0242     ^      7.8166+-0.0230        ^ definitely 1.0151x faster

                                                        TipOfTree                  Adaptive                                     
AsmBench:
   bigfib.cpp                                       456.9175+-7.5134     ?    457.5968+-9.5786        ?
   cray.c                                           404.4007+-7.7082          403.9750+-10.4878       
   dry.c                                            437.2227+-24.4648    ?    439.6968+-32.5382       ?
   FloatMM.c                                        701.1412+-26.2006    ?    714.5997+-38.5202       ? might be 1.0192x slower
   gcc-loops.cpp                                   3439.8763+-91.1751    ?   3494.4896+-88.9460       ? might be 1.0159x slower
   n-body.c                                         857.3845+-23.8812         834.6784+-24.7890         might be 1.0272x faster
   Quicksort.c                                      411.7223+-4.6815          411.5973+-10.8366       
   stepanov_container.cpp                          3573.7439+-102.5283   ?   3622.1098+-90.1827       ? might be 1.0135x slower
   Towers.c                                         233.8201+-3.0816     ?    235.7799+-4.8157        ?

   <geometric>                                      727.8415+-6.9097     ?    730.5996+-10.4228       ? might be 1.0038x slower

                                                        TipOfTree                  Adaptive                                     
CompressionBench:
   huffman                                           59.1674+-1.1318     ?     59.2661+-1.1557        ?
   arithmetic-simple                                267.3619+-2.3030     ?    268.5656+-1.7103        ?
   arithmetic-precise                               244.0977+-1.8071     ?    244.1183+-2.5128        ?
   arithmetic-complex-precise                       245.2327+-2.9130     ?    250.2736+-12.5593       ? might be 1.0206x slower
   arithmetic-precise-order-0                       277.2734+-1.2194     ?    279.6467+-6.3904        ?
   arithmetic-precise-order-1                       313.2673+-11.1499         310.0146+-4.1135          might be 1.0105x faster
   arithmetic-precise-order-2                       375.9084+-41.6155         358.2793+-4.5639          might be 1.0492x faster
   arithmetic-simple-order-1                        327.3972+-9.4726          326.7085+-5.4727        
   arithmetic-simple-order-2                        391.1607+-8.8523     ?    397.2773+-12.3161       ? might be 1.0156x slower
   lz-string                                        311.6857+-7.1515     ?    315.3020+-14.0606       ? might be 1.0116x slower

   <geometric>                                      256.4098+-4.1995     ?    256.5143+-2.8343        ? might be 1.0004x slower

                                                        TipOfTree                  Adaptive                                     
Geomean of preferred means:
   <scaled-result>                                   52.2729+-0.2741     ^     51.7784+-0.1053        ^ definitely 1.0096x faster
Comment 43 Filip Pizlo 2015-07-31 00:42:43 PDT
I reran Octane and can't really repro the overall slow-down.  I'll investigate encrypt a bit, but it might be a fluke.


Benchmark report for Octane on shakezilla (MacBookPro11,3).

VMs tested:
"TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r187605)
"Adaptive" at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r187605)

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

                           TipOfTree                  Adaptive                                     

encrypt                 0.19225+-0.00196    !     0.20304+-0.00056       ! definitely 1.0561x slower
decrypt                 3.34754+-0.04825    ?     3.36644+-0.07103       ?
deltablue      x2       0.15245+-0.00138    ?     0.15344+-0.00187       ?
earley                  0.30446+-0.00817          0.30071+-0.00457         might be 1.0125x faster
boyer                   4.12098+-0.02049    ?     4.12703+-0.03345       ?
navier-stokes  x2       4.89834+-0.00285    ?     4.91376+-0.01335       ?
raytrace       x2       1.06695+-0.03181    ?     1.07147+-0.06029       ?
richards       x2       0.09991+-0.00174          0.09932+-0.00107       
splay          x2       0.33151+-0.00462    ?     0.33435+-0.00217       ?
regexp         x2      25.48696+-0.22685         25.06877+-0.48825         might be 1.0167x faster
pdfjs          x2      37.78256+-0.20325         37.64970+-0.27023       
mandreel       x2      44.25848+-0.46610    ?    44.35944+-1.01543       ?
gbemu          x2      35.50935+-2.96924         33.92472+-0.36221         might be 1.0467x faster
closure                 0.55669+-0.01476          0.55231+-0.00250       
jquery                  7.10937+-0.06597          7.05487+-0.06496       
box2d          x2       9.95605+-0.05238    ?    10.02594+-0.11852       ?
zlib           x2     386.13934+-5.81303        378.55622+-16.10870        might be 1.0200x faster
typescript     x2     651.25728+-13.95119   ?   658.40365+-6.70744       ? might be 1.0110x slower

<geometric>             5.62398+-0.03182          5.61244+-0.03768         might be 1.0021x faster
Comment 44 WebKit Commit Bot 2015-07-31 00:45:56 PDT
Attachment 257913 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCommonData.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/PutByIdVariant.h:63:  The parameter name "structure" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:91:  The parameter name "object" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:157:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:159:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:161:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:164:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:168:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:168:  The parameter name "globalObject" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:45:  The parameter name "codeBlock" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:84:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:40:  The parameter name "codeBlock" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 22 in 65 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 45 Filip Pizlo 2015-07-31 12:16:59 PDT
Created attachment 257940 [details]
closer to done
Comment 46 Filip Pizlo 2015-07-31 12:25:09 PDT
Created attachment 257941 [details]
more fixes
Comment 47 WebKit Commit Bot 2015-07-31 12:26:54 PDT
Attachment 257941 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCommonData.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/PutByIdVariant.h:63:  The parameter name "structure" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/PropertyCondition.h:286:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:91:  The parameter name "object" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:157:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:159:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:161:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:164:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:168:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:168:  The parameter name "globalObject" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:45:  The parameter name "codeBlock" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:84:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:40:  The parameter name "codeBlock" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 23 in 69 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 48 Filip Pizlo 2015-07-31 12:32:49 PDT
Created attachment 257943 [details]
more fixes
Comment 49 WebKit Commit Bot 2015-07-31 12:36:40 PDT
Attachment 257943 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGCommonData.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/PutByIdVariant.h:63:  The parameter name "structure" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/PropertyCondition.h:286:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:91:  The parameter name "object" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:157:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:159:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:161:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:164:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:168:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:168:  The parameter name "globalObject" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:45:  The parameter name "codeBlock" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:83:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubInfo.cpp:84:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.h:40:  The parameter name "codeBlock" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 23 in 69 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 50 Filip Pizlo 2015-07-31 14:23:28 PDT
Created attachment 257960 [details]
fix debug tests
Comment 51 WebKit Commit Bot 2015-07-31 14:26:29 PDT
Attachment 257960 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PropertyCondition.h:286:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 10 in 70 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 52 Geoffrey Garen 2015-07-31 14:44:20 PDT
Comment on attachment 257943 [details]
more fixes

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

I got halfway.

> Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.cpp:-43
> -    if (isOnList())
> -        remove();

Why don't we need this anymore? Who will remove us from the list?

> Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
> +    // The presence of a condition set means that this is a prototype load.
> +    const ObjectPropertyConditionSet& conditionSet() const { return m_conditionSet; }

I guess you mean if the condition set is not empty? It is always present, since it is a reference.

> Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.cpp:63
> +bool ObjectPropertyConditionSet::hasOneSlotBaseCondition() const

Shouldn't this be called "hasOnePresenceCondition"? What did you mean by "slot base" here?

> Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.cpp:68
> +ObjectPropertyCondition ObjectPropertyConditionSet::slotBaseCondition() const

Same here.

> Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:42
> +// Empty: There are no special conditions that need to be met.
> +// Invalid: The heap access is never valid.
> +// Non-empty: There are some ObjectPropertyConditions that need to be valid.

Empty: The heap access is always valid.
Invalid: The heap access is never valid.
Non-empty: The heap access is valid if all the ObjectPropertyConditions in the set are valid.

> Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:58
> +    static ObjectPropertyConditionSet nonEmpty(const Vector<ObjectPropertyCondition>& vector)
> +    {
> +        if (vector.isEmpty())
> +            return ObjectPropertyConditionSet();

It's kind of weird that nonEmpty() can return an empty set. I would either assert here or call this valid() or create().

> Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.h:94
> +    ObjectPropertyConditionSet m_conditionSet; // FIXME what about barriers?

Can has fix for this? Seems like somebody needs to mark this condition set since it points to some JSObjects.

> Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.cpp:66
>  bool PutByIdAccess::visitWeak(RepatchBuffer& repatchBuffer) const

Do we need to mark m_conditionSet here, since it points to JSObjects?
Comment 53 Filip Pizlo 2015-07-31 14:51:21 PDT
(In reply to comment #52)
> Comment on attachment 257943 [details]
> more fixes
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=257943&action=review
> 
> I got halfway.
> 
> > Source/JavaScriptCore/bytecode/CodeBlockJettisoningWatchpoint.cpp:-43
> > -    if (isOnList())
> > -        remove();
> 
> Why don't we need this anymore? Who will remove us from the list?

The WatchpointSet will remove us before calling fire().  That change already landed in trunk.

> 
> > Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
> > +    // The presence of a condition set means that this is a prototype load.
> > +    const ObjectPropertyConditionSet& conditionSet() const { return m_conditionSet; }
> 
> I guess you mean if the condition set is not empty? It is always present,
> since it is a reference.

Right.  Non-empty.

> 
> > Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.cpp:63
> > +bool ObjectPropertyConditionSet::hasOneSlotBaseCondition() const
> 
> Shouldn't this be called "hasOnePresenceCondition"? What did you mean by
> "slot base" here?

The convention for condition sets used by prototype accesses is that the "slot base" of the prototype access is the one and only presence in the set.  So, "slot base" and "presence" mean the same thing here.  I believe that "slot base" is accepted lingo within our inline caches (PropertySlot::slotBase() for example)

> 
> > Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.cpp:68
> > +ObjectPropertyCondition ObjectPropertyConditionSet::slotBaseCondition() const
> 
> Same here.
> 
> > Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:42
> > +// Empty: There are no special conditions that need to be met.
> > +// Invalid: The heap access is never valid.
> > +// Non-empty: There are some ObjectPropertyConditions that need to be valid.
> 
> Empty: The heap access is always valid.
> Invalid: The heap access is never valid.
> Non-empty: The heap access is valid if all the ObjectPropertyConditions in
> the set are valid.

OK.

> 
> > Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.h:58
> > +    static ObjectPropertyConditionSet nonEmpty(const Vector<ObjectPropertyCondition>& vector)
> > +    {
> > +        if (vector.isEmpty())
> > +            return ObjectPropertyConditionSet();
> 
> It's kind of weird that nonEmpty() can return an empty set. I would either
> assert here or call this valid() or create().

I'll call it create().

> 
> > Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.h:94
> > +    ObjectPropertyConditionSet m_conditionSet; // FIXME what about barriers?
> 
> Can has fix for this? Seems like somebody needs to mark this condition set
> since it points to some JSObjects.

Ooops, should have removed the FIXME.  PropertyCondition, ObjectPropertyCondition, and ObjectPropertyConditionSet do barriers properly and support weak semantics through isStillLive() and areStillLive().  When creating a condition in Repatch.cpp, we use methods like PropertyCondition::presence(vm, owner, ...) which triggers a barrier on owner.  In the case of PolymorphicGetByIdList, it has a visitWeak method that does:

    if (!m_conditionSet.areStillLive())
        return false;

> 
> > Source/JavaScriptCore/bytecode/PolymorphicPutByIdList.cpp:66
> >  bool PutByIdAccess::visitWeak(RepatchBuffer& repatchBuffer) const
> 
> Do we need to mark m_conditionSet here, since it points to JSObjects?

No, because:

    if (!m_conditionSet.areStillLive())
        return false;

That's right at the top of PutByIdAccess::visitWeak().  It will blow away the inline cache if any of the objects in the condition set are dead.
Comment 54 Filip Pizlo 2015-07-31 23:12:20 PDT
Created attachment 257998 [details]
revised patch

Incorporates Geoff's feedback so far.
Comment 55 WebKit Commit Bot 2015-07-31 23:16:13 PDT
Attachment 257998 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PropertyCondition.h:286:  The parameter name "value" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:53:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:54:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/PolymorphicGetByIdList.cpp:43:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGAdaptiveStructureWatchpoint.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 10 in 71 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 56 Geoffrey Garen 2015-08-03 14:45:16 PDT
Comment on attachment 257998 [details]
revised patch

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

r=me

> Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
> +    // A non-empty condition set means that this is a prototype load.
> +    const ObjectPropertyConditionSet& conditionSet() const { return m_conditionSet; }

What guarantees that GetByIdVariant will not use a condition set to test for a constant (in a non-prototype load)?

> Source/JavaScriptCore/bytecode/ObjectPropertyCondition.h:147
> +        return WTF::PtrHash<JSObject*>::hash(m_object) + m_condition.hash();

I think that XOR is a better way to mix bits in a hash than ADD, since ADD will tend to make low bits zero. Another option is to WTF::pairIntHash the two hash codes.

> Source/JavaScriptCore/bytecode/PropertyCondition.cpp:204
> +    switch (m_kind) {
> +    case Presence:
> +    case Absence:
> +    case Equivalence:
> +        return structure->needImpurePropertyWatchpoint();
> +    default:
> +        return false;
> +    }

I think what you're saying here is that objects that have impure getOwnPropertySlot implementations may start returning new properties and may stop returning old properties but must not start returning new setters (without a change in structure). Is that right?

As an empirical matter, I believe this observation is true.

Still, I think it's unnecessarily risky to turn this observation into an API. Is it a clear speedup to do this? "My property accesses are impure" is a pretty strong warning. I would forgive a programmer for not knowing that the warning did not cover (absence of) setters.

> Source/JavaScriptCore/bytecode/PropertyCondition.cpp:214
> +    // Currently we assume that an impure property can cause a property to appear, and can also
> +    // "shadow" an existing JS property on the same object. Hence it affects both presence and
> +    // absence. It doesn't affect AbsenceOfSetter because impure properties aren't ever setters.

Aha, yeah, I guess you say that here.

I think we should either remove this behavior or, if it's a necessary speedup, document it in JSTypeInfo.h next to the definition of HasImpureGetOwnPropertySlot.

> Source/JavaScriptCore/bytecode/PropertyCondition.h:179
> +        unsigned result = WTF::PtrHash<UniquedStringImpl*>::hash(m_uid) + static_cast<unsigned>(m_kind);
> +        switch (m_kind) {
> +        case Presence:
> +            result += u.presence.offset;
> +            result += u.presence.attributes;
> +            break;
> +        case Absence:
> +        case AbsenceOfSetter:
> +            result += WTF::PtrHash<JSObject*>::hash(u.absence.prototype);
> +            break;
> +        case Equivalence:
> +            result += EncodedJSValueHash::hash(u.equivalence.value);
> +            break;
> +        }

I think that XOR is a better way to mix bits in a hash than ADD, since ADD will tend to make low bits zero. Another option is to WTF::pairIntHash the two hash codes.
Comment 57 Filip Pizlo 2015-08-03 15:08:17 PDT
(In reply to comment #56)
> Comment on attachment 257998 [details]
> revised patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=257998&action=review
> 
> r=me
> 
> > Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
> > +    // A non-empty condition set means that this is a prototype load.
> > +    const ObjectPropertyConditionSet& conditionSet() const { return m_conditionSet; }
> 
> What guarantees that GetByIdVariant will not use a condition set to test for
> a constant (in a non-prototype load)?

Just the fact that Repatch does not such optimization.  We effectively assert as much because of our use of slotBaseCondition() all over the place.

> 
> > Source/JavaScriptCore/bytecode/ObjectPropertyCondition.h:147
> > +        return WTF::PtrHash<JSObject*>::hash(m_object) + m_condition.hash();
> 
> I think that XOR is a better way to mix bits in a hash than ADD, since ADD
> will tend to make low bits zero. 

Really?  The effect on the lowest bit of ADD is identical to XOR:

0 + 0 = 0    0 ^ 0 = 0
0 + 1 = 1    0 ^ 1 = 1
1 + 0 = 1    1 ^ 0 = 1
1 + 1 = 0    1 ^ 1 = 0

> Another option is to WTF::pairIntHash the
> two hash codes.

I changed it to XOR.  I don't currently have evidence that this hashtable needs to be very optimized.

> 
> > Source/JavaScriptCore/bytecode/PropertyCondition.cpp:204
> > +    switch (m_kind) {
> > +    case Presence:
> > +    case Absence:
> > +    case Equivalence:
> > +        return structure->needImpurePropertyWatchpoint();
> > +    default:
> > +        return false;
> > +    }
> 
> I think what you're saying here is that objects that have impure
> getOwnPropertySlot implementations may start returning new properties and
> may stop returning old properties but must not start returning new setters
> (without a change in structure). Is that right?

Yes.

> 
> As an empirical matter, I believe this observation is true.
> 
> Still, I think it's unnecessarily risky to turn this observation into an
> API. Is it a clear speedup to do this? "My property accesses are impure" is
> a pretty strong warning. I would forgive a programmer for not knowing that
> the warning did not cover (absence of) setters.

This code is just preserving what our old prototype chain normalization did for put_by_id transitions.

AbsenceOfSetter comes into play for the prototype chain during a put_by_id transition.  A getOwnPropertySlot on a prototype cannot intercept the put_by_id - only an actual JS setter can.  Hence why AbsenceOfSetter behaves this way.  More on this below...

> 
> > Source/JavaScriptCore/bytecode/PropertyCondition.cpp:214
> > +    // Currently we assume that an impure property can cause a property to appear, and can also
> > +    // "shadow" an existing JS property on the same object. Hence it affects both presence and
> > +    // absence. It doesn't affect AbsenceOfSetter because impure properties aren't ever setters.
> 
> Aha, yeah, I guess you say that here.
> 
> I think we should either remove this behavior or, if it's a necessary
> speedup, document it in JSTypeInfo.h next to the definition of
> HasImpureGetOwnPropertySlot.

This isn't new behavior, we've always done it this way.  In a way, I'm just preserving what we used to do for put_by_id transitions.

But it's more than that.  The getOwnPropertySlot API cannot cause a setter to appear, because the way to add a property to an object is you do JSValue::put(), and that method doesn't call getOwnPropertySlot - it directly consults the structures of the prototype chain to find setters.  Hence, there is nothing you could do in getOwnPropertySlot to cause a setter to appear on a prototype.  Therefore, this has nothing to do with HasImpureGetOwnPropertySlot because no matter how impure you made your getOwnPropertySlot, it still wouldn't affect setters.

I realize that this is a somewhat surprising behavior of our system, but it doesn't have anything to do with our patch, and it also doesn't have anything to do with the HasImpureGetOwnPropertySlot flag.

> 
> > Source/JavaScriptCore/bytecode/PropertyCondition.h:179
> > +        unsigned result = WTF::PtrHash<UniquedStringImpl*>::hash(m_uid) + static_cast<unsigned>(m_kind);
> > +        switch (m_kind) {
> > +        case Presence:
> > +            result += u.presence.offset;
> > +            result += u.presence.attributes;
> > +            break;
> > +        case Absence:
> > +        case AbsenceOfSetter:
> > +            result += WTF::PtrHash<JSObject*>::hash(u.absence.prototype);
> > +            break;
> > +        case Equivalence:
> > +            result += EncodedJSValueHash::hash(u.equivalence.value);
> > +            break;
> > +        }
> 
> I think that XOR is a better way to mix bits in a hash than ADD, since ADD
> will tend to make low bits zero. Another option is to WTF::pairIntHash the
> two hash codes.

Changed to XOR, though I'm curious what you mean by the low bits becoming zero.
Comment 58 Oliver Hunt 2015-08-03 15:19:19 PDT
(In reply to comment #57)
> (In reply to comment #56)
> > Comment on attachment 257998 [details]
> > revised patch
> > 
> > View in context:
> > https://bugs.webkit.org/attachment.cgi?id=257998&action=review
> > 
> > r=me
> > 
> > > Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
> > > +    // A non-empty condition set means that this is a prototype load.
> > > +    const ObjectPropertyConditionSet& conditionSet() const { return m_conditionSet; }
> > 
> > What guarantees that GetByIdVariant will not use a condition set to test for
> > a constant (in a non-prototype load)?
> 
> Just the fact that Repatch does not such optimization.  We effectively
> assert as much because of our use of slotBaseCondition() all over the place.
> 
> > 
> > > Source/JavaScriptCore/bytecode/ObjectPropertyCondition.h:147
> > > +        return WTF::PtrHash<JSObject*>::hash(m_object) + m_condition.hash();
> > 
> > I think that XOR is a better way to mix bits in a hash than ADD, since ADD
> > will tend to make low bits zero. 
> 
> Really?  The effect on the lowest bit of ADD is identical to XOR:
> 
> 0 + 0 = 0    0 ^ 0 = 0
> 0 + 1 = 1    0 ^ 1 = 1
> 1 + 0 = 1    1 ^ 0 = 1
> 1 + 1 = 0    1 ^ 1 = 0
> 
Presumably talking about more than the last bit? Last n bits become biased towards containing a 0 bit (with n > 1)
Comment 59 Oliver Hunt 2015-08-03 15:20:22 PDT
(In reply to comment #58)
> (In reply to comment #57)
> > (In reply to comment #56)
> > > Comment on attachment 257998 [details]
> > > revised patch
> > > 
> > > View in context:
> > > https://bugs.webkit.org/attachment.cgi?id=257998&action=review
> > > 
> > > r=me
> > > 
> > > > Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
> > > > +    // A non-empty condition set means that this is a prototype load.
> > > > +    const ObjectPropertyConditionSet& conditionSet() const { return m_conditionSet; }
> > > 
> > > What guarantees that GetByIdVariant will not use a condition set to test for
> > > a constant (in a non-prototype load)?
> > 
> > Just the fact that Repatch does not such optimization.  We effectively
> > assert as much because of our use of slotBaseCondition() all over the place.
> > 
> > > 
> > > > Source/JavaScriptCore/bytecode/ObjectPropertyCondition.h:147
> > > > +        return WTF::PtrHash<JSObject*>::hash(m_object) + m_condition.hash();
> > > 
> > > I think that XOR is a better way to mix bits in a hash than ADD, since ADD
> > > will tend to make low bits zero. 
> > 
> > Really?  The effect on the lowest bit of ADD is identical to XOR:
> > 
> > 0 + 0 = 0    0 ^ 0 = 0
> > 0 + 1 = 1    0 ^ 1 = 1
> > 1 + 0 = 1    1 ^ 0 = 1
> > 1 + 1 = 0    1 ^ 1 = 0
> > 
> Presumably talking about more than the last bit? Last n bits become biased
> towards containing a 0 bit (with n > 1)


Ignore me, it's for the best, i was thinking in terms of actual addition (too much manual adder implementation lately)
Comment 60 Filip Pizlo 2015-08-03 16:14:56 PDT
Landed in http://trac.webkit.org/changeset/187780
Comment 62 Geoffrey Garen 2015-08-03 17:19:34 PDT
> > As an empirical matter, I believe this observation is true.
> > 
> > Still, I think it's unnecessarily risky to turn this observation into an
> > API. Is it a clear speedup to do this? "My property accesses are impure" is
> > a pretty strong warning. I would forgive a programmer for not knowing that
> > the warning did not cover (absence of) setters.
> 
> This code is just preserving what our old prototype chain normalization did
> for put_by_id transitions.

Oops. I forgot that setters are only relevant on the put path.
Comment 63 Filip Pizlo 2015-08-03 18:15:18 PDT
(In reply to comment #61)
> Windows build fix: https://trac.webkit.org/changeset/187783
> 
> Also, looks like this broke 32-bit:
> https://build.webkit.org/builders/Apple%20Yosemite%2032-
> bit%20JSC%20%28BuildAndTest%29/builds/5353/steps/webkit-32bit-jsc-test/logs/
> stdio

Oh man, I didn't see that in my local 32-bit testing.  Probably because it's a nasty case of uninitialized memory.  Fixed here: http://trac.webkit.org/changeset/187794
Comment 64 Simon Fraser (smfr) 2015-08-03 20:44:41 PDT
12 JSC tests are failing on Windows now:
https://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/67105/steps/jscore-test/logs/stdio

and canvas tests are crashing (not sure if that's related).
Comment 65 Filip Pizlo 2015-08-04 00:16:17 PDT
(In reply to comment #64)
> 12 JSC tests are failing on Windows now:
> https://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/
> builds/67105/steps/jscore-test/logs/stdio
> 
> and canvas tests are crashing (not sure if that's related).

The Windows test regressions are gone after http://trac.webkit.org/changeset/187794.
Comment 66 Filip Pizlo 2015-08-04 00:21:22 PDT
(In reply to comment #64)
> 12 JSC tests are failing on Windows now:
> https://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/
> builds/67105/steps/jscore-test/logs/stdio
> 
> and canvas tests are crashing (not sure if that's related).

I wasn't able to find the canvas failures.  Do you have a link?
Comment 67 Filip Pizlo 2015-08-04 00:37:14 PDT
(In reply to comment #59)
> (In reply to comment #58)
> > (In reply to comment #57)
> > > (In reply to comment #56)
> > > > Comment on attachment 257998 [details]
> > > > revised patch
> > > > 
> > > > View in context:
> > > > https://bugs.webkit.org/attachment.cgi?id=257998&action=review
> > > > 
> > > > r=me
> > > > 
> > > > > Source/JavaScriptCore/bytecode/GetByIdVariant.h:59
> > > > > +    // A non-empty condition set means that this is a prototype load.
> > > > > +    const ObjectPropertyConditionSet& conditionSet() const { return m_conditionSet; }
> > > > 
> > > > What guarantees that GetByIdVariant will not use a condition set to test for
> > > > a constant (in a non-prototype load)?
> > > 
> > > Just the fact that Repatch does not such optimization.  We effectively
> > > assert as much because of our use of slotBaseCondition() all over the place.
> > > 
> > > > 
> > > > > Source/JavaScriptCore/bytecode/ObjectPropertyCondition.h:147
> > > > > +        return WTF::PtrHash<JSObject*>::hash(m_object) + m_condition.hash();
> > > > 
> > > > I think that XOR is a better way to mix bits in a hash than ADD, since ADD
> > > > will tend to make low bits zero. 
> > > 
> > > Really?  The effect on the lowest bit of ADD is identical to XOR:
> > > 
> > > 0 + 0 = 0    0 ^ 0 = 0
> > > 0 + 1 = 1    0 ^ 1 = 1
> > > 1 + 0 = 1    1 ^ 0 = 1
> > > 1 + 1 = 0    1 ^ 1 = 0
> > > 
> > Presumably talking about more than the last bit? Last n bits become biased
> > towards containing a 0 bit (with n > 1)
> 
> 
> Ignore me, it's for the best, i was thinking in terms of actual addition
> (too much manual adder implementation lately)

Can you explain, for my edification?

I often use + instead of ^ when constructing a hash function that is a combination of other hash functions, under the assumption that it just doesn't matter.  At the instruction set level, + is every-so-slightly cheaper since you can do a three-operand + on x86 but ^ only comes in two-operand forms.  Heck, you can even do a four-operand + on x86: a = b + c + d so long as d is an immediate.  If it's the case that ^ is fundamentally better, I'd like to know!

Not that it matters in practice for a data structure such as this one.  We already have a bunch of data structures like this that combine the hash codes of the various fields using something naive like +, and we don't really have good evidence that improving those hash functions would improve the bottom line.
Comment 68 Geoffrey Garen 2015-08-04 10:56:25 PDT
> Can you explain, for my edification?

My thinking was simply that XOR has uniform distribution over all the bits, while ADD biases toward the top of the number line due to carry, therefore reducing uniformity. I think this might be extra true in the Presence hash, which adds raw integers (and not integer hashes). I think this might also be extra important in small tables, since we mask off the high bits of the hash code, making bias in the low bits more harmful.

For example, if it were common for attributes to be 0b11, the ADD hash would collide 100% of the time in a table with capacity four.

A bit of googling suggests that WTF::pairIntHash, which uses a multiplication method, best avoids the pitfalls of both ADD and XOR. But you have to pay for the multiplication.

I haven't done a lot of research on this. Perhaps I am mistaken.