Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(971)

Side by Side Diff: tests/language/optimized_setter_test.dart

Issue 18563006: More tests updated to optimize code (Part 2). (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 various setter situations, testing special cases in optimizing compiler. 4 // Test various setter situations, testing special cases in optimizing compiler.
5 // VMOptions=--optimization-counter-threshold=10 --no-use-osr
5 6
6 import "package:expect/expect.dart"; 7 import "package:expect/expect.dart";
7 8
8 class A { 9 class A {
9 int field = 0; 10 int field = 0;
10 } 11 }
11 12
12 class B extends A { 13 class B extends A {
13 } 14 }
14 15
15 16
16 void sameImplicitSetter() { 17 void sameImplicitSetter() {
17 oneTarget(var a, var v) { 18 oneTarget(var a, var v) {
18 a.field = v; 19 a.field = v;
19 } 20 }
20 21
21 A a = new A(); 22 A a = new A();
22 B b = new B(); 23 B b = new B();
23 // Optimize 'oneTarget' for one class, one target. 24 // Optimize 'oneTarget' for one class, one target.
24 for (int i = 0; i < 2000; i++) { 25 for (int i = 0; i < 20; i++) {
25 oneTarget(a, 5); 26 oneTarget(a, 5);
26 Expect.equals(5, a.field); 27 Expect.equals(5, a.field);
27 } 28 }
28 // Deoptimize 'oneTarget', since class B is not expected. 29 // Deoptimize 'oneTarget', since class B is not expected.
29 oneTarget(b, 6); 30 oneTarget(b, 6);
30 Expect.equals(6, b.field); 31 Expect.equals(6, b.field);
31 // Optimize 'oneTarget' for A and B classes, one target. 32 // Optimize 'oneTarget' for A and B classes, one target.
32 for (int i = 0; i < 2000; i++) { 33 for (int i = 0; i < 20; i++) {
33 oneTarget(a, 7); 34 oneTarget(a, 7);
34 Expect.equals(7, a.field); 35 Expect.equals(7, a.field);
35 } 36 }
36 oneTarget(b, 8); 37 oneTarget(b, 8);
37 Expect.equals(8, b.field); 38 Expect.equals(8, b.field);
38 } 39 }
39 40
40 41
41 // Deoptimize when no feedback exists. 42 // Deoptimize when no feedback exists.
42 void setterNoFeedback() { 43 void setterNoFeedback() {
43 maybeSet(var a, var v, bool set_it) { 44 maybeSet(var a, var v, bool set_it) {
44 if (set_it) { 45 if (set_it) {
45 return a.field = v; 46 return a.field = v;
46 } 47 }
47 return -1; 48 return -1;
48 } 49 }
49 50
50 A a = new A(); 51 A a = new A();
51 for (int i = 0; i < 2000; i++) { 52 for (int i = 0; i < 20; i++) {
52 var r = maybeSet(a, 5, false); 53 var r = maybeSet(a, 5, false);
53 Expect.equals(0, a.field); 54 Expect.equals(0, a.field);
54 Expect.equals(-1, r); 55 Expect.equals(-1, r);
55 } 56 }
56 var r = maybeSet(a, 5, true); 57 var r = maybeSet(a, 5, true);
57 Expect.equals(5, a.field); 58 Expect.equals(5, a.field);
58 Expect.equals(5, r); 59 Expect.equals(5, r);
59 for (int i = 0; i < 2000; i++) { 60 for (int i = 0; i < 20; i++) {
60 var r = maybeSet(a, 6, true); 61 var r = maybeSet(a, 6, true);
61 Expect.equals(6, a.field); 62 Expect.equals(6, a.field);
62 Expect.equals(6, r); 63 Expect.equals(6, r);
63 } 64 }
64 } 65 }
65 66
66 // Check non-implicit setter 67 // Check non-implicit setter
67 class X { 68 class X {
68 int pField = 0; 69 int pField = 0;
69 set field(v) { pField = v; } 70 set field(v) { pField = v; }
70 get field => 10; 71 get field => 10;
71 } 72 }
72 73
73 void sameNotImplicitSetter() { 74 void sameNotImplicitSetter() {
74 oneTarget(var a, var v) { 75 oneTarget(var a, var v) {
75 return a.field = v; 76 return a.field = v;
76 } 77 }
77 78
78 incField(var a) { 79 incField(var a) {
79 a.field++; 80 a.field++;
80 } 81 }
81 82
82 X x = new X(); 83 X x = new X();
83 for (int i = 0; i < 2000; i++) { 84 for (int i = 0; i < 20; i++) {
84 var r = oneTarget(x, 3); 85 var r = oneTarget(x, 3);
85 Expect.equals(3, x.pField); 86 Expect.equals(3, x.pField);
86 Expect.equals(3, r); 87 Expect.equals(3, r);
87 } 88 }
88 oneTarget(x, 0); 89 oneTarget(x, 0);
89 for (int i = 0; i < 2000; i++) { 90 for (int i = 0; i < 20; i++) {
90 incField(x); 91 incField(x);
91 } 92 }
92 Expect.equals(11, x.pField); 93 Expect.equals(11, x.pField);
93 } 94 }
94 95
95 class Y { 96 class Y {
96 int field = 0; 97 int field = 0;
97 } 98 }
98 99
99 100
100 multiImplicitSetter() { 101 multiImplicitSetter() {
101 oneTarget(var a, var v) { 102 oneTarget(var a, var v) {
102 return a.field = v; 103 return a.field = v;
103 } 104 }
104 105
105 // Both classes 'Y' and 'A' have a distinct field getter. 106 // Both classes 'Y' and 'A' have a distinct field getter.
106 A a = new A(); 107 A a = new A();
107 Y y = new Y(); 108 Y y = new Y();
108 for (int i = 0; i < 2000; i++) { 109 for (int i = 0; i < 20; i++) {
109 var r = oneTarget(a, 5); 110 var r = oneTarget(a, 5);
110 Expect.equals(5, a.field); 111 Expect.equals(5, a.field);
111 Expect.equals(5, r); 112 Expect.equals(5, r);
112 r = oneTarget(y, 6); 113 r = oneTarget(y, 6);
113 Expect.equals(6, y.field); 114 Expect.equals(6, y.field);
114 Expect.equals(6, r); 115 Expect.equals(6, r);
115 } 116 }
116 } 117 }
117 118
118 class Z { 119 class Z {
119 int pField = 0; 120 int pField = 0;
120 set field(v) { pField = v; } 121 set field(v) { pField = v; }
121 get field => 10; 122 get field => 10;
122 } 123 }
123 124
124 multiNotImplicitSetter() { 125 multiNotImplicitSetter() {
125 oneTarget(var a, var v) { 126 oneTarget(var a, var v) {
126 return a.field = v; 127 return a.field = v;
127 } 128 }
128 129
129 Y y = new Y(); 130 Y y = new Y();
130 Z z = new Z(); 131 Z z = new Z();
131 for (int i = 0; i < 2000; i++) { 132 for (int i = 0; i < 20; i++) {
132 var r = oneTarget(y, 8); 133 var r = oneTarget(y, 8);
133 Expect.equals(8, y.field); 134 Expect.equals(8, y.field);
134 Expect.equals(8, r); 135 Expect.equals(8, r);
135 r = oneTarget(z, 12); 136 r = oneTarget(z, 12);
136 Expect.equals(12, z.pField); 137 Expect.equals(12, z.pField);
137 Expect.equals(12, r); 138 Expect.equals(12, r);
138 } 139 }
139 A a = new A(); 140 A a = new A();
140 var r = oneTarget(a, 11); 141 var r = oneTarget(a, 11);
141 Expect.equals(11, a.field); 142 Expect.equals(11, a.field);
142 Expect.equals(11, r); 143 Expect.equals(11, r);
143 } 144 }
144 145
145 void main() { 146 void main() {
146 for (int i = 0; i< 2000; i++) {} 147 for (int i = 0; i< 20; i++) {}
zra 2013/07/11 20:11:28 What's the point of this loop?
srdjan 2013/07/11 20:15:32 Don't know. Will remove it.
147 sameImplicitSetter(); 148 sameImplicitSetter();
148 setterNoFeedback(); 149 setterNoFeedback();
149 sameNotImplicitSetter(); 150 sameNotImplicitSetter();
150 151
151 multiImplicitSetter(); 152 multiImplicitSetter();
152 multiNotImplicitSetter(); 153 multiNotImplicitSetter();
153 } 154 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698