| Index: tests/language/src/DeoptNoFeedbackTest.dart
|
| ===================================================================
|
| --- tests/language/src/DeoptNoFeedbackTest.dart (revision 0)
|
| +++ tests/language/src/DeoptNoFeedbackTest.dart (revision 0)
|
| @@ -0,0 +1,53 @@
|
| +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +// Test deoptimization caused by running code that did not collect type
|
| +// feedback before.
|
| +
|
| +testStoreIndexed() {
|
| + test(a, i, v, flag) {
|
| + if (flag) {
|
| + // No type feedback in first pass
|
| + return a[i] = v;
|
| + } else {
|
| + return a[i] = i;
|
| + }
|
| + }
|
| +
|
| + var a = new List(10);
|
| + for (var i = 0; i < 2000; i++) {
|
| + var r = test(a, 3, 888, false);
|
| + Expect.equals(3, r);
|
| + Expect.equals(3, a[3]);
|
| + }
|
| + // Deopt.
|
| + var r = test(a, 3, 888, true);
|
| + Expect.equals(888, r);
|
| + Expect.equals(888, a[3]);
|
| +}
|
| +
|
| +testIncrLocal() {
|
| + test(a, flag) {
|
| + if (flag) {
|
| + a++;
|
| + return a;
|
| + } else {
|
| + return -1;
|
| + }
|
| + }
|
| +
|
| + for (var i = 0; i < 2000; i++) {
|
| + var r = test(10, false);
|
| + Expect.equals(-1, r);
|
| + }
|
| + // Deopt.
|
| + var r = test(10, true);
|
| + Expect.equals(11, r);
|
| +}
|
| +
|
| +
|
| +main() {
|
| + for (var i = 0; i < 2000; i++) {}
|
| + testStoreIndexed();
|
| + testIncrLocal();
|
| +}
|
|
|