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

Side by Side Diff: test/mjsunit/field-type-tracking.js

Issue 2598543003: [runtime][ic] Constant field tracking support. (Closed)
Patch Set: Created 3 years, 10 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
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Flags: --allow-natives-syntax --nostress-opt --track-field-types 5 // Flags: --allow-natives-syntax --nostress-opt --track-field-types
6 6
7 (function() { 7 (function() {
8 var o = { text: "Hello World!" }; 8 var o = { text: "Hello World!" };
9 function A() { 9 function A() {
10 // Assign twice to make the field non-constant.
11 // TODO(ishell): update test once constant field tracking is done.
12 this.a = {text: 'foo'};
10 this.a = o; 13 this.a = o;
11 } 14 }
12 function readA(x) { 15 function readA(x) {
13 return x.a; 16 return x.a;
14 } 17 }
15 var a = new A(); 18 var a = new A();
16 assertUnoptimized(readA); 19 assertUnoptimized(readA);
17 readA(a); readA(a); readA(a); 20 readA(a); readA(a); readA(a);
18 %OptimizeFunctionOnNextCall(readA); 21 %OptimizeFunctionOnNextCall(readA);
19 assertEquals(readA(a), o); 22 assertEquals(readA(a), o);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 x = JSON.parse('{"a":"Short"}'); 103 x = JSON.parse('{"a":"Short"}');
101 })(); 104 })();
102 105
103 (function() { 106 (function() {
104 var x = {y: {z: 1}}; 107 var x = {y: {z: 1}};
105 x.y.z = 1.1; 108 x.y.z = 1.1;
106 })(); 109 })();
107 110
108 (function() { 111 (function() {
109 function Foo(x) { this.x = x; } 112 function Foo(x) { this.x = x; }
113 // TODO(ishell): update test once constant field tracking is done.
114 var f0 = new Foo({x: 0});
115 f0.x = {x: 0}; // make Foo.x non-constant here.
110 var f1 = new Foo({x: 1}); 116 var f1 = new Foo({x: 1});
111 var f2 = new Foo({x: 2}); 117 var f2 = new Foo({x: 2});
112 var f3 = new Foo({x: 3}); 118 var f3 = new Foo({x: 3});
113 function readX(f) { return f.x.x; } 119 function readX(f) { return f.x.x; }
114 assertEquals(readX(f1), 1); 120 assertEquals(readX(f1), 1);
115 assertEquals(readX(f2), 2); 121 assertEquals(readX(f2), 2);
116 assertUnoptimized(readX); 122 assertUnoptimized(readX);
117 %OptimizeFunctionOnNextCall(readX); 123 %OptimizeFunctionOnNextCall(readX);
118 assertEquals(readX(f3), 3); 124 assertEquals(readX(f3), 3);
119 assertOptimized(readX); 125 assertOptimized(readX);
(...skipping 16 matching lines...) Expand all
136 })(); 142 })();
137 143
138 (function() { 144 (function() {
139 function Narf(x) { this.x = x; } 145 function Narf(x) { this.x = x; }
140 var f1 = new Narf(1); 146 var f1 = new Narf(1);
141 var f2 = new Narf(2); 147 var f2 = new Narf(2);
142 var f3 = new Narf(3); 148 var f3 = new Narf(3);
143 function baz(f, y) { f.y = y; } 149 function baz(f, y) { f.y = y; }
144 baz(f1, {y: 9}); 150 baz(f1, {y: 9});
145 baz(f2, {y: 9}); 151 baz(f2, {y: 9});
152 baz(f2, {y: 9});
146 %OptimizeFunctionOnNextCall(baz); 153 %OptimizeFunctionOnNextCall(baz);
154 baz(f2, {y: 9});
147 baz(f3, {a: -1}); 155 baz(f3, {a: -1});
148 assertUnoptimized(baz); 156 assertUnoptimized(baz);
149 })(); 157 })();
150 158
151 (function() { 159 (function() {
152 function Foo(x) { this.x = x; this.a = x; } 160 function Foo(x) { this.x = x; this.a = x; }
153 function Bar(x) { this.x = x; this.b = x; } 161 function Bar(x) { this.x = x; this.b = x; }
154 function readA(o) { return o.x.a; } 162 function readA(o) { return o.x.a; }
155 var f = new Foo({a:1}); 163 var f = new Foo({a:1});
156 var b = new Bar({a:2}); 164 var b = new Bar({a:2});
157 assertEquals(readA(f), 1); 165 assertEquals(readA(f), 1);
158 assertEquals(readA(b), 2); 166 assertEquals(readA(b), 2);
159 assertEquals(readA(f), 1); 167 assertEquals(readA(f), 1);
160 assertEquals(readA(b), 2); 168 assertEquals(readA(b), 2);
161 %OptimizeFunctionOnNextCall(readA); 169 %OptimizeFunctionOnNextCall(readA);
162 assertEquals(readA(f), 1); 170 assertEquals(readA(f), 1);
163 assertEquals(readA(b), 2); 171 assertEquals(readA(b), 2);
164 assertOptimized(readA); 172 assertOptimized(readA);
165 f.a.y = 0; 173 f.a.y = 0;
166 assertUnoptimized(readA); 174 assertUnoptimized(readA);
167 })(); 175 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698