summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/compiler/dataview-deopt.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/compiler/dataview-deopt.js')
-rw-r--r--deps/v8/test/mjsunit/compiler/dataview-deopt.js58
1 files changed, 58 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/compiler/dataview-deopt.js b/deps/v8/test/mjsunit/compiler/dataview-deopt.js
new file mode 100644
index 0000000000..b19de30e5d
--- /dev/null
+++ b/deps/v8/test/mjsunit/compiler/dataview-deopt.js
@@ -0,0 +1,58 @@
+// Copyright 2018 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 --opt --no-always-opt
+
+// Check that there are no deopt loops for DataView methods.
+
+var buffer = new ArrayBuffer(64);
+var dataview = new DataView(buffer, 8, 24);
+
+// Check DataView getters.
+
+function readUint8(offset) {
+ return dataview.getUint8(offset);
+}
+
+function warmupRead(f) {
+ f(0);
+ f(1);
+ %OptimizeFunctionOnNextCall(f);
+ f(2);
+ f(3);
+}
+
+warmupRead(readUint8);
+assertOptimized(readUint8);
+readUint8(0.5); // Deopts.
+assertUnoptimized(readUint8);
+
+warmupRead(readUint8);
+assertOptimized(readUint8);
+readUint8(1.5); // Doesn't deopt because getUint8 didn't get inlined this time.
+assertOptimized(readUint8);
+
+// Check DataView setters.
+
+function writeUint8(offset, value) {
+ dataview.setUint8(offset, value);
+}
+
+function warmupWrite(f) {
+ f(0, 0);
+ f(0, 1);
+ %OptimizeFunctionOnNextCall(f);
+ f(0, 2);
+ f(0, 3);
+}
+
+warmupWrite(writeUint8);
+assertOptimized(writeUint8);
+writeUint8(0.5, 0); // Deopts.
+assertUnoptimized(writeUint8);
+
+warmupWrite(writeUint8);
+assertOptimized(writeUint8);
+writeUint8(1.5, 0); // Doesn't deopt.
+assertOptimized(writeUint8);