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

Side by Side Diff: test/mjsunit/arguments-deopt.js

Issue 2729163002: [turbofan] compute arguments length in deoptimizer (Closed)
Patch Set: fix comment Created 3 years, 9 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
« no previous file with comments | « src/objects.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 the V8 project authors. All rights reserved. 1 // Copyright 2017 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 --turbo 5 // Flags: --allow-natives-syntax --turbo
6 6
7 (function MaterializeStrictArguments() { 7 (function MaterializeStrictArguments() {
8 "use strict" 8 "use strict"
9 9
10 function f(x, y) { 10 function f(x, y) {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 assertEquals(test4(1, 2, 3), 6); 89 assertEquals(test4(1, 2, 3), 6);
90 })(); 90 })();
91 91
92 (function ArgumentsAccessStrict () { 92 (function ArgumentsAccessStrict () {
93 "use strict" 93 "use strict"
94 function sum1(a,b,c) { 94 function sum1(a,b,c) {
95 var sum = 0; 95 var sum = 0;
96 var rest = arguments; 96 var rest = arguments;
97 for (var i = 0; i < rest.length; ++i) { 97 for (var i = 0; i < rest.length; ++i) {
98 var j = i; 98 var j = i;
99 if (rest.length % 15 == 0 && i == 10) j += rest.length; 99 if (rest.length % 15 == 0 && i == 10) j += 10000;
100 sum += rest[j] || rest[j-rest.length]; 100 sum += rest[j] || i+1;
101 } 101 }
102 return sum; 102 return sum;
103 }; 103 };
104 104
105 var args = [] 105 var args = []
106 for (var i = 1; i < 30; ++i) { 106 for (var i = 1; i < 30; ++i) {
107 args.push(i); 107 args.push(i);
108 if (i%10 == 0) %OptimizeFunctionOnNextCall(sum1); 108 if (i%10 == 0) %OptimizeFunctionOnNextCall(sum1);
109 assertEquals(i*(i+1)/2, sum1(...args)); 109 assertEquals(i*(i+1)/2, sum1(...args));
110 } 110 }
111 })(); 111 })();
112 112
113 (function ArgumentsAccessSloppy () { 113 (function ArgumentsAccessSloppy () {
114 function sum2(a,b,c) { 114 function sum2(a,b,c) {
115 var sum = 0; 115 var sum = 0;
116 var rest = arguments; 116 for (var i = 0; i < arguments.length; ++i) {
117 for (var i = 0; i < rest.length; ++i) {
118 var j = i; 117 var j = i;
119 if (rest.length % 15 == 0 && i == 10) j += rest.length; 118 if (arguments.length % 15 == 0 && i == 10) j += 10000;
120 sum += rest[j] || rest[j-rest.length]; 119 sum += arguments[j] || i+1;
121 } 120 }
122 return sum; 121 return sum;
123 }; 122 };
124 123
125 var args = [] 124 var args = []
126 for (var i = 1; i < 30; ++i) { 125 for (var i = 1; i < 30; ++i) {
127 args.push(i); 126 args.push(i);
128 if (i%10 == 0) %OptimizeFunctionOnNextCall(sum2); 127 if (i%10 == 0) %OptimizeFunctionOnNextCall(sum2);
129 assertEquals(i*(i+1)/2, sum2(...args)); 128 assertEquals(i*(i+1)/2, sum2(...args));
130 } 129 }
131 })(); 130 })();
132 131
133 (function RestAccess0 () { 132 (function RestAccess0 () {
134 function sum3(...rest) { 133 function sum3(...rest) {
135 var sum = 0; 134 var sum = 0;
136 for (var i = 0; i < rest.length; ++i) { 135 for (var i = 0; i < rest.length; ++i) {
137 var j = i; 136 var j = i;
138 if (rest.length % 15 == 0 && i == 10) j += rest.length; 137 if (rest.length % 15 == 0 && i == 10) j += 10000;
139 sum += rest[j] || rest[j-rest.length]; 138 sum += rest[j] || i+1;
140 } 139 }
141 return sum; 140 return sum;
142 }; 141 };
143 142
144 var args = [] 143 var args = []
145 for (var i = 1; i < 30; ++i) { 144 for (var i = 1; i < 30; ++i) {
146 args.push(i); 145 args.push(i);
147 if (i%10 == 0) %OptimizeFunctionOnNextCall(sum3); 146 if (i%10 == 0) %OptimizeFunctionOnNextCall(sum3);
148 assertEquals(i*(i+1)/2, sum3(...args)); 147 assertEquals(i*(i+1)/2, sum3(...args));
149 } 148 }
150 })(); 149 })();
151 150
152 (function RestAccess1 () { 151 (function RestAccess1 () {
153 function sum4(a,...rest) { 152 function sum4(a,...rest) {
154 var sum = 0; 153 var sum = 0;
155 for (var i = 0; i < rest.length; ++i) { 154 for (var i = 0; i < rest.length; ++i) {
156 var j = i; 155 var j = i;
157 if (rest.length % 15 == 0 && i == 10) j += rest.length; 156 if (rest.length % 15 == 0 && i == 10) j += 10000;
158 sum += rest[j] || rest[j-rest.length]; 157 sum += rest[j] || i+2;
159 } 158 }
160 return sum; 159 return sum;
161 }; 160 };
162 161
163 var args = [] 162 var args = []
164 for (var i = 1; i < 30; ++i) { 163 for (var i = 1; i < 30; ++i) {
165 args.push(i); 164 args.push(i);
166 if (i%10 == 0) %OptimizeFunctionOnNextCall(sum4); 165 if (i%10 == 0) %OptimizeFunctionOnNextCall(sum4);
167 assertEquals(i*(i+1)/2-1, sum4(...args)); 166 assertEquals(i*(i+1)/2-1, sum4(...args));
168 } 167 }
169 })(); 168 })();
169
170
171 (function ReadArguments () {
172 function read() {
173 if (arguments.length % 10 == 5) %DeoptimizeNow();
174 return arguments[arguments.length-1];
175 };
176
177 var args = []
178 for (var i = 1; i < 30; ++i) {
179 args.push(i);
180 if (i%10 == 0) %OptimizeFunctionOnNextCall(read);
181 assertEquals(i, read(...args));
182 }
183 })();
OLDNEW
« no previous file with comments | « src/objects.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698