Files
Kmake/deps/v8/test/mjsunit/turboshaft/maglev-frontend/switch.js

58 lines
1.7 KiB
JavaScript
Raw Normal View History

2026-05-26 23:36:42 -07:00
// Copyright 2024 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.
// Flags: --allow-natives-syntax --turbolev --turbofan
function f_switch(x) {
switch(x) {
// Need at least v8_flags.switch_table_min_cases (= 6) cases so that the
// bytecode optimizes this switch with a jumptable rather than generating
// cascading ifs/elses.
case 3: return 3;
case 4: return 5;
case 5: return 7;
case 6: return 11;
// hole between 6 and 9
case 9: return 13;
// hole between 9 and 13
case 13: return 17;
default: return 19;
}
}
%PrepareFunctionForOptimization(f_switch);
assertEquals(3, f_switch(3));
assertEquals(5, f_switch(4));
assertEquals(7, f_switch(5));
assertEquals(11, f_switch(6));
assertEquals(13, f_switch(9));
assertEquals(17, f_switch(13));
// Testing holes/default case
assertEquals(19, f_switch(0));
assertEquals(19, f_switch(2));
assertEquals(19, f_switch(7));
assertEquals(19, f_switch(8));
assertEquals(19, f_switch(10));
assertEquals(19, f_switch(12));
assertEquals(19, f_switch(42));
%OptimizeFunctionOnNextCall(f_switch);
assertEquals(3, f_switch(3));
assertOptimized(f_switch);
assertEquals(5, f_switch(4));
assertEquals(7, f_switch(5));
assertEquals(11, f_switch(6));
assertEquals(13, f_switch(9));
assertEquals(17, f_switch(13));
assertOptimized(f_switch);
// Testing holes/default case
assertEquals(19, f_switch(0));
assertEquals(19, f_switch(2));
assertEquals(19, f_switch(7));
assertEquals(19, f_switch(8));
assertEquals(19, f_switch(10));
assertEquals(19, f_switch(12));
assertEquals(19, f_switch(42));
assertOptimized(f_switch);