OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 // Test correct handling of phis with only environment uses that were inserted | 4 // Test correct handling of phis with only environment uses that were inserted |
5 // by store to load forwarding. | 5 // by store to load forwarding. |
6 // VMOptions=--optimization_counter_threshold=10 | 6 // VMOptions=--optimization_counter_threshold=10 |
7 | 7 |
8 import "package:expect/expect.dart"; | 8 import "package:expect/expect.dart"; |
9 | 9 |
10 class A { | 10 class A { |
(...skipping 14 matching lines...) Expand all Loading... |
25 test(a); | 25 test(a); |
26 test(b); | 26 test(b); |
27 for (var i = 0; i < 20; ++i) test(a); | 27 for (var i = 0; i < 20; ++i) test(a); |
28 Expect.equals("null", test(a)); | 28 Expect.equals("null", test(a)); |
29 Expect.equals("null", test(b)); | 29 Expect.equals("null", test(b)); |
30 | 30 |
31 // Store a non-null object into foo to trigger deoptimization of test. | 31 // Store a non-null object into foo to trigger deoptimization of test. |
32 a.foo = 123; | 32 a.foo = 123; |
33 Expect.equals("other", test(a)); | 33 Expect.equals("other", test(a)); |
34 Expect.equals("null", test(b)); | 34 Expect.equals("null", test(b)); |
| 35 |
| 36 // Test guarded fields with allocation sinking and deoptimization. |
| 37 Expect.equals(43, test_deopt(42, 1)); |
| 38 for (var i = 0; i < 20; i++) test_deopt(42, 1); |
| 39 Expect.equals(43, test_deopt(42, 1)); |
| 40 Expect.equals("aaabbb", test_deopt("aaa", "bbb")); |
35 } | 41 } |
| 42 |
| 43 |
| 44 class C { |
| 45 C(this.x, this.y); |
| 46 final x; |
| 47 final y; |
| 48 } |
| 49 |
| 50 |
| 51 test_deopt(a, b) { |
| 52 var c = new C(a, b); |
| 53 return c.x + c.y; |
| 54 } |
OLD | NEW |