Bug 199203 - Add B3 Strength Reduction to turn multiply-immediate to adds and shifts
Summary: Add B3 Strength Reduction to turn multiply-immediate to adds and shifts
Status: NEW
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Justin Michaud
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-06-25 13:57 PDT by Justin Michaud
Modified: 2019-07-11 14:09 PDT (History)
7 users (show)

See Also:


Attachments
Patch (4.67 KB, patch)
2019-06-25 13:59 PDT, Justin Michaud
no flags Details | Formatted Diff | Diff
Archive of layout-test-results from ews112 for mac-highsierra (3.81 MB, application/zip)
2019-06-25 17:12 PDT, EWS Watchlist
no flags Details
Patch (7.43 KB, patch)
2019-06-25 17:13 PDT, Justin Michaud
no flags Details | Formatted Diff | Diff
Patch (7.17 KB, patch)
2019-07-11 10:41 PDT, Justin Michaud
ews-watchlist: commit-queue-
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Justin Michaud 2019-06-25 13:57:57 PDT
Add B3 Strength Reduction to turn multiply-immediate to adds and shifts
Comment 1 Justin Michaud 2019-06-25 13:59:29 PDT
Created attachment 372861 [details]
Patch
Comment 2 EWS Watchlist 2019-06-25 14:00:46 PDT Comment hidden (obsolete)
Comment 3 Justin Michaud 2019-06-25 14:01:29 PDT Comment hidden (obsolete)
Comment 4 EWS Watchlist 2019-06-25 17:12:24 PDT Comment hidden (obsolete)
Comment 5 EWS Watchlist 2019-06-25 17:12:25 PDT Comment hidden (obsolete)
Comment 6 Justin Michaud 2019-06-25 17:13:48 PDT
Created attachment 372881 [details]
Patch
Comment 7 Robin Morisset 2019-06-27 10:34:55 PDT
Comment on attachment 372881 [details]
Patch

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

LGTM overall, except for the bit count function, and the microbenchmark (see my comments inline).
Thanks for taking care of this optimization, I've been thinking I should do it for a while.

> Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2232
> +    inline static unsigned bitCount64(uint64_t value)

WTF::bitCount already exists and is more optimized.

> JSTests/microbenchmarks/multiply-immediate.js:1
> +function doTest(max) {

There appears to be missing a Changelog for JSTests.
Also can you put in the main changelog the performance win you found on this microbenchmark with the optimization?

> JSTests/microbenchmarks/multiply-immediate.js:4
> +        sum = (sum|0) + ((i*256)|0) - ((i*9)|0) - ((i*31)|0) - ((i*67)|0) - ((i*64)|0)

What prevents B3 from simplifying this to sum = (sum|0) + (i*85)|0) ?
If it fails to do it, it is probably another bug (I added rules to B3ReduceStrength a few month ago teaching it about the distributivity of multiplication over addition and subtraction precisely to catch this kind of things).
Comment 8 Robin Morisset 2019-06-27 11:18:27 PDT
Comment on attachment 372881 [details]
Patch

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

>> JSTests/microbenchmarks/multiply-immediate.js:4
>> +        sum = (sum|0) + ((i*256)|0) - ((i*9)|0) - ((i*31)|0) - ((i*67)|0) - ((i*64)|0)
> 
> What prevents B3 from simplifying this to sum = (sum|0) + (i*85)|0) ?
> If it fails to do it, it is probably another bug (I added rules to B3ReduceStrength a few month ago teaching it about the distributivity of multiplication over addition and subtraction precisely to catch this kind of things).

I think I found the reason this code does not use the rules for the distributivity of multiplication over subtraction. The code above probably has the following parentheses:
(((((sum+I*256)-I*9)-I*31)-I*67)-I*64)
None of the subtractions are simplifiable, as the left-side is always too complicated (it is never a bare multiplication).

I will open a new bug about this, it seems fairly easy to fix, with the following rule: Sub(Sub(a, b), c) => Sub(a, Add(b, c)).
This would also allow more optimization later on in B3OptimizeAssociativeExpressionTrees, since it can deal with Add but not with Sub.
For completeness sake, I should also add the following:
Sub(a, Sub(b, c)) => Sub(Add(a, c), b)
Sub(Neg(a), b) => Neg(Add(a, b))
Add(a, Sub(b, c)) <=> Sub(Add(a, b), c), not sure in which direction this one should go, but it could be a useful canonicalization. The <= direction would be needed for the last step of the reduction in this example (otherwise we would have (sum+I*256)-I*171, and be stuck).
Comment 9 Justin Michaud 2019-07-11 10:41:33 PDT
Created attachment 373928 [details]
Patch

This seems to be a perf regression on the simple add+multiply case, so I will try fixing the related bug first.
Comment 10 EWS Watchlist 2019-07-11 10:46:29 PDT
Attachment 373928 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:795:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:797:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 11 EWS Watchlist 2019-07-11 14:09:04 PDT
Comment on attachment 373928 [details]
Patch

Attachment 373928 [details] did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/12717619

New failing tests:
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-become-double.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/destructuring-assignment.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-reset.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/unicode-escape-sequences.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/weakref-async-is-collected.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-int52-change-format.js.layout
jsc-layout-tests.yaml/js/script-tests/class-syntax-prototype.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-intrinsic-side-effect-assignment-osr-exit.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-reduce.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/throw-type-error-is-unique.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-150220.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-arguments-out-of-bounds.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-activation-register-overwritten-in-throw.js.layout
jsc-layout-tests.yaml/js/script-tests/dfg-array-pop-value-clearing.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/Operators/mul.js.default
jsc-layout-tests.yaml/js/script-tests/Object-getOwnPropertyNames.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-uint32-to-number-in-middle-of-copy-propagation.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-array-pop-side-effects.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/sort-large-array.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-arguments-cross-code-origin.js.layout
jsc-layout-tests.yaml/js/script-tests/dfg-mul-big-integer-with-small-integer-and-bitor.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-dead-variable-on-exit.js.layout
jsc-layout-tests.yaml/js/script-tests/basic-spread.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-capture-throw-exception.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/fast/regex/script-tests/pcre-test-4.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-155776.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/object-bad-time.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-146029.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-dead-variable-on-exit.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-151279.js.layout
jsc-layout-tests.yaml/js/script-tests/function-call-aliased.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dictionary-prototype-caching.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-to-string-int-or-string.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/fast/regex/script-tests/pcre-test-1.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-activation-register-overwritten-in-throw.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-ensure-contiguous-on-string.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-uint32array-overflow-values.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/new-array-double-with-holes.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/ControlFlow/enumeration_adddelete.js.default
jsc-layout-tests.yaml/js/script-tests/dfg-arguments-alias-escape.js.layout
jsc-layout-tests.yaml/js/script-tests/for-in-modify-in-loop.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-abs-backwards-propagation.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-functions-non-arrays.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/es5/defineIndexProperty.js.default
jsc-layout-tests.yaml/js/script-tests/arguments.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/intl-datetimeformat.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/avl-crash.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/get-by-pname-non-final-object.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/arguments-iterator.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-iterate-backwards.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/Operators/mod.js.default
jsc-layout-tests.yaml/js/script-tests/dfg-ensure-contiguous-on-string.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/es6-function-properties.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/weakref-async-is-collected.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-array-push-bad-time.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/Operators/strictequal.js.default
jsc-layout-tests.yaml/fast/regex/script-tests/invalid-range-in-class.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-every.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-activation-register-overwritten-in-throw.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/strict/22.callerCalleeArguments.js.default
jsc-layout-tests.yaml/js/script-tests/dfg-arguments-cross-code-origin.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-139808.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-ensure-array-storage-on-string.js.layout
jsc-layout-tests.yaml/js/script-tests/dfg-holy-put-by-val-interferes-with-get-array-length.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regexp-zero-length-alternatives.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-create-inlined-arguments-in-closure-inline.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-create-inlined-arguments-in-closure-inline.js.layout
jsc-layout-tests.yaml/js/script-tests/repeat-cached-vm-reentry.js.layout-ftl-no-cjit
ChakraCore.yaml/ChakraCore/test/UnifiedRegex/mru.js.default
jsc-layout-tests.yaml/js/script-tests/dfg-max-backwards-propagation.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regexp-named-capture-groups.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/repeat-cached-vm-reentry.js.layout
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-become-int32.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/reentrant-caching.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/fast/regex/script-tests/backreferences.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/object-literal-shorthand-construction.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/weakref-eventually-collects-values.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/stack-trace.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/Operators/instanceof.js.default
jsc-layout-tests.yaml/js/script-tests/for-in-modify-in-loop.js.layout
ChakraCore.yaml/ChakraCore/test/Lib/tostring.js.default
jsc-layout-tests.yaml/js/script-tests/resolve-arguments-from-scope.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-int52-change-format.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/fast/regex/script-tests/repeat-match-waldemar.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-array-pop-side-effects.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/intl-numberformat.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-iterate-backwards.js.layout
jsc-layout-tests.yaml/js/script-tests/function-toString-vs-name.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/comparefn-sort-stability.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/Operators/equals.js.default
ChakraCore.yaml/ChakraCore/test/typedarray/dataview.js.default
jsc-layout-tests.yaml/js/script-tests/regexp-unicode.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/strict/23.reservedWords_sm.js.default
jsc-layout-tests.yaml/js/script-tests/array-iterate-backwards.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-proven-sqrt-backwards-propagation.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-use-from-all-the-places-broken.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/fast/regex/script-tests/ecma-regex-examples.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-int32.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-check-function-change-structure.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/typedarray-zero-size.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-use-directly-from-inlined-code.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/weakref-microtasks-dont-collect.js.layout
jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regexp-alternatives.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/string-capitalization.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regexp-sticky.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-indexing.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/typedarray-zero-size.js.layout
jsc-layout-tests.yaml/js/script-tests/dfg-string-stricteq.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-146029.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/statement-list-item-syntax-errors.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-cfg-simplify-redundant-dead-get-local.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/fast/regex/script-tests/assertion.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-float64array.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-140579.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-iterators.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-of.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/reserved-words-strict.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-use-from-getter.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-compare-final-object-to-final-object-or-other-when-both-proven-final-object.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-slow-put.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-array-pop-value-clearing.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/sort-large-array.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-uint32array.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-uint32-to-number-skip-then-exit.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-to-string-on-cell.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-abs-backwards-propagation.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-arguments-mutated-structure.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-convert-this-dom-window.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/date-constructor.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/sort-randomly.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/get-by-pname.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-reset-changetype.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-min-backwards-propagation.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-ensure-array-storage-on-string.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/weakref-microtasks-dont-collect.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-abs-backwards-propagation.js.layout
ChakraCore.yaml/ChakraCore/test/strict/23.reservedWords.js.default
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-use-from-uninlined-code.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/arrowfunction-syntax-errors.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-dead-variable-on-exit.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-array-pop-side-effects.js.layout
jsc-layout-tests.yaml/js/script-tests/array-unscopables-properties.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/weakref-weakset-consistency.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-arrayify-elimination.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-join.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-compare-final-object-to-final-object-or-other-when-proven-final-object.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/Miscellaneous/HasOnlyWritableDataPropertiesCache.js.default
ChakraCore.yaml/ChakraCore/test/UnifiedRegex/class-case.js.default
jsc-layout-tests.yaml/js/script-tests/dfg-arguments-alias-escape.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/object-literal-duplicate-properties.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-simple.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regexp-unicode-properties.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/typedarray-zero-size.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/comparison-operators.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-array-push-bad-time.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-arguments-cross-code-origin.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-arguments-mutated-structure.js.layout
jsc-layout-tests.yaml/js/script-tests/dfg-arguments-mutated-structure.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-length-shortening.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-151279.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/apply-varargs.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/arrowfunction-lexical-bind-arguments-strict.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/function-apply-many-args.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-array-pop-value-clearing.js.layout
jsc-layout-tests.yaml/js/script-tests/intl-collator.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-150220.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/sort-with-side-effecting-comparisons.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-create-inlined-arguments-in-closure-inline.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-branch-not-fail.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-convert-this-dom-window.js.layout
jsc-layout-tests.yaml/js/script-tests/dfg-to-string-on-value.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/object-slow-put.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-sort-reentrance.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/arraybuffer-wrappers.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dictionary-no-cache.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/arrowfunction-lexical-bind-arguments-non-strict.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/comparison-operators-greater.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/comparison-operators-less.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/setPrototypeOf.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-ensure-array-storage-on-string.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-put-scoped-var-backward-flow.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/arguments-bad-index.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/basic-set.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-arguments-alias-escape.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regexp-in-and-foreach-handling.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-enumerators-functions.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-redundant-load-of-captured-variable-proven-constant.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/fast/regex/script-tests/dotstar.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/symbol-abstract-relational-comparison.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/UnifiedRegex/WOOB1138949.js.default
jsc-layout-tests.yaml/js/script-tests/array-sort-small-sparse-array-with-large-length.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-ensure-contiguous-on-string.js.layout
jsc-layout-tests.yaml/js/script-tests/dfg-sqrt-backwards-propagation.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/basic-map.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/weakref-weakset-consistency.js.layout
jsc-layout-tests.yaml/js/script-tests/string-sort.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-side-effect-assignment-osr-exit.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-bad-time.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/weakref-async-is-collected.js.layout
jsc-layout-tests.yaml/js/script-tests/function-dot-arguments.js.layout-ftl-eager-no-cjit
ChakraCore.yaml/ChakraCore/test/Array/array_slice.js.default
jsc-layout-tests.yaml/js/script-tests/basic-for-of.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/sort-stability.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/date-set-to-nan.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/intl.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-int32array.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-get-by-val-clobber.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/repeat-cached-vm-reentry.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-151279.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regexp-many-brackets.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/weakref-microtasks-dont-collect.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/reserved-words.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-int32array-overflow-values.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/weakref-weakset-consistency.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-inline-arguments-use-from-all-the-places.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-cfg-simplify-redundant-dead-get-local.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-reduceRight.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/integer-division-neg2tothe32-by-neg1.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-double-vote-fuzz.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/get-by-pname-that-looks-like-a-patchable-get-by-val.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/regress-150513.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/intl-pluralrules.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/for-in-modify-in-loop.js.layout-ftl-no-cjit
jsc-layout-tests.yaml/fast/regex/script-tests/parentheses.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-filter.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/array-from.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-inline-identity.js.layout-ftl-eager-no-cjit
jsc-layout-tests.yaml/js/script-tests/dfg-array-push-bad-time.js.layout
apiTests