| // 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. |
| // VMOptions=--optimization-counter-threshold=10 --no-use-osr |
| |
| import "package:expect/expect.dart"; |
| |
| 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 < 20; 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 < 20; 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 < 20; i++) {} |
| testStoreIndexed(); |
| testIncrLocal(); |
| } |