blob: 29a9454f55fb921d6b9938620213a34c684aa9d1 [file] [log] [blame]
// Copyright 2019 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
// Case One: the template is already initialized before compilation.
let saved_array;
function tagged_function(a) {
saved_array = a;
return "something";
}
function foo(b) {
let a = tagged_function`hello ${b}`;
return a + " " + b;
}
%PrepareFunctionForOptimization(foo);
foo();
foo();
%OptimizeFunctionOnNextCall(foo);
foo();
// Case Two: the template hasn't been initialized at the point we
// do optimized compile.
function bar(b) {
if (b) {
let a = tagged_function`initialized late ${b}`;
b = a;
}
return b;
}
%PrepareFunctionForOptimization(bar);
bar();
bar();
%OptimizeFunctionOnNextCall(bar);
bar(true);
let saved_array_from_optimized_call = saved_array;
// Finally, ensure that if the function is deoptimized, the tagged-template
// code still runs. This is useful to test because TurboFan doesn't cache
// the tagged template in the feedback vector if it has to create it.
%DeoptimizeFunction(bar);
bar(true);
// Furthermore, we want to ensure that the JSArray passed to the function
// is the same.
assertSame(saved_array_from_optimized_call, saved_array);