WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
146929
DFG should have adaptive structure watchpoints
https://bugs.webkit.org/show_bug.cgi?id=146929
Summary
DFG should have adaptive structure watchpoints
Filip Pizlo
Reported
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).
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
Show Obsolete
(36)
View All
Add attachment
proposed patch, testcase, etc.
Filip Pizlo
Comment 1
2015-07-13 23:28:58 PDT
Created
attachment 256760
[details]
work in progress
Filip Pizlo
Comment 2
2015-07-14 13:23:41 PDT
Created
attachment 256789
[details]
it is written Of course it fails to build.
WebKit Commit Bot
Comment 3
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.
Filip Pizlo
Comment 4
2015-07-15 16:04:53 PDT
Created
attachment 256875
[details]
start of a better approach
Filip Pizlo
Comment 5
2015-07-15 16:20:09 PDT
Created
attachment 256876
[details]
a bit more
Filip Pizlo
Comment 6
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.
Filip Pizlo
Comment 7
2015-07-15 20:16:19 PDT
Created
attachment 256889
[details]
more things
Filip Pizlo
Comment 8
2015-07-15 21:28:47 PDT
Created
attachment 256891
[details]
more carnage
Filip Pizlo
Comment 9
2015-07-16 00:47:39 PDT
Created
attachment 256894
[details]
moar
Filip Pizlo
Comment 10
2015-07-16 13:37:06 PDT
Created
attachment 256919
[details]
some more progress
Filip Pizlo
Comment 11
2015-07-16 19:54:33 PDT
Created
attachment 256952
[details]
this isn't going to be a tiny incremental change
Filip Pizlo
Comment 12
2015-07-17 23:33:57 PDT
Created
attachment 257024
[details]
a bit more
Filip Pizlo
Comment 13
2015-07-18 13:40:03 PDT
Created
attachment 257031
[details]
a little more
Filip Pizlo
Comment 14
2015-07-18 21:02:51 PDT
Created
attachment 257048
[details]
more things
Filip Pizlo
Comment 15
2015-07-19 16:14:07 PDT
Created
attachment 257068
[details]
slowly figuring out the best way to handle conditions in the DFG frontend
WebKit Commit Bot
Comment 16
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.
Filip Pizlo
Comment 17
2015-07-23 14:10:41 PDT
Created
attachment 257376
[details]
a little more
Filip Pizlo
Comment 18
2015-07-23 15:43:05 PDT
Created
attachment 257395
[details]
so small patch
Filip Pizlo
Comment 19
2015-07-23 19:34:09 PDT
Created
attachment 257422
[details]
some tweaking
Filip Pizlo
Comment 20
2015-07-23 21:27:47 PDT
Created
attachment 257432
[details]
more I've gotten closer to figuring out how to make MultiGetByOffset work.
Filip Pizlo
Comment 21
2015-07-24 13:13:38 PDT
Created
attachment 257472
[details]
starting to look like a complete picture
Filip Pizlo
Comment 22
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.
Filip Pizlo
Comment 23
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.
Filip Pizlo
Comment 24
2015-07-27 22:56:37 PDT
Created
attachment 257635
[details]
even more
Filip Pizlo
Comment 25
2015-07-28 15:30:08 PDT
Created
attachment 257694
[details]
OMG it compiles
Filip Pizlo
Comment 26
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; }
WebKit Commit Bot
Comment 27
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.
Filip Pizlo
Comment 28
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.
Build Bot
Comment 29
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.
Build Bot
Comment 30
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
Build Bot
Comment 31
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.
Build Bot
Comment 32
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
Filip Pizlo
Comment 33
2015-07-29 14:26:09 PDT
Created
attachment 257768
[details]
passing more tests
Filip Pizlo
Comment 34
2015-07-29 15:37:10 PDT
Created
attachment 257778
[details]
fix absence condition validation And remove more dead code.
Filip Pizlo
Comment 35
2015-07-29 16:15:53 PDT
Created
attachment 257781
[details]
passing so many tests
Filip Pizlo
Comment 36
2015-07-29 21:30:25 PDT
Created
attachment 257812
[details]
fixed more bugs
Filip Pizlo
Comment 37
2015-07-30 14:07:56 PDT
Created
attachment 257851
[details]
passing JSC tests
Filip Pizlo
Comment 38
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
Filip Pizlo
Comment 39
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".
Filip Pizlo
Comment 40
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
Filip Pizlo
Comment 41
2015-07-30 23:03:03 PDT
Created
attachment 257903
[details]
more improvements
Filip Pizlo
Comment 42
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
Filip Pizlo
Comment 43
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
WebKit Commit Bot
Comment 44
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.
Filip Pizlo
Comment 45
2015-07-31 12:16:59 PDT
Created
attachment 257940
[details]
closer to done
Filip Pizlo
Comment 46
2015-07-31 12:25:09 PDT
Created
attachment 257941
[details]
more fixes
WebKit Commit Bot
Comment 47
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.
Filip Pizlo
Comment 48
2015-07-31 12:32:49 PDT
Created
attachment 257943
[details]
more fixes
WebKit Commit Bot
Comment 49
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.
Filip Pizlo
Comment 50
2015-07-31 14:23:28 PDT
Created
attachment 257960
[details]
fix debug tests
WebKit Commit Bot
Comment 51
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.
Geoffrey Garen
Comment 52
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?
Filip Pizlo
Comment 53
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.
Filip Pizlo
Comment 54
2015-07-31 23:12:20 PDT
Created
attachment 257998
[details]
revised patch Incorporates Geoff's feedback so far.
WebKit Commit Bot
Comment 55
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.
Geoffrey Garen
Comment 56
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.
Filip Pizlo
Comment 57
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.
Oliver Hunt
Comment 58
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)
Oliver Hunt
Comment 59
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)
Filip Pizlo
Comment 60
2015-08-03 16:14:56 PDT
Landed in
http://trac.webkit.org/changeset/187780
Alexey Proskuryakov
Comment 61
2015-08-03 17:14:41 PDT
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
Geoffrey Garen
Comment 62
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.
Filip Pizlo
Comment 63
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
Simon Fraser (smfr)
Comment 64
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).
Filip Pizlo
Comment 65
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
.
Filip Pizlo
Comment 66
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?
Filip Pizlo
Comment 67
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.
Geoffrey Garen
Comment 68
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.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug