Bug 174590

Summary: Support compiling catch in the DFG
Product: WebKit Reporter: Saam Barati <saam>
Component: JavaScriptCoreAssignee: 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 Flags
it begins
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
buildbot: commit-queue-
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
buildbot: commit-queue-
Archive of layout-test-results from ews115 for mac-elcapitan
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
WIP
none
patch
fpizlo: review+
patch for landing
saam: commit-queue-
patch for landing none

Description Saam Barati 2017-07-17 10:56:41 PDT
To do this, we should:
- profile live values at catch. We'll use this in prediction injection. Might also need to be used in CFA
- support multiple entrypoints in the DFG. Each catch site will be an entrypoint.
- For FTL compilations, we might need something similar to ExtractOSREntryLocal
Comment 1 Saam Barati 2017-07-26 12:42:11 PDT
Created attachment 316464 [details]
it begins
Comment 2 Saam Barati 2017-07-26 12:55:16 PDT
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.
Comment 3 Saam Barati 2017-07-26 21:16:14 PDT
Created attachment 316517 [details]
WIP
Comment 4 Saam Barati 2017-07-27 00:43:43 PDT
Created attachment 316534 [details]
WIP
Comment 5 Saam Barati 2017-07-27 11:31:12 PDT
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.
Comment 6 Saam Barati 2017-07-27 13:47:26 PDT
(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.
Comment 7 Saam Barati 2017-07-31 14:16:09 PDT
Created attachment 316803 [details]
WIP
Comment 8 Saam Barati 2017-08-02 14:48:25 PDT
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.
Comment 9 Saam Barati 2017-08-03 14:47:06 PDT
Created attachment 317159 [details]
WIP
Comment 10 Saam Barati 2017-08-03 16:20:02 PDT
I'm starting to think this can be made two patches:
1. OSR enter into DFG
2. OSR enter into FTL
Comment 11 Saam Barati 2017-08-03 16:22:51 PDT
Created attachment 317177 [details]
WIP
Comment 12 Saam Barati 2017-08-03 17:39:44 PDT
Created attachment 317186 [details]
WIP

I think I'm really close to actually starting to run some code.
Comment 13 Saam Barati 2017-08-03 18:11:39 PDT
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));
```
Comment 14 Saam Barati 2017-08-03 19:03:20 PDT
Created attachment 317196 [details]
WIP

Ok, it now ran the above program!
Comment 15 Saam Barati 2017-08-03 19:43:41 PDT
Created attachment 317204 [details]
WIP
Comment 16 Saam Barati 2017-08-06 09:30:42 PDT
Created attachment 317363 [details]
WIP
Comment 17 Saam Barati 2017-08-06 10:49:48 PDT
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.
Comment 18 Saam Barati 2017-08-06 15:31:23 PDT
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.
Comment 19 Saam Barati 2017-08-06 17:44:40 PDT
Created attachment 317389 [details]
WIP

More. Fixed a bug in FTL OSR entrypoint creation phase.
Comment 20 Saam Barati 2017-08-06 18:42:08 PDT
It passes all JSC tests. Now I need to start refining the patch.
Comment 21 Saam Barati 2017-08-06 19:12:40 PDT
Created attachment 317393 [details]
WIP
Comment 22 Saam Barati 2017-08-06 19:32:23 PDT
Created attachment 317394 [details]
WIP
Comment 23 Saam Barati 2017-08-09 14:26:19 PDT
Created attachment 317742 [details]
WIP

rebased
Comment 24 Saam Barati 2017-08-09 20:14:24 PDT
Created attachment 317777 [details]
WIP

starting to clean up the patch a bit
Comment 25 Saam Barati 2017-08-09 20:20:37 PDT
Created attachment 317779 [details]
WIP
Comment 26 Saam Barati 2017-08-09 20:28:01 PDT
Created attachment 317780 [details]
WIP
Comment 27 Saam Barati 2017-08-10 20:39:57 PDT
Created attachment 317912 [details]
WIP
Comment 28 Saam Barati 2017-08-11 11:43:27 PDT
Created attachment 317942 [details]
WIP

Still need to write a CPSCFG class.
Comment 29 Saam Barati 2017-08-11 11:58:19 PDT
Created attachment 317945 [details]
WIP
Comment 30 Saam Barati 2017-08-13 18:48:55 PDT
Created attachment 318018 [details]
WIP

Starting the process of specifying:
- CPSCFG vs SSACFG
- SSADominators vs CPSDominators
- SSANaturalLoops vs CPSNaturalLoops
Comment 31 Saam Barati 2017-08-13 19:22:29 PDT
Created attachment 318019 [details]
WIP

still need to get it to compile
Comment 32 Saam Barati 2017-08-13 21:44:35 PDT
Created attachment 318023 [details]
WIP

It compiles.
Comment 33 Saam Barati 2017-08-13 22:39:32 PDT
Created attachment 318025 [details]
WIP
Comment 34 Saam Barati 2017-08-14 15:54:08 PDT
Created attachment 318078 [details]
WIP
Comment 35 Saam Barati 2017-08-14 16:48:59 PDT
Created attachment 318084 [details]
WIP
Comment 36 Saam Barati 2017-08-14 16:52:25 PDT
Created attachment 318087 [details]
WIP
Comment 37 Build Bot 2017-08-14 16:55:58 PDT
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 38 Build Bot 2017-08-14 18:01:04 PDT
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
Comment 39 Saam Barati 2017-08-14 19:10:14 PDT
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.
Comment 40 Saam Barati 2017-08-14 20:41:06 PDT
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.
Comment 41 Saam Barati 2017-08-15 11:22:07 PDT
Created attachment 318139 [details]
WIP
Comment 42 Saam Barati 2017-08-15 12:39:46 PDT
Created attachment 318148 [details]
WIP

We were using the CPSCFG incorrectly before because we were creating it too early. Fixed in this WIP
Comment 43 Saam Barati 2017-08-15 12:46:24 PDT
Created attachment 318150 [details]
WIP

rebased
Comment 44 Build Bot 2017-08-15 12:49:03 PDT
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.
Comment 45 Saam Barati 2017-08-15 14:03:21 PDT
Created attachment 318169 [details]
WIP

should build now
Comment 46 Saam Barati 2017-08-15 14:24:51 PDT
Created attachment 318173 [details]
WIP

ok, it actually builds now
Comment 47 Build Bot 2017-08-15 14:27:51 PDT
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.
Comment 48 Saam Barati 2017-08-15 15:33:20 PDT
Created attachment 318185 [details]
WIP

maybe 32-bit builds now
Comment 49 Build Bot 2017-08-15 15:36:15 PDT
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.
Comment 50 Saam Barati 2017-08-15 17:58:53 PDT
Created attachment 318208 [details]
WIP

I think this is just about ready for review. I want to write a few tests and a changelog.
Comment 51 Build Bot 2017-08-15 18:01:29 PDT
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.
Comment 52 Saam Barati 2017-08-15 18:38:22 PDT
Created attachment 318214 [details]
WIP

trying to get 32-bit to build
Comment 53 Build Bot 2017-08-15 18:41:37 PDT
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.
Comment 54 Saam Barati 2017-08-15 19:50:53 PDT
Created attachment 318218 [details]
WIP
Comment 55 Build Bot 2017-08-15 19:53:20 PDT
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 56 Build Bot 2017-08-15 21:51:26 PDT
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.
Comment 57 Build Bot 2017-08-15 21:51:32 PDT
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 58 Build Bot 2017-08-16 00:19:43 PDT
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 59 Build Bot 2017-08-16 02:15:16 PDT
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
Comment 60 Saam Barati 2017-08-16 13:01:45 PDT
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.
Comment 61 Saam Barati 2017-08-16 20:36:21 PDT
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.
Comment 62 Saam Barati 2017-08-17 20:00:34 PDT
Created attachment 318460 [details]
WIP
Comment 63 Build Bot 2017-08-17 20:03:09 PDT
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.
Comment 64 Saam Barati 2017-08-18 19:16:11 PDT
Created attachment 318571 [details]
WIP

Probably doesn't compile, but I think I have a workable solution for the live catch variable preservation phase
Comment 65 Saam Barati 2017-08-21 13:15:10 PDT
Created attachment 318665 [details]
WIP
Comment 66 Build Bot 2017-08-21 13:17:48 PDT
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.
Comment 67 Saam Barati 2017-08-21 23:45:07 PDT
Created attachment 318741 [details]
WIP

Just about ready for review, just going to read over the code once before writing a changelog.
Comment 68 Saam Barati 2017-08-22 15:21:57 PDT
Created attachment 318807 [details]
WIP
Comment 69 Saam Barati 2017-08-22 17:41:42 PDT
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.
Comment 70 Build Bot 2017-08-22 17:45:01 PDT
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 71 Filip Pizlo 2017-08-22 18:17:56 PDT
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 72 Keith Miller 2017-08-22 19:50:03 PDT
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);
     ...
}
Comment 73 Saam Barati 2017-08-23 15:22:37 PDT
Created attachment 318930 [details]
patch for landing
Comment 74 Build Bot 2017-08-23 15:25:29 PDT
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.
Comment 75 Saam Barati 2017-08-23 16:15:17 PDT
Created attachment 318935 [details]
patch for landing
Comment 76 WebKit Commit Bot 2017-08-23 16:58:40 PDT
Comment on attachment 318935 [details]
patch for landing

Clearing flags on attachment: 318935

Committed r221119: <http://trac.webkit.org/changeset/221119>
Comment 77 WebKit Commit Bot 2017-08-23 16:58:43 PDT
All reviewed patches have been landed.  Closing bug.
Comment 78 Radar WebKit Bug Importer 2017-08-23 16:59:20 PDT
<rdar://problem/34047845>
Comment 79 Yusuke Suzuki 2017-08-23 18:05:08 PDT
Committed r221124: <http://trac.webkit.org/changeset/221124>
Comment 80 WebKit Commit Bot 2017-08-24 18:53:15 PDT
Re-opened since this is blocked by bug 175973
Comment 81 Saam Barati 2017-08-24 22:57:08 PDT
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.
Comment 82 Saam Barati 2017-08-24 23:54:39 PDT
(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.
Comment 83 Saam Barati 2017-08-25 11:27:56 PDT
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.
Comment 84 Saam Barati 2017-08-25 15:57:27 PDT
fixed 32-bit in:
https://trac.webkit.org/changeset/221210/webkit