// Copyright 2017 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 var f32 = new Float32Array(20); function foo(f32, deopt) { var f0 = f32[0]; var f1 = f32[1]; var f2 = f32[2]; var f3 = f32[3]; var f4 = f32[4]; var f5 = f32[5]; var f6 = f32[6]; var f7 = f32[7]; var f8 = f32[8]; var f9 = f32[9]; var f10 = f32[10]; var f11 = f32[11]; var f12 = f32[12]; var f13 = f32[13]; var f14 = f32[14]; var f15 = f32[15]; var f16 = f32[16]; var f17 = f32[17]; var f18 = f32[18]; var f19 = f32[19]; // Side effect to force the deopt after the store. f32[0] = f1 - 1; // Here we deopt once we warm up with numbers, but then we // pass a string as {deopt}. return deopt + f0 + f1 + f2 + f3 + f4 + f5 + f6 + f7 + f8 + f9 + f10 + f11 + f12 + f13 + f14 + f15 + f16 + f17 + f18 + f19; } var s = ""; for (var i = 0; i < f32.length; i++) { f32[i] = i; s += i; } foo(f32, 0); foo(f32, 0); %OptimizeFunctionOnNextCall(foo); assertEquals("x" + s, foo(f32, "x"));