0832a1093d
This is a reland of2000aea58a
Changes compared to last reland: - Add rule in variants.py for --enable_experimental_regexp_engine. - Make sure --abort-on-contradictory-flags works as well as --fuzzing to disable the checking for fuzzers, including for d8 flags. Original change's description: > Reland^4 "[flags] warn about contradictory flags" > > This is a reland of0ba115e6a9
> Changes compared to last reland: > - Fix Python code trying to write to expected_outcomes, which is now a > computed property. > - Fix remaining place in d8.cc that ignored the --fuzzing flag. > - Expect flag contradictions for --cache in code_serializer variant. > > Original change's description: > > Reland^3 "[flags] warn about contradictory flags" > > > > Changes: > > - Also allow second parameter influenced by --cache to be reassigned. > > - Fix --stress-opt to only --always-opt in the last iteration as before. > > > > Original change's description: > > > Reland^2 "[flags] warn about contradictory flags" > > > > > > This is a reland ofd8f8a7e210
> > > Change compared to last reland: > > > - Do not check for d8 flag contradictions in the presence of --fuzzing > > > - Allow identical re-declaration of --cache=* > > > > > > Original change's description: > > > > Reland "[flags] warn about contradictory flags" > > > > > > > > This is a reland ofb8f9166664
> > > > Difference to previous CL: Additional functionality to specify > > > > incompatible flags based on GN variables and extra-flags, used > > > > to fix the issues that came up on the waterfall. > > > > > > > > This also changes the rules regarding repeated flags: While > > > > explicitly repeated flags are allowed for boolean values as long > > > > as they are identical, repeated flags or explicit flags in the > > > > presence of an active implication are disallowed for non-boolean > > > > flags. The latter simplifies specifying conflict rules in > > > > variants.py. Otherwise a rule like > > > > > > > > INCOMPATIBLE_FLAGS_PER_EXTRA_FLAG = { > > > > "--gc-interval=*": ["--gc-interval=*"], > > > > } > > > > > > > > wouldn't work because specifying the same GC interval twice > > > > wouldn't actually count as a conflict. This was an issue with > > > > test/mjsunit/wasm/gc-buffer.js, which specifies > > > > --gc-interval=500 exactly like the extra flag by the stress bot. > > > > > > > > Also, this now expands contradictory flags checking to d8 flags > > > > for consistency. > > > > > > > > Original change's description: > > > > > [flags] warn about contradictory flags > > > > > > > > > > Design Doc: https://docs.google.com/document/d/1lkvu8crkK7Ei39qjkPCFijpNyxWXsOktG9GB-7K34jM/ > > > > > > > > > > Bug: v8:10577 > > > > > Change-Id: Ib9cfdffa401c48c895bf31caed5ee03545beddab > > > > > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2154792 > > > > > Reviewed-by: Clemens Backes <clemensb@chromium.org> > > > > > Reviewed-by: Michael Achenbach <machenbach@chromium.org> > > > > > Reviewed-by: Georg Neis <neis@chromium.org> > > > > > Reviewed-by: Tamer Tas <tmrts@chromium.org> > > > > > Commit-Queue: Tobias Tebbi <tebbi@chromium.org> > > > > > Cr-Commit-Position: refs/heads/master@{#68168} > > > > > > > > Bug: v8:10577 > > > > Change-Id: I268e590ee18a535b13dee14eeb15ddd0a9ee8341 > > > > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2235115 > > > > Commit-Queue: Tobias Tebbi <tebbi@chromium.org> > > > > Reviewed-by: Tamer Tas <tmrts@chromium.org> > > > > Reviewed-by: Clemens Backes <clemensb@chromium.org> > > > > Reviewed-by: Georg Neis <neis@chromium.org> > > > > Cr-Commit-Position: refs/heads/master@{#68989} > > > > > > Bug: v8:10577 > > > Change-Id: I31d2794d4f9ff630f3444210100c64d67d881276 > > > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2339464 > > > Commit-Queue: Tobias Tebbi <tebbi@chromium.org> > > > Reviewed-by: Clemens Backes <clemensb@chromium.org> > > > Cr-Commit-Position: refs/heads/master@{#69339} > > > > Bug: v8:10577 > > Cq-Include-Trybots: luci.v8.try:v8_linux64_tsan_rel_ng > > Cq-Include-Trybots: luci.v8.try:v8_linux64_tsan_isolates_rel_ng > > Change-Id: I4a69dc57a102782cb453144323e3752ac8278624 > > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2352770 > > Commit-Queue: Tobias Tebbi <tebbi@chromium.org> > > Reviewed-by: Tobias Tebbi <tebbi@chromium.org> > > Reviewed-by: Clemens Backes <clemensb@chromium.org> > > Cr-Commit-Position: refs/heads/master@{#69433} > > Change-Id: Ib6d2aeb495210f581ac671221c265df58e8e5e70 > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2398640 > Commit-Queue: Tobias Tebbi <tebbi@chromium.org> > Reviewed-by: Clemens Backes <clemensb@chromium.org> > Reviewed-by: Tamer Tas <tmrts@chromium.org> > Cr-Commit-Position: refs/heads/master@{#69954} Bug: v8:10577 TBR: clemensb@chromium.org, tmrts@chromium.org Change-Id: Iab2d32cdcc2648934fc52255ccf3ae3ec9ca4d9b Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2416386 Reviewed-by: Tobias Tebbi <tebbi@chromium.org> Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#70000}
96 lines
2.8 KiB
JavaScript
96 lines
2.8 KiB
JavaScript
// Copyright 2015 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// The flags are processed left to right. --no-abort-on-contradictory-flags
|
|
// disables the checking for conflicts, then we process --noverify-heap and
|
|
// --noenable-slow-asserts, which the test runner already set to true before.
|
|
// This causes the flags to be overwritten while silencing the error. Then we
|
|
// re-enable --abort-on-contradictory-flags to make sure that the processing of
|
|
// other flags and flag implications, which happens later, still produces
|
|
// errors.
|
|
// Flags: --no-abort-on-contradictory-flags --noverify-heap --noenable-slow-asserts --abort-on-contradictory-flags
|
|
// Flags: --allow-natives-syntax --opt --no-always-opt
|
|
|
|
// --noverify-heap and --noenable-slow-asserts are set because the test is too
|
|
// slow with it on.
|
|
|
|
// Ensure that keyed stores work, and optimized functions learn if the
|
|
// store required change to dictionary mode. Verify that stores that grow
|
|
// the array into large object space don't cause a deopt.
|
|
(function() {
|
|
var a = [];
|
|
|
|
function foo(a, i) {
|
|
a[i] = 5.3;
|
|
}
|
|
|
|
%PrepareFunctionForOptimization(foo);
|
|
foo(a, 1);
|
|
foo(a, 2);
|
|
foo(a, 3);
|
|
%OptimizeFunctionOnNextCall(foo);
|
|
a[3] = 0;
|
|
foo(a, 3);
|
|
assertEquals(a[3], 5.3);
|
|
foo(a, 50000);
|
|
assertUnoptimized(foo);
|
|
assertTrue(%HasDictionaryElements(a));
|
|
|
|
%PrepareFunctionForOptimization(foo);
|
|
var b = [];
|
|
foo(b, 1);
|
|
foo(b, 2);
|
|
// Put b in dictionary mode.
|
|
b[10000] = 5;
|
|
assertTrue(%HasDictionaryElements(b));
|
|
foo(b, 3);
|
|
%PrepareFunctionForOptimization(foo);
|
|
%OptimizeFunctionOnNextCall(foo);
|
|
foo(b, 50000);
|
|
assertOptimized(foo);
|
|
assertTrue(%HasDictionaryElements(b));
|
|
|
|
// Clearing feedback for the StoreIC in foo is important for runs with
|
|
// flag --stress-opt.
|
|
%ClearFunctionFeedback(foo);
|
|
})();
|
|
|
|
|
|
(function() {
|
|
var a = new Array(10);
|
|
|
|
function foo2(a, i) {
|
|
a[i] = 50;
|
|
}
|
|
|
|
// The KeyedStoreIC will learn GROW_MODE.
|
|
%PrepareFunctionForOptimization(foo2);
|
|
foo2(a, 10);
|
|
foo2(a, 12);
|
|
foo2(a, 31);
|
|
%OptimizeFunctionOnNextCall(foo2);
|
|
foo2(a, 40);
|
|
|
|
assertOptimized(foo2);
|
|
assertTrue(%HasSmiElements(a));
|
|
|
|
// Grow a large array into large object space through the keyed store
|
|
// without deoptimizing. Grow by 9s. If we set elements too sparsely, the
|
|
// array will convert to dictionary mode.
|
|
a = new Array(99999);
|
|
assertTrue(%HasSmiElements(a));
|
|
for (var i = 0; i < 263000; i += 9) {
|
|
foo2(a, i);
|
|
}
|
|
|
|
// Verify that we are over 1 page in size, and foo2 remains optimized.
|
|
// This means we've smoothly transitioned to allocating in large object
|
|
// space.
|
|
assertTrue(%HasSmiElements(a));
|
|
assertTrue(a.length * 4 > (1024 * 1024));
|
|
assertOptimized(foo2);
|
|
|
|
%ClearFunctionFeedback(foo2);
|
|
})();
|