Summary: | Support compiling catch in the DFG | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | Saam Barati <saam> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Component: | JavaScriptCore | Assignee: | Saam Barati <saam> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Status: | RESOLVED FIXED | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Severity: | Normal | CC: | benjamin, buildbot, commit-queue, fpizlo, ggaren, gskachkov, jfbastien, keith_miller, mark.lam, msaboff, ticaiolima, webkit-bug-importer, ysuzuki | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Priority: | P2 | Keywords: | InRadar | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Version: | WebKit Nightly Build | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hardware: | Unspecified | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
OS: | Unspecified | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bug Depends on: | 175604, 175973 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bug Blocks: | 175397, 175413, 175841, 175842, 175396 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Attachments: |
|
Description
Saam Barati
2017-07-17 10:56:41 PDT
Created attachment 316464 [details]
it begins
Created attachment 316466 [details]
WIP
A tad bit more. I think the value profiling is working. I'm still not sure the way I did it is exactly what I want, but it's good enough to start implementing things in the DFG/FTL.
Created attachment 316517 [details]
WIP
Created attachment 316534 [details]
WIP
Created attachment 316558 [details]
WIP
I'm contemplating how I want to do SetArgument. Right now, we'll hoist type checks up to SetArgument, so it would be invalid to have DFG IR like this:
```
#0:
SetArgument
GetLocal(type check)
...
EntrySwitch(#1, #2)
#1:
normal entry point
#2
ExtractCatchVariable(exitNotOK)
MovHint()
SetLocal()
....
```
and also hoist type checks to the root block. So I'm thinking we may want the notion of multiple primordial SetArguments, and this will allow the above program to be:
```
#0
EntrySwitch(#1, #2)
#1:
normal entry point
SetArgument()
GetLocal(type check)
....
#2
ExtractCatchVariable(exitNotOK)
MovHint()
SetLocal()
ExitOK()
SetArgument()
GetLocal(type check)
...
```
But I need to think through this a bit more. We have code in a lot of places that assume there is only one set of primordial SetArgument nodes.
(In reply to Saam Barati from comment #5) > Created attachment 316558 [details] > WIP > > I'm contemplating how I want to do SetArgument. Right now, we'll hoist type > checks up to SetArgument, so it would be invalid to have DFG IR like this: > ``` > #0: > SetArgument > GetLocal(type check) > ... > EntrySwitch(#1, #2) > > #1: > normal entry point > > #2 > ExtractCatchVariable(exitNotOK) > MovHint() > SetLocal() > .... > ``` > > and also hoist type checks to the root block. So I'm thinking we may want > the notion of multiple primordial SetArguments, and this will allow the > above program to be: > > ``` > #0 > EntrySwitch(#1, #2) > > #1: > normal entry point > SetArgument() > GetLocal(type check) > .... > > #2 > ExtractCatchVariable(exitNotOK) > MovHint() > SetLocal() > ExitOK() > SetArgument() > GetLocal(type check) > ... > ``` > > But I need to think through this a bit more. We have code in a lot of places > that assume there is only one set of primordial SetArgument nodes. I suppose another alternative is to keep only one set of primordial SetArgument nodes, but to only allow the type check hoisting to happen once we've proven we're safe to exit. Created attachment 316803 [details]
WIP
Created attachment 317002 [details]
WIP
Some more.
To get around the issue above, I think the plan is to introduce the concept of different entrypoints abstractly in the DFG. So places that do graph.block(0) will often just walk a vector of blocks that are the entrypoints. Then we'll OSR enter at these various entrypoints for the DFG.
When converting to SSA, we'll move back to one true root block, and have that block have an EntrySwitch.
Created attachment 317159 [details]
WIP
I'm starting to think this can be made two patches: 1. OSR enter into DFG 2. OSR enter into FTL Created attachment 317177 [details]
WIP
Created attachment 317186 [details]
WIP
I think I'm really close to actually starting to run some code.
Created attachment 317190 [details]
WIP
Unsurprisingly, it crashes running:
```
function f(i) { if (i) throw "foo"; }
noInline(f);
function foo(i) {
let x = 20;
try {
f(i);
} catch(e) {
x = 30;
}
print(x);
}
noInline(foo);
for (let i = 0; i < 1000; ++i)
foo(!!(i%2));
```
Created attachment 317196 [details]
WIP
Ok, it now ran the above program!
Created attachment 317204 [details]
WIP
Created attachment 317363 [details]
WIP
Created attachment 317368 [details]
WIP
It runs a handful of try/catch microbenchmarks I added a while ago. It also crashes on at least one of them.
I remove Graph::m_arguments. It's now replaced with a map from Entrypoint->arguments.
Created attachment 317386 [details]
WIP
It passes all the try/catch tests I tried locally. Going to run all jsc tests and see what happens. There are still quite a few things I want to do to clean this patch up.
Created attachment 317389 [details]
WIP
More. Fixed a bug in FTL OSR entrypoint creation phase.
It passes all JSC tests. Now I need to start refining the patch. Created attachment 317393 [details]
WIP
Created attachment 317394 [details]
WIP
Created attachment 317742 [details]
WIP
rebased
Created attachment 317777 [details]
WIP
starting to clean up the patch a bit
Created attachment 317779 [details]
WIP
Created attachment 317780 [details]
WIP
Created attachment 317912 [details]
WIP
Created attachment 317942 [details]
WIP
Still need to write a CPSCFG class.
Created attachment 317945 [details]
WIP
Created attachment 318018 [details]
WIP
Starting the process of specifying:
- CPSCFG vs SSACFG
- SSADominators vs CPSDominators
- SSANaturalLoops vs CPSNaturalLoops
Created attachment 318019 [details]
WIP
still need to get it to compile
Created attachment 318023 [details]
WIP
It compiles.
Created attachment 318025 [details]
WIP
Created attachment 318078 [details]
WIP
Created attachment 318084 [details]
WIP
Created attachment 318087 [details]
WIP
Attachment 318087 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:177: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:178: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:414: Missing spaces around : [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:414: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:414: Comma should be at the beginning of the line in a member initialization list. [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:431: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:436: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:450: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:470: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGBasicBlock.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SingleRootGraph.h:26: Use #pragma once instead of #ifndef for header guard. [build/header_guard] [5]
ERROR: Source/JavaScriptCore/dfg/DFGValidate.cpp:198: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGValidate.cpp:199: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGValidate.cpp:205: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:54: Alphabetical sorting problem. [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:40: Alphabetical sorting problem. [build/include_order] [4]
Total errors found: 16 in 74 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Comment on attachment 318087 [details] WIP Attachment 318087 [details] did not pass jsc-ews (mac): Output: http://webkit-queues.webkit.org/results/4314855 New failing tests: stress/const-exception-handling.js.ftl-eager-no-cjit-b3o1 stress/lexical-let-exception-handling.js.ftl-eager-no-cjit-b3o1 stress/const-exception-handling.js.ftl-eager-no-cjit stress/lexical-let-exception-handling.js.ftl-eager-no-cjit Created attachment 318099 [details]
WIP
These test failures are real. I'm trying to debug the crash, but it's hard. I think it's a memory smasher somewhere, and it doesn't crash with ASAN enabled.
Created attachment 318107 [details]
WIP
I found the bug. It has to do with:
!!node->hasHeapPrediction implies that the origin bytecode also has a heap prediction. This is obviously not true for op_after_catch and ExtractCatchLocal.
Will fix this in next WIP.
Created attachment 318139 [details]
WIP
Created attachment 318148 [details]
WIP
We were using the CPSCFG incorrectly before because we were creating it too early. Fixed in this WIP
Created attachment 318150 [details]
WIP
rebased
Attachment 318150 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:177: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:178: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Missing spaces around : [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Comma should be at the beginning of the line in a member initialization list. [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGBasicBlock.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SingleRootGraph.h:26: Use #pragma once instead of #ifndef for header guard. [build/header_guard] [5]
ERROR: Source/JavaScriptCore/dfg/DFGValidate.cpp:198: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGValidate.cpp:199: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGValidate.cpp:205: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:40: Alphabetical sorting problem. [build/include_order] [4]
Total errors found: 11 in 75 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Created attachment 318169 [details]
WIP
should build now
Created attachment 318173 [details]
WIP
ok, it actually builds now
Attachment 318173 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:177: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:178: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Missing spaces around : [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Comma should be at the beginning of the line in a member initialization list. [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGBasicBlock.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SingleRootGraph.h:26: Use #pragma once instead of #ifndef for header guard. [build/header_guard] [5]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:41: Alphabetical sorting problem. [build/include_order] [4]
Total errors found: 8 in 74 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Created attachment 318185 [details]
WIP
maybe 32-bit builds now
Attachment 318185 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:177: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:178: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Missing spaces around : [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Comma should be at the beginning of the line in a member initialization list. [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGBasicBlock.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SingleRootGraph.h:26: Use #pragma once instead of #ifndef for header guard. [build/header_guard] [5]
Total errors found: 7 in 74 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Created attachment 318208 [details]
WIP
I think this is just about ready for review. I want to write a few tests and a changelog.
Attachment 318208 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:177: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:178: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Missing spaces around : [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Comma should be at the beginning of the line in a member initialization list. [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGBasicBlock.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SingleRootGraph.h:26: Use #pragma once instead of #ifndef for header guard. [build/header_guard] [5]
Total errors found: 7 in 75 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Created attachment 318214 [details]
WIP
trying to get 32-bit to build
Attachment 318214 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:177: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:178: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Missing spaces around : [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Comma should be at the beginning of the line in a member initialization list. [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGBasicBlock.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SingleRootGraph.h:26: Use #pragma once instead of #ifndef for header guard. [build/header_guard] [5]
Total errors found: 7 in 75 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Created attachment 318218 [details]
WIP
Attachment 318218 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:177: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:178: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Missing spaces around : [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Comma should be at the beginning of the line in a member initialization list. [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGBasicBlock.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SingleRootGraph.h:26: Use #pragma once instead of #ifndef for header guard. [build/header_guard] [5]
Total errors found: 7 in 77 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Comment on attachment 318218 [details] WIP Attachment 318218 [details] did not pass mac-debug-ews (mac): Output: http://webkit-queues.webkit.org/results/4321573 Number of test failures exceeded the failure limit. Created attachment 318225 [details]
Archive of layout-test-results from ews115 for mac-elcapitan
The attached test failures were seen while running run-webkit-tests on the mac-debug-ews.
Bot: ews115 Port: mac-elcapitan Platform: Mac OS X 10.11.6
Comment on attachment 318218 [details] WIP Attachment 318218 [details] did not pass jsc-ews (mac): Output: http://webkit-queues.webkit.org/results/4321936 New failing tests: stress/const-loop-semantics.js.ftl-no-cjit-no-put-stack-validate stress/arrowfunction-lexical-bind-supercall-3.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-lexical-bind-newtarget.js.dfg-maximal-flush-validate-no-cjit stress/dont-unwind-past-vm-entry-frame.js.dfg-maximal-flush-validate-no-cjit mozilla-tests.yaml/ecma_3/RegExp/regress-98306.js.mozilla-ftl-eager-no-cjit-validate-phases stress/const-not-strict-mode.js.dfg-maximal-flush-validate-no-cjit stress/proxy-set-prototype-of.js.ftl-eager-no-cjit mozilla-tests.yaml/ecma_3/RegExp/regress-98306.js.mozilla-dfg-eager-no-cjit-validate-phases stress/regress-163748.js.ftl-eager-no-cjit-b3o1 microbenchmarks/v8-raytrace-with-try-catch.js.ftl-no-cjit-no-put-stack-validate stress/inferred-infinite-loop-that-uses-captured-variables.js.dfg-maximal-flush-validate-no-cjit stress/destructuring-assignment-syntax.js.dfg-eager-no-cjit-validate stress/super-method-calls-check-tdz.js.dfg-maximal-flush-validate-no-cjit stress/const-not-strict-mode.js.ftl-no-cjit-validate-sampling-profiler stress/spec-empty-flows-through-cell-checks.js.dfg-maximal-flush-validate-no-cjit stress/typedarray-access-neutered.js.dfg-maximal-flush-validate-no-cjit stress/const-not-strict-mode.js.ftl-no-cjit-no-put-stack-validate stress/eval-func-decl-in-eval-within-with-scope.js.dfg-maximal-flush-validate-no-cjit stress/custom-iterators.js.dfg-eager-no-cjit-validate stress/eval-func-decl-block-with-var-sinthesize.js.dfg-maximal-flush-validate-no-cjit stress/eval-func-decl-within-eval-without-reassign-to-let.js.dfg-maximal-flush-validate-no-cjit stress/array-species-config-array-constructor.js.dfg-maximal-flush-validate-no-cjit stress/custom-iterators.js.ftl-eager-no-cjit stress/const-loop-semantics.js.dfg-eager-no-cjit-validate microbenchmarks/richards-try-catch.js.dfg-maximal-flush-validate-no-cjit stress/proxy-get-and-set-recursion-stack-overflow.js.dfg-maximal-flush-validate-no-cjit stress/lexical-scoping-break-continue.js.dfg-maximal-flush-validate-no-cjit stress/proxy-call.js.dfg-maximal-flush-validate-no-cjit stress/async-await-syntax.js.dfg-eager-no-cjit-validate stress/infinite-loop-that-uses-captured-variables-before-throwing.js.dfg-maximal-flush-validate-no-cjit mozilla-tests.yaml/ecma_3/RegExp/regress-188206.js.mozilla-ftl-eager-no-cjit-validate-phases stress/proxy-set.js.dfg-maximal-flush-validate-no-cjit stress/SharedArrayBuffer-opt.js.dfg-maximal-flush-validate-no-cjit stress/lexical-let-not-strict-mode.js.dfg-eager-no-cjit-validate stress/proxy-property-descriptor.js.dfg-maximal-flush-validate-no-cjit stress/variable-named-eval-under-tdz.js.dfg-maximal-flush-validate-no-cjit microbenchmarks/v8-raytrace-with-try-catch.js.ftl-eager-no-cjit stress/create-subclass-structure-might-throw.js.ftl-eager-no-cjit-b3o1 microbenchmarks/fake-iterators-that-throw-when-finished.js.ftl-no-cjit-validate-sampling-profiler stress/tail-call-recognize.js.dfg-eager-no-cjit-validate stress/tail-call-recognize.js.ftl-eager-no-cjit-b3o1 stress/lexical-let-loop-semantics.js.dfg-maximal-flush-validate-no-cjit stress/async-arrow-functions-lexical-super-binding.js.ftl-eager-no-cjit-b3o1 stress/const-exception-handling.js.ftl-eager-no-cjit-b3o1 stress/builtin-function-is-construct-type-none.js.dfg-maximal-flush-validate-no-cjit stress/global-lexical-var-injection.js.dfg-maximal-flush-validate-no-cjit stress/infinite-loop-that-uses-captured-variables.js.dfg-maximal-flush-validate-no-cjit stress/tail-call-recognize.js.ftl-no-cjit-validate-sampling-profiler stress/const-not-strict-mode.js.no-cjit-validate-phases stress/regress-159779-1.js.ftl-eager-no-cjit stress/lexical-scoping-break-continue.js.ftl-eager-no-cjit-b3o1 stress/es6-default-parameters.js.dfg-maximal-flush-validate-no-cjit stress/proxy-json.js.dfg-maximal-flush-validate-no-cjit stress/template-literal-syntax.js.dfg-eager-no-cjit-validate stress/activation-sink-default-value-tdz-error.js.dfg-maximal-flush-validate-no-cjit stress/regress-163748.js.dfg-eager-no-cjit-validate microbenchmarks/raytrace-with-try-catch.js.dfg-maximal-flush-validate-no-cjit stress/delete-to-object-exception.js.dfg-maximal-flush-validate-no-cjit stress/class-syntax-tdz-in-catch.js.dfg-maximal-flush-validate-no-cjit stress/import-syntax.js.ftl-eager-no-cjit stress/async-await-reserved-word.js.dfg-eager-no-cjit-validate stress/custom-iterators.js.ftl-eager-no-cjit-b3o1 stress/lexical-scoping-break-continue.js.ftl-eager-no-cjit stress/template-literal-syntax.js.ftl-eager-no-cjit stress/class-syntax-tdz-in-eval.js.dfg-maximal-flush-validate-no-cjit stress/lexical-let-not-strict-mode.js.ftl-eager-no-cjit stress/arrowfunction-activation-sink-osrexit-default-value-tdz-error.js.dfg-maximal-flush-validate-no-cjit stress/es6-default-parameters.js.ftl-eager-no-cjit stress/tricky-infinite-loop-that-uses-captured-variables-and-creates-the-activation-outside-the-loop.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-lexical-bind-supercall-1.js.dfg-maximal-flush-validate-no-cjit stress/eval-func-decl-in-eval-within-block-with-let.js.dfg-maximal-flush-validate-no-cjit stress/symbol-toprimitive.js.dfg-maximal-flush-validate-no-cjit mozilla-tests.yaml/ecma_2/Statements/try-010.js.mozilla-dfg-eager-no-cjit-validate-phases mozilla-tests.yaml/ecma_2/Statements/try-001.js.mozilla-ftl-eager-no-cjit-validate-phases stress/async-await-basic.js.dfg-eager-no-cjit-validate stress/class-syntax-tdz.js.dfg-maximal-flush-validate-no-cjit stress/const-loop-semantics.js.ftl-eager-no-cjit stress/const-exception-handling.js.ftl-eager-no-cjit microbenchmarks/fake-iterators-that-throw-when-finished.js.ftl-eager-no-cjit microbenchmarks/fake-iterators-that-throw-when-finished.js.ftl-eager-no-cjit-b3o1 stress/proxy-revoke.js.ftl-no-cjit-validate-sampling-profiler stress/put-direct-index-broken-2.js.dfg-maximal-flush-validate-no-cjit stress/tricky-indirectly-inferred-infinite-loop-that-uses-captured-variables-and-creates-the-activation-outside-the-loop.js.dfg-maximal-flush-validate-no-cjit stress/tagged-templates-syntax.js.ftl-eager-no-cjit-b3o1 stress/class-syntax-double-constructor.js.dfg-maximal-flush-validate-no-cjit stress/proxy-has-property.js.dfg-maximal-flush-validate-no-cjit stress/typedarray-bad-getter.js.dfg-maximal-flush-validate-no-cjit stress/dfg-put-by-val-direct-with-edge-numbers.js.dfg-maximal-flush-validate-no-cjit stress/lexical-let-tdz.js.dfg-maximal-flush-validate-no-cjit stress/async-await-basic.js.ftl-eager-no-cjit-b3o1 stress/const-loop-semantics.js.ftl-no-cjit-no-inline-validate stress/import-syntax.js.dfg-eager-no-cjit-validate microbenchmarks/delta-blue-try-catch.js.dfg-maximal-flush-validate-no-cjit stress/const-not-strict-mode.js.ftl-no-cjit-no-inline-validate stress/catch-variables-under-tdz.js.dfg-eager-no-cjit-validate stress/global-lexical-variable-tdz.js.dfg-maximal-flush-validate-no-cjit stress/global-lexical-var-injection.js.ftl-no-cjit-validate-sampling-profiler stress/proxy-get-prototype-of.js.dfg-eager-no-cjit-validate stress/typedarray-functions-with-neutered.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-tdz-2.js.dfg-maximal-flush-validate-no-cjit stress/async-await-reserved-word.js.ftl-eager-no-cjit microbenchmarks/v8-raytrace-with-try-catch.js.ftl-eager-no-cjit-b3o1 stress/proxy-revoke.js.ftl-no-cjit-no-inline-validate microbenchmarks/v8-raytrace-with-try-catch.js.ftl-no-cjit-no-inline-validate stress/global-lexical-var-injection.js.ftl-eager-no-cjit stress/lexical-let-exception-handling.js.dfg-eager-no-cjit-validate stress/regress-153486.js.dfg-maximal-flush-validate-no-cjit stress/create-subclass-structure-might-throw.js.no-cjit-validate-phases stress/lexical-scoping-break-continue.js.ftl-no-cjit-validate-sampling-profiler stress/const-tdz.js.dfg-maximal-flush-validate-no-cjit stress/catch-variables-under-tdz.js.ftl-eager-no-cjit mozilla-tests.yaml/ecma_2/Statements/try-010.js.mozilla-ftl-eager-no-cjit-validate-phases stress/arrowfunction-lexical-bind-supercall-4.js.dfg-maximal-flush-validate-no-cjit microbenchmarks/v8-raytrace-with-try-catch.js.ftl-no-cjit-validate-sampling-profiler stress/tagged-template-tdz.js.dfg-maximal-flush-validate-no-cjit stress/create-subclass-structure-might-throw.js.ftl-no-cjit-validate-sampling-profiler stress/const-not-strict-mode.js.ftl-eager-no-cjit stress/es6-default-parameters.js.ftl-eager-no-cjit-b3o1 stress/activation-sink-osrexit-default-value-tdz-error.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-tdz-1.js.dfg-maximal-flush-validate-no-cjit stress/lexical-let-exception-handling.js.ftl-eager-no-cjit-b3o1 stress/tail-call-recognize.js.ftl-no-cjit-no-inline-validate stress/const-loop-semantics.js.ftl-no-cjit-validate-sampling-profiler stress/async-arrow-functions-lexical-super-binding.js.dfg-eager-no-cjit-validate stress/async-arrow-functions-lexical-super-binding.js.ftl-eager-no-cjit stress/function-constructor-reading-from-global-lexical-environment.js.dfg-maximal-flush-validate-no-cjit stress/const-loop-semantics.js.ftl-eager-no-cjit-b3o1 stress/eval-func-decl-within-eval-with-reassign-to-var.js.dfg-maximal-flush-validate-no-cjit stress/strcat-emtpy.js.dfg-maximal-flush-validate-no-cjit stress/proxy-get-prototype-of.js.ftl-eager-no-cjit stress/dont-strength-reduce-valuerep-of-doublerep.js.dfg-maximal-flush-validate-no-cjit stress/proxy-revoke.js.ftl-no-cjit-no-put-stack-validate stress/lexical-scoping-break-continue.js.ftl-no-cjit-no-inline-validate stress/super-get-by-id.js.dfg-eager-no-cjit-validate stress/tricky-infinite-loop-that-uses-captured-variables.js.dfg-maximal-flush-validate-no-cjit stress/global-lexical-var-injection.js.dfg-eager-no-cjit-validate stress/rest-parameter-is-destructuring.js.dfg-maximal-flush-validate-no-cjit stress/domjit-getter-complex-with-incorrect-object.js.dfg-maximal-flush-validate-no-cjit stress/const-not-strict-mode.js.dfg-eager-no-cjit-validate microbenchmarks/string-transcoding.js.dfg-maximal-flush-validate-no-cjit stress/tricky-inferred-infinite-loop-that-uses-captured-variables-and-creates-the-activation-outside-the-loop.js.dfg-maximal-flush-validate-no-cjit stress/destructuring-assignment-syntax.js.ftl-eager-no-cjit stress/typedarray-access-monomorphic-neutered.js.dfg-maximal-flush-validate-no-cjit stress/const-loop-semantics.js.no-cjit-validate-phases microbenchmarks/fake-iterators-that-throw-when-finished.js.ftl-no-cjit-no-inline-validate stress/infinite-loop-that-uses-captured-variables-but-they-do-not-escape.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-constructor.js.dfg-maximal-flush-validate-no-cjit stress/async-await-reserved-word.js.ftl-eager-no-cjit-b3o1 stress/create-subclass-structure-might-throw.js.dfg-eager-no-cjit-validate stress/proxy-set-prototype-of.js.dfg-eager-no-cjit-validate stress/proxy-revoke.js.dfg-maximal-flush-validate-no-cjit stress/cloned-arguments-modification.js.dfg-maximal-flush-validate-no-cjit stress/import-syntax.js.ftl-eager-no-cjit-b3o1 stress/proxy-delete.js.dfg-maximal-flush-validate-no-cjit stress/reserved-word-with-escape.js.dfg-eager-no-cjit-validate stress/async-await-syntax.js.ftl-eager-no-cjit stress/proxy-is-array.js.dfg-maximal-flush-validate-no-cjit stress/tail-call-recognize.js.no-cjit-validate-phases stress/proxy-revoke.js.ftl-eager-no-cjit stress/const-loop-semantics.js.dfg-maximal-flush-validate-no-cjit stress/array-reverse-proxy.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-lexical-bind-supercall-2.js.dfg-maximal-flush-validate-no-cjit stress/proxy-get-prototype-of.js.ftl-eager-no-cjit-b3o1 microbenchmarks/fake-iterators-that-throw-when-finished.js.no-cjit-validate-phases stress/lexical-let-exception-handling.js.ftl-eager-no-cjit stress/super-get-by-id.js.no-cjit-validate-phases stress/proxy-own-keys.js.dfg-maximal-flush-validate-no-cjit stress/operation-in-throw-error.js.dfg-maximal-flush-validate-no-cjit stress/es6-default-parameters.js.dfg-eager-no-cjit-validate stress/reserved-word-with-escape.js.ftl-eager-no-cjit stress/create-subclass-structure-might-throw.js.ftl-no-cjit-no-inline-validate stress/global-lexical-var-injection.js.ftl-eager-no-cjit-b3o1 stress/global-lexical-var-injection.js.ftl-no-cjit-no-put-stack-validate stress/template-literal-line-terminators.js.ftl-eager-no-cjit-b3o1 stress/dfg-call-class-constructor.js.dfg-maximal-flush-validate-no-cjit stress/create-subclass-structure-might-throw.js.ftl-no-cjit-no-put-stack-validate stress/async-await-mozilla.js.dfg-maximal-flush-validate-no-cjit stress/const-not-strict-mode.js.ftl-eager-no-cjit-b3o1 stress/regress-159779-2.js.ftl-eager-no-cjit stress/destructuring-assignment-syntax.js.ftl-eager-no-cjit-b3o1 stress/class-syntax-tdz-in-conditional.js.dfg-maximal-flush-validate-no-cjit mozilla-tests.yaml/ecma_2/Statements/try-001.js.mozilla-dfg-eager-no-cjit-validate-phases microbenchmarks/v8-raytrace-with-try-catch.js.no-cjit-validate-phases stress/super-get-by-id.js.dfg-maximal-flush-validate-no-cjit stress/lexical-let-not-strict-mode.js.ftl-eager-no-cjit-b3o1 mozilla-tests.yaml/ecma_3/RegExp/regress-188206.js.mozilla-dfg-eager-no-cjit-validate-phases stress/reflect-construct.js.dfg-maximal-flush-validate-no-cjit stress/class-syntax-no-tdz-in-catch.js.dfg-maximal-flush-validate-no-cjit stress/super-property-access-tdz.js.dfg-maximal-flush-validate-no-cjit stress/string-prototype-methods-endsWith-startsWith-includes-correctness.js.dfg-maximal-flush-validate-no-cjit stress/class-syntax-tdz-in-loop.js.dfg-maximal-flush-validate-no-cjit stress/eval-func-decl-in-global-of-eval.js.dfg-maximal-flush-validate-no-cjit stress/class-derived-from-null.js.dfg-maximal-flush-validate-no-cjit stress/super-get-by-id.js.ftl-no-cjit-no-put-stack-validate microbenchmarks/v8-raytrace-with-try-catch.js.dfg-eager-no-cjit-validate stress/reflect-set-proxy-set.js.dfg-maximal-flush-validate-no-cjit stress/tail-call-recognize.js.ftl-eager-no-cjit stress/global-lexical-var-injection.js.ftl-no-cjit-no-inline-validate stress/async-await-basic.js.ftl-eager-no-cjit stress/dfg-exception-try-catch-in-constructor-with-inlined-throw.js.dfg-maximal-flush-validate-no-cjit stress/tail-call-recognize.js.ftl-no-cjit-no-put-stack-validate stress/proxy-revoke.js.no-cjit-validate-phases stress/eval-func-decl-block-with-var-and-remove.js.dfg-maximal-flush-validate-no-cjit stress/template-literal-line-terminators.js.dfg-eager-no-cjit-validate stress/catch-variables-under-tdz.js.ftl-eager-no-cjit-b3o1 stress/global-lexical-var-injection.js.no-cjit-validate-phases stress/global-lexical-redefine-const.js.dfg-maximal-flush-validate-no-cjit stress/async-await-syntax.js.ftl-eager-no-cjit-b3o1 stress/lexical-scoping-break-continue.js.dfg-eager-no-cjit-validate stress/typedarray-configure-index.js.dfg-maximal-flush-validate-no-cjit stress/lexical-let-not-strict-mode.js.dfg-maximal-flush-validate-no-cjit stress/super-get-by-id.js.ftl-no-cjit-validate-sampling-profiler microbenchmarks/fake-iterators-that-throw-when-finished.js.dfg-eager-no-cjit-validate slowMicrobenchmarks.yaml/slowMicrobenchmarks/v8-raytrace-with-try-catch-high-frequency-throws.js.no-cjit stress/proxy-revoke.js.dfg-eager-no-cjit-validate stress/const-exception-handling.js.dfg-eager-no-cjit-validate stress/rest-parameter-and-default-arguments.js.dfg-maximal-flush-validate-no-cjit microbenchmarks/v8-raytrace-with-try-catch.js.dfg-maximal-flush-validate-no-cjit stress/template-literal-syntax.js.ftl-eager-no-cjit-b3o1 stress/tagged-templates-syntax.js.ftl-eager-no-cjit stress/lexical-scoping-break-continue.js.no-cjit-validate-phases stress/create-subclass-structure-might-throw.js.dfg-maximal-flush-validate-no-cjit stress/domjit-getter-type-check.js.dfg-maximal-flush-validate-no-cjit stress/proxy-set-prototype-of.js.ftl-eager-no-cjit-b3o1 stress/const-semantics.js.dfg-maximal-flush-validate-no-cjit stress/with.js.dfg-maximal-flush-validate-no-cjit stress/create-subclass-structure-might-throw.js.ftl-eager-no-cjit stress/proxy-revoke.js.ftl-eager-no-cjit-b3o1 stress/es6-for-of-loop-exception.js.dfg-maximal-flush-validate-no-cjit stress/sloppy-mode-function-hoisting.js.dfg-maximal-flush-validate-no-cjit stress/super-get-by-id.js.ftl-no-cjit-no-inline-validate stress/tail-call-recognize.js.dfg-maximal-flush-validate-no-cjit microbenchmarks/fake-iterators-that-throw-when-finished.js.dfg-maximal-flush-validate-no-cjit microbenchmarks/fake-iterators-that-throw-when-finished.js.ftl-no-cjit-no-put-stack-validate stress/template-literal-line-terminators.js.ftl-eager-no-cjit stress/lexical-scoping-break-continue.js.ftl-no-cjit-no-put-stack-validate stress/tagged-templates-syntax.js.dfg-eager-no-cjit-validate stress/reserved-word-with-escape.js.ftl-eager-no-cjit-b3o1 stress/class-syntax-super-in-eval.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-tdz-4.js.dfg-maximal-flush-validate-no-cjit stress/regress-163748.js.ftl-eager-no-cjit Comment on attachment 318218 [details] WIP Attachment 318218 [details] did not pass jsc-ews (mac): Output: http://webkit-queues.webkit.org/results/4322567 New failing tests: stress/const-loop-semantics.js.ftl-no-cjit-no-put-stack-validate stress/arrowfunction-lexical-bind-supercall-3.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-lexical-bind-newtarget.js.dfg-maximal-flush-validate-no-cjit stress/dont-unwind-past-vm-entry-frame.js.dfg-maximal-flush-validate-no-cjit mozilla-tests.yaml/ecma_3/RegExp/regress-98306.js.mozilla-ftl-eager-no-cjit-validate-phases stress/const-not-strict-mode.js.dfg-maximal-flush-validate-no-cjit stress/proxy-set-prototype-of.js.ftl-eager-no-cjit mozilla-tests.yaml/ecma_3/RegExp/regress-98306.js.mozilla-dfg-eager-no-cjit-validate-phases stress/regress-163748.js.ftl-eager-no-cjit-b3o1 microbenchmarks/v8-raytrace-with-try-catch.js.ftl-no-cjit-no-put-stack-validate stress/inferred-infinite-loop-that-uses-captured-variables.js.dfg-maximal-flush-validate-no-cjit stress/destructuring-assignment-syntax.js.dfg-eager-no-cjit-validate stress/super-method-calls-check-tdz.js.dfg-maximal-flush-validate-no-cjit stress/const-not-strict-mode.js.ftl-no-cjit-validate-sampling-profiler stress/spec-empty-flows-through-cell-checks.js.dfg-maximal-flush-validate-no-cjit stress/typedarray-access-neutered.js.dfg-maximal-flush-validate-no-cjit stress/const-not-strict-mode.js.ftl-no-cjit-no-put-stack-validate stress/eval-func-decl-in-eval-within-with-scope.js.dfg-maximal-flush-validate-no-cjit stress/custom-iterators.js.dfg-eager-no-cjit-validate stress/eval-func-decl-block-with-var-sinthesize.js.dfg-maximal-flush-validate-no-cjit stress/eval-func-decl-within-eval-without-reassign-to-let.js.dfg-maximal-flush-validate-no-cjit stress/array-species-config-array-constructor.js.dfg-maximal-flush-validate-no-cjit stress/custom-iterators.js.ftl-eager-no-cjit stress/const-loop-semantics.js.dfg-eager-no-cjit-validate microbenchmarks/richards-try-catch.js.dfg-maximal-flush-validate-no-cjit stress/proxy-get-and-set-recursion-stack-overflow.js.dfg-maximal-flush-validate-no-cjit stress/lexical-scoping-break-continue.js.dfg-maximal-flush-validate-no-cjit stress/proxy-call.js.dfg-maximal-flush-validate-no-cjit stress/async-await-syntax.js.dfg-eager-no-cjit-validate stress/infinite-loop-that-uses-captured-variables-before-throwing.js.dfg-maximal-flush-validate-no-cjit mozilla-tests.yaml/ecma_3/RegExp/regress-188206.js.mozilla-ftl-eager-no-cjit-validate-phases stress/proxy-set.js.dfg-maximal-flush-validate-no-cjit stress/SharedArrayBuffer-opt.js.dfg-maximal-flush-validate-no-cjit stress/lexical-let-not-strict-mode.js.dfg-eager-no-cjit-validate stress/proxy-property-descriptor.js.dfg-maximal-flush-validate-no-cjit stress/variable-named-eval-under-tdz.js.dfg-maximal-flush-validate-no-cjit microbenchmarks/v8-raytrace-with-try-catch.js.ftl-eager-no-cjit stress/create-subclass-structure-might-throw.js.ftl-eager-no-cjit-b3o1 microbenchmarks/fake-iterators-that-throw-when-finished.js.ftl-no-cjit-validate-sampling-profiler stress/tail-call-recognize.js.dfg-eager-no-cjit-validate stress/tail-call-recognize.js.ftl-eager-no-cjit-b3o1 stress/lexical-let-loop-semantics.js.dfg-maximal-flush-validate-no-cjit stress/async-arrow-functions-lexical-super-binding.js.ftl-eager-no-cjit-b3o1 stress/const-exception-handling.js.ftl-eager-no-cjit-b3o1 stress/builtin-function-is-construct-type-none.js.dfg-maximal-flush-validate-no-cjit stress/global-lexical-var-injection.js.dfg-maximal-flush-validate-no-cjit stress/infinite-loop-that-uses-captured-variables.js.dfg-maximal-flush-validate-no-cjit stress/tail-call-recognize.js.ftl-no-cjit-validate-sampling-profiler stress/const-not-strict-mode.js.no-cjit-validate-phases stress/regress-159779-1.js.ftl-eager-no-cjit stress/lexical-scoping-break-continue.js.ftl-eager-no-cjit-b3o1 stress/es6-default-parameters.js.dfg-maximal-flush-validate-no-cjit stress/proxy-json.js.dfg-maximal-flush-validate-no-cjit stress/template-literal-syntax.js.dfg-eager-no-cjit-validate stress/activation-sink-default-value-tdz-error.js.dfg-maximal-flush-validate-no-cjit stress/regress-163748.js.dfg-eager-no-cjit-validate microbenchmarks/raytrace-with-try-catch.js.dfg-maximal-flush-validate-no-cjit stress/delete-to-object-exception.js.dfg-maximal-flush-validate-no-cjit stress/class-syntax-tdz-in-catch.js.dfg-maximal-flush-validate-no-cjit stress/import-syntax.js.ftl-eager-no-cjit stress/async-await-reserved-word.js.dfg-eager-no-cjit-validate stress/custom-iterators.js.ftl-eager-no-cjit-b3o1 stress/lexical-scoping-break-continue.js.ftl-eager-no-cjit stress/template-literal-syntax.js.ftl-eager-no-cjit stress/class-syntax-tdz-in-eval.js.dfg-maximal-flush-validate-no-cjit stress/lexical-let-not-strict-mode.js.ftl-eager-no-cjit stress/arrowfunction-activation-sink-osrexit-default-value-tdz-error.js.dfg-maximal-flush-validate-no-cjit stress/es6-default-parameters.js.ftl-eager-no-cjit stress/tricky-infinite-loop-that-uses-captured-variables-and-creates-the-activation-outside-the-loop.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-lexical-bind-supercall-1.js.dfg-maximal-flush-validate-no-cjit stress/eval-func-decl-in-eval-within-block-with-let.js.dfg-maximal-flush-validate-no-cjit stress/symbol-toprimitive.js.dfg-maximal-flush-validate-no-cjit mozilla-tests.yaml/ecma_2/Statements/try-010.js.mozilla-dfg-eager-no-cjit-validate-phases mozilla-tests.yaml/ecma_2/Statements/try-001.js.mozilla-ftl-eager-no-cjit-validate-phases stress/async-await-basic.js.dfg-eager-no-cjit-validate stress/class-syntax-tdz.js.dfg-maximal-flush-validate-no-cjit stress/const-loop-semantics.js.ftl-eager-no-cjit stress/const-exception-handling.js.ftl-eager-no-cjit microbenchmarks/fake-iterators-that-throw-when-finished.js.ftl-eager-no-cjit microbenchmarks/fake-iterators-that-throw-when-finished.js.ftl-eager-no-cjit-b3o1 stress/proxy-revoke.js.ftl-no-cjit-validate-sampling-profiler stress/put-direct-index-broken-2.js.dfg-maximal-flush-validate-no-cjit stress/tricky-indirectly-inferred-infinite-loop-that-uses-captured-variables-and-creates-the-activation-outside-the-loop.js.dfg-maximal-flush-validate-no-cjit stress/tagged-templates-syntax.js.ftl-eager-no-cjit-b3o1 stress/class-syntax-double-constructor.js.dfg-maximal-flush-validate-no-cjit stress/proxy-has-property.js.dfg-maximal-flush-validate-no-cjit stress/typedarray-bad-getter.js.dfg-maximal-flush-validate-no-cjit stress/dfg-put-by-val-direct-with-edge-numbers.js.dfg-maximal-flush-validate-no-cjit stress/lexical-let-tdz.js.dfg-maximal-flush-validate-no-cjit stress/async-await-basic.js.ftl-eager-no-cjit-b3o1 stress/const-loop-semantics.js.ftl-no-cjit-no-inline-validate stress/import-syntax.js.dfg-eager-no-cjit-validate microbenchmarks/delta-blue-try-catch.js.dfg-maximal-flush-validate-no-cjit stress/const-not-strict-mode.js.ftl-no-cjit-no-inline-validate stress/catch-variables-under-tdz.js.dfg-eager-no-cjit-validate stress/global-lexical-variable-tdz.js.dfg-maximal-flush-validate-no-cjit stress/global-lexical-var-injection.js.ftl-no-cjit-validate-sampling-profiler stress/proxy-get-prototype-of.js.dfg-eager-no-cjit-validate stress/typedarray-functions-with-neutered.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-tdz-2.js.dfg-maximal-flush-validate-no-cjit stress/async-await-reserved-word.js.ftl-eager-no-cjit microbenchmarks/v8-raytrace-with-try-catch.js.ftl-eager-no-cjit-b3o1 stress/proxy-revoke.js.ftl-no-cjit-no-inline-validate microbenchmarks/v8-raytrace-with-try-catch.js.ftl-no-cjit-no-inline-validate stress/global-lexical-var-injection.js.ftl-eager-no-cjit stress/lexical-let-exception-handling.js.dfg-eager-no-cjit-validate stress/regress-153486.js.dfg-maximal-flush-validate-no-cjit stress/create-subclass-structure-might-throw.js.no-cjit-validate-phases stress/lexical-scoping-break-continue.js.ftl-no-cjit-validate-sampling-profiler stress/const-tdz.js.dfg-maximal-flush-validate-no-cjit stress/catch-variables-under-tdz.js.ftl-eager-no-cjit mozilla-tests.yaml/ecma_2/Statements/try-010.js.mozilla-ftl-eager-no-cjit-validate-phases stress/arrowfunction-lexical-bind-supercall-4.js.dfg-maximal-flush-validate-no-cjit microbenchmarks/v8-raytrace-with-try-catch.js.ftl-no-cjit-validate-sampling-profiler stress/tagged-template-tdz.js.dfg-maximal-flush-validate-no-cjit stress/create-subclass-structure-might-throw.js.ftl-no-cjit-validate-sampling-profiler stress/const-not-strict-mode.js.ftl-eager-no-cjit stress/es6-default-parameters.js.ftl-eager-no-cjit-b3o1 stress/activation-sink-osrexit-default-value-tdz-error.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-tdz-1.js.dfg-maximal-flush-validate-no-cjit stress/lexical-let-exception-handling.js.ftl-eager-no-cjit-b3o1 stress/tail-call-recognize.js.ftl-no-cjit-no-inline-validate stress/const-loop-semantics.js.ftl-no-cjit-validate-sampling-profiler stress/async-arrow-functions-lexical-super-binding.js.dfg-eager-no-cjit-validate stress/async-arrow-functions-lexical-super-binding.js.ftl-eager-no-cjit stress/function-constructor-reading-from-global-lexical-environment.js.dfg-maximal-flush-validate-no-cjit stress/const-loop-semantics.js.ftl-eager-no-cjit-b3o1 stress/eval-func-decl-within-eval-with-reassign-to-var.js.dfg-maximal-flush-validate-no-cjit stress/strcat-emtpy.js.dfg-maximal-flush-validate-no-cjit stress/proxy-get-prototype-of.js.ftl-eager-no-cjit stress/dont-strength-reduce-valuerep-of-doublerep.js.dfg-maximal-flush-validate-no-cjit stress/proxy-revoke.js.ftl-no-cjit-no-put-stack-validate stress/lexical-scoping-break-continue.js.ftl-no-cjit-no-inline-validate stress/super-get-by-id.js.dfg-eager-no-cjit-validate stress/tricky-infinite-loop-that-uses-captured-variables.js.dfg-maximal-flush-validate-no-cjit stress/global-lexical-var-injection.js.dfg-eager-no-cjit-validate stress/rest-parameter-is-destructuring.js.dfg-maximal-flush-validate-no-cjit stress/domjit-getter-complex-with-incorrect-object.js.dfg-maximal-flush-validate-no-cjit stress/const-not-strict-mode.js.dfg-eager-no-cjit-validate microbenchmarks/string-transcoding.js.dfg-maximal-flush-validate-no-cjit stress/tricky-inferred-infinite-loop-that-uses-captured-variables-and-creates-the-activation-outside-the-loop.js.dfg-maximal-flush-validate-no-cjit stress/destructuring-assignment-syntax.js.ftl-eager-no-cjit stress/typedarray-access-monomorphic-neutered.js.dfg-maximal-flush-validate-no-cjit stress/const-loop-semantics.js.no-cjit-validate-phases microbenchmarks/fake-iterators-that-throw-when-finished.js.ftl-no-cjit-no-inline-validate stress/infinite-loop-that-uses-captured-variables-but-they-do-not-escape.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-constructor.js.dfg-maximal-flush-validate-no-cjit stress/async-await-reserved-word.js.ftl-eager-no-cjit-b3o1 stress/create-subclass-structure-might-throw.js.dfg-eager-no-cjit-validate stress/proxy-set-prototype-of.js.dfg-eager-no-cjit-validate stress/proxy-revoke.js.dfg-maximal-flush-validate-no-cjit stress/cloned-arguments-modification.js.dfg-maximal-flush-validate-no-cjit stress/import-syntax.js.ftl-eager-no-cjit-b3o1 stress/proxy-delete.js.dfg-maximal-flush-validate-no-cjit stress/reserved-word-with-escape.js.dfg-eager-no-cjit-validate stress/async-await-syntax.js.ftl-eager-no-cjit stress/proxy-is-array.js.dfg-maximal-flush-validate-no-cjit stress/tail-call-recognize.js.no-cjit-validate-phases stress/proxy-revoke.js.ftl-eager-no-cjit stress/const-loop-semantics.js.dfg-maximal-flush-validate-no-cjit stress/array-reverse-proxy.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-lexical-bind-supercall-2.js.dfg-maximal-flush-validate-no-cjit stress/proxy-get-prototype-of.js.ftl-eager-no-cjit-b3o1 microbenchmarks/fake-iterators-that-throw-when-finished.js.no-cjit-validate-phases stress/lexical-let-exception-handling.js.ftl-eager-no-cjit stress/super-get-by-id.js.no-cjit-validate-phases stress/proxy-own-keys.js.dfg-maximal-flush-validate-no-cjit stress/operation-in-throw-error.js.dfg-maximal-flush-validate-no-cjit stress/es6-default-parameters.js.dfg-eager-no-cjit-validate stress/reserved-word-with-escape.js.ftl-eager-no-cjit stress/create-subclass-structure-might-throw.js.ftl-no-cjit-no-inline-validate stress/global-lexical-var-injection.js.ftl-eager-no-cjit-b3o1 stress/global-lexical-var-injection.js.ftl-no-cjit-no-put-stack-validate stress/template-literal-line-terminators.js.ftl-eager-no-cjit-b3o1 stress/dfg-call-class-constructor.js.dfg-maximal-flush-validate-no-cjit stress/create-subclass-structure-might-throw.js.ftl-no-cjit-no-put-stack-validate stress/async-await-mozilla.js.dfg-maximal-flush-validate-no-cjit stress/const-not-strict-mode.js.ftl-eager-no-cjit-b3o1 stress/regress-159779-2.js.ftl-eager-no-cjit stress/destructuring-assignment-syntax.js.ftl-eager-no-cjit-b3o1 stress/class-syntax-tdz-in-conditional.js.dfg-maximal-flush-validate-no-cjit mozilla-tests.yaml/ecma_2/Statements/try-001.js.mozilla-dfg-eager-no-cjit-validate-phases microbenchmarks/v8-raytrace-with-try-catch.js.no-cjit-validate-phases stress/super-get-by-id.js.dfg-maximal-flush-validate-no-cjit stress/lexical-let-not-strict-mode.js.ftl-eager-no-cjit-b3o1 mozilla-tests.yaml/ecma_3/RegExp/regress-188206.js.mozilla-dfg-eager-no-cjit-validate-phases stress/reflect-construct.js.dfg-maximal-flush-validate-no-cjit stress/class-syntax-no-tdz-in-catch.js.dfg-maximal-flush-validate-no-cjit stress/super-property-access-tdz.js.dfg-maximal-flush-validate-no-cjit stress/string-prototype-methods-endsWith-startsWith-includes-correctness.js.dfg-maximal-flush-validate-no-cjit stress/class-syntax-tdz-in-loop.js.dfg-maximal-flush-validate-no-cjit stress/eval-func-decl-in-global-of-eval.js.dfg-maximal-flush-validate-no-cjit stress/class-derived-from-null.js.dfg-maximal-flush-validate-no-cjit stress/super-get-by-id.js.ftl-no-cjit-no-put-stack-validate microbenchmarks/v8-raytrace-with-try-catch.js.dfg-eager-no-cjit-validate stress/reflect-set-proxy-set.js.dfg-maximal-flush-validate-no-cjit stress/tail-call-recognize.js.ftl-eager-no-cjit stress/global-lexical-var-injection.js.ftl-no-cjit-no-inline-validate stress/async-await-basic.js.ftl-eager-no-cjit stress/dfg-exception-try-catch-in-constructor-with-inlined-throw.js.dfg-maximal-flush-validate-no-cjit stress/tail-call-recognize.js.ftl-no-cjit-no-put-stack-validate stress/proxy-revoke.js.no-cjit-validate-phases stress/eval-func-decl-block-with-var-and-remove.js.dfg-maximal-flush-validate-no-cjit stress/template-literal-line-terminators.js.dfg-eager-no-cjit-validate stress/catch-variables-under-tdz.js.ftl-eager-no-cjit-b3o1 stress/global-lexical-var-injection.js.no-cjit-validate-phases stress/global-lexical-redefine-const.js.dfg-maximal-flush-validate-no-cjit stress/async-await-syntax.js.ftl-eager-no-cjit-b3o1 stress/lexical-scoping-break-continue.js.dfg-eager-no-cjit-validate stress/typedarray-configure-index.js.dfg-maximal-flush-validate-no-cjit stress/lexical-let-not-strict-mode.js.dfg-maximal-flush-validate-no-cjit stress/super-get-by-id.js.ftl-no-cjit-validate-sampling-profiler microbenchmarks/fake-iterators-that-throw-when-finished.js.dfg-eager-no-cjit-validate slowMicrobenchmarks.yaml/slowMicrobenchmarks/v8-raytrace-with-try-catch-high-frequency-throws.js.no-cjit stress/proxy-revoke.js.dfg-eager-no-cjit-validate stress/const-exception-handling.js.dfg-eager-no-cjit-validate stress/rest-parameter-and-default-arguments.js.dfg-maximal-flush-validate-no-cjit microbenchmarks/v8-raytrace-with-try-catch.js.dfg-maximal-flush-validate-no-cjit stress/template-literal-syntax.js.ftl-eager-no-cjit-b3o1 stress/tagged-templates-syntax.js.ftl-eager-no-cjit stress/lexical-scoping-break-continue.js.no-cjit-validate-phases stress/create-subclass-structure-might-throw.js.dfg-maximal-flush-validate-no-cjit stress/domjit-getter-type-check.js.dfg-maximal-flush-validate-no-cjit stress/proxy-set-prototype-of.js.ftl-eager-no-cjit-b3o1 stress/const-semantics.js.dfg-maximal-flush-validate-no-cjit stress/with.js.dfg-maximal-flush-validate-no-cjit stress/create-subclass-structure-might-throw.js.ftl-eager-no-cjit stress/proxy-revoke.js.ftl-eager-no-cjit-b3o1 stress/es6-for-of-loop-exception.js.dfg-maximal-flush-validate-no-cjit stress/sloppy-mode-function-hoisting.js.dfg-maximal-flush-validate-no-cjit stress/super-get-by-id.js.ftl-no-cjit-no-inline-validate stress/tail-call-recognize.js.dfg-maximal-flush-validate-no-cjit microbenchmarks/fake-iterators-that-throw-when-finished.js.dfg-maximal-flush-validate-no-cjit microbenchmarks/fake-iterators-that-throw-when-finished.js.ftl-no-cjit-no-put-stack-validate stress/template-literal-line-terminators.js.ftl-eager-no-cjit stress/lexical-scoping-break-continue.js.ftl-no-cjit-no-put-stack-validate stress/tagged-templates-syntax.js.dfg-eager-no-cjit-validate stress/reserved-word-with-escape.js.ftl-eager-no-cjit-b3o1 stress/class-syntax-super-in-eval.js.dfg-maximal-flush-validate-no-cjit stress/arrowfunction-tdz-4.js.dfg-maximal-flush-validate-no-cjit stress/regress-163748.js.ftl-eager-no-cjit Created attachment 318283 [details]
WIP
Fix some bugs related to new validation. There were a few bugs pre-existing that would try to Flush the primordial set in a root block. This isn't allowed, as we require all locals to be dead at the root.
Created attachment 318324 [details]
WIP
I think this patch is exposing a few pre-existing bugs I need to think about fixing:
- SetLocal of scope always flushes inside bytecode parser when a bit is set on CodeBlock. This might cause us to add a Flush that doesn't have a SetLocal definition that reaches it. This causes CPS rethreading to create a Phi that is linked to nothing. This will lead a root block to say that particular local is live. This will cause us to fail validation, which asserts that all locals are dead at the head of all root blocks.
- Same thing as above, but in the LiveCatchVariablePreservationPhase for arbitrary locals
I need to think about exactly how to fix this issue.
Created attachment 318460 [details]
WIP
Attachment 318460 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:177: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:178: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Missing spaces around : [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Comma should be at the beginning of the line in a member initialization list. [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGBasicBlock.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGLiveCatchVariablePreservationPhase.cpp:165: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGLiveCatchVariablePreservationPhase.cpp:172: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGLiveCatchVariablePreservationPhase.cpp:175: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGLiveCatchVariablePreservationPhase.cpp:229: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/WTF/wtf/SingleRootGraph.h:26: Use #pragma once instead of #ifndef for header guard. [build/header_guard] [5]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:483: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:485: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:650: Should have a space between // and comment [whitespace/comments] [4]
Total errors found: 14 in 78 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Created attachment 318571 [details]
WIP
Probably doesn't compile, but I think I have a workable solution for the live catch variable preservation phase
Created attachment 318665 [details]
WIP
Attachment 318665 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:177: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:178: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Missing spaces around : [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Comma should be at the beginning of the line in a member initialization list. [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGBasicBlock.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4]
ERROR: Source/WTF/wtf/SingleRootGraph.h:26: Use #pragma once instead of #ifndef for header guard. [build/header_guard] [5]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:3983: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:3984: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:3985: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:3986: Should have a space between // and comment [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:3987: Should have a space between // and comment [whitespace/comments] [4]
Total errors found: 12 in 80 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Created attachment 318741 [details]
WIP
Just about ready for review, just going to read over the code once before writing a changelog.
Created attachment 318807 [details]
WIP
Created attachment 318835 [details]
patch
This patch is ready for review. I am going to spend a little bit of time writing a more comprehensive program that uses try/catch, but that shouldn't stand in the way of the rest of the patch being reviewed.
Attachment 318835 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:177: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:178: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:2836: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3]
ERROR: Source/WTF/wtf/SingleRootGraph.h:26: Use #pragma once instead of #ifndef for header guard. [build/header_guard] [5]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Missing spaces around : [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Comma should be at the beginning of the line in a member initialization list. [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGBasicBlock.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4]
Total errors found: 8 in 86 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Comment on attachment 318835 [details] patch View in context: https://bugs.webkit.org/attachment.cgi?id=318835&action=review Seems legit. > Source/JavaScriptCore/dfg/DFGCFAPhase.cpp:98 > - > + Revert > Source/JavaScriptCore/dfg/DFGCFG.h:99 > +template <typename T, typename = typename std::enable_if<std::is_same<T, CPSCFG>::value>::type> > +CPSCFG& selectCFG(Graph& graph) Whoa. What does this magic do? > Source/WTF/wtf/BackwardsGraph.h:44 > + using Node = SingleRootGraphNode<Graph>; > + using Set = SingleRootGraphSet<Graph>; > + template <typename T> using Map = SingleRootMap<T, Graph>; Nice Comment on attachment 318835 [details] patch View in context: https://bugs.webkit.org/attachment.cgi?id=318835&action=review >> Source/JavaScriptCore/dfg/DFGCFG.h:99 >> +CPSCFG& selectCFG(Graph& graph) > > Whoa. What does this magic do? I think, It will only select this version of the function if T is CPSCFG. The default value errors unless someone provides a value for it. Since errors mean the template is not selected and no one provides the second template value it should always select the right function. I think you could also make this: template <typename T> CPSCFG& selectCFG(Graph& graph) { typedef typename std::enable_if<std::is_same<T, CPSCFG>::value>::type Enabled; ... } or if we had: #define ENABLE_TEMPLATE_IF(condition) static_assert(condition, "template disabled") template <typename T> CPSCFG& selectCFG(Graph& graph) { ENABLE_TEMPLATE_IF(std::is_same<T, CPSCFG>::value); ... } Created attachment 318930 [details]
patch for landing
Attachment 318930 [details] did not pass style-queue:
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:177: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/ValueProfile.h:178: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:2836: Weird number of spaces at line-start. Are you using a 4-space indent? [whitespace/indent] [3]
ERROR: Source/WTF/wtf/SingleRootGraph.h:26: Use #pragma once instead of #ifndef for header guard. [build/header_guard] [5]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Missing spaces around : [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Should be indented on a separate line, with the colon or comma first on that line. [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:416: Comma should be at the beginning of the line in a member initialization list. [whitespace/init] [4]
ERROR: Source/JavaScriptCore/dfg/DFGBasicBlock.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4]
Total errors found: 8 in 86 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Created attachment 318935 [details]
patch for landing
Comment on attachment 318935 [details] patch for landing Clearing flags on attachment: 318935 Committed r221119: <http://trac.webkit.org/changeset/221119> All reviewed patches have been landed. Closing bug. Committed r221124: <http://trac.webkit.org/changeset/221124> Re-opened since this is blocked by bug 175973 This regressed JSBench by 10-20% in my local testing. I think all that's needed to make this faster is to not eagerly run liveness since liveness is expensive and hurts page load when done unconditionally in a CodeBlock with op_catch. Instead, I'm going to do it on first exception throw. (In reply to Saam Barati from comment #81) > This regressed JSBench by 10-20% in my local testing. I think all that's > needed to make this faster is to not eagerly run liveness since liveness is > expensive and hurts page load when done unconditionally in a CodeBlock with > op_catch. Instead, I'm going to do it on first exception throw. It looks like this fixes the JSBench regression locally for me. Will have a patch tomorrow. remanded in: https://trac.webkit.org/changeset/221196/webkit I'm now computing liveness lazily once a catch actually executes. This fixed the JSBench regression for me locally. fixed 32-bit in: https://trac.webkit.org/changeset/221210/webkit |