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

Side by Side Diff: test/unittests/interpreter/bytecode-peephole-optimizer-unittest.cc

Issue 2118183002: [interpeter] Move to table based peephole optimizer. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Broader check for host and target arch wanting separate toolchain. Created 4 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
« no previous file with comments | « test/cctest/interpreter/bytecode_expectations/LetVariable.golden ('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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/factory.h" 7 #include "src/factory.h"
8 #include "src/interpreter/bytecode-label.h" 8 #include "src/interpreter/bytecode-label.h"
9 #include "src/interpreter/bytecode-peephole-optimizer.h" 9 #include "src/interpreter/bytecode-peephole-optimizer.h"
10 #include "src/interpreter/constant-array-builder.h" 10 #include "src/interpreter/constant-array-builder.h"
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 Flush(); 127 Flush();
128 CHECK_EQ(write_count(), 2); 128 CHECK_EQ(write_count(), 2);
129 CHECK_EQ(add, last_written()); 129 CHECK_EQ(add, last_written());
130 } 130 }
131 131
132 // Tests covering BytecodePeepholeOptimizer::UpdateCurrentBytecode(). 132 // Tests covering BytecodePeepholeOptimizer::UpdateCurrentBytecode().
133 133
134 TEST_F(BytecodePeepholeOptimizerTest, KeepJumpIfToBooleanTrue) { 134 TEST_F(BytecodePeepholeOptimizerTest, KeepJumpIfToBooleanTrue) {
135 BytecodeNode first(Bytecode::kLdaNull); 135 BytecodeNode first(Bytecode::kLdaNull);
136 BytecodeNode second(Bytecode::kJumpIfToBooleanTrue, 3); 136 BytecodeNode second(Bytecode::kJumpIfToBooleanTrue, 3);
137 BytecodeLabel label;
137 optimizer()->Write(&first); 138 optimizer()->Write(&first);
138 CHECK_EQ(write_count(), 0); 139 CHECK_EQ(write_count(), 0);
139 optimizer()->Write(&second); 140 optimizer()->WriteJump(&second, &label);
140 CHECK_EQ(write_count(), 1);
141 CHECK_EQ(last_written(), first);
142 Flush();
143 CHECK_EQ(write_count(), 2); 141 CHECK_EQ(write_count(), 2);
144 CHECK_EQ(last_written(), second); 142 CHECK_EQ(last_written(), second);
145 } 143 }
146 144
147 TEST_F(BytecodePeepholeOptimizerTest, ElideJumpIfToBooleanTrue) { 145 TEST_F(BytecodePeepholeOptimizerTest, ElideJumpIfToBooleanTrue) {
148 BytecodeNode first(Bytecode::kLdaTrue); 146 BytecodeNode first(Bytecode::kLdaTrue);
149 BytecodeNode second(Bytecode::kJumpIfToBooleanTrue, 3); 147 BytecodeNode second(Bytecode::kJumpIfToBooleanTrue, 3);
148 BytecodeLabel label;
150 optimizer()->Write(&first); 149 optimizer()->Write(&first);
151 CHECK_EQ(write_count(), 0); 150 CHECK_EQ(write_count(), 0);
152 optimizer()->Write(&second); 151 optimizer()->WriteJump(&second, &label);
153 CHECK_EQ(write_count(), 1);
154 CHECK_EQ(last_written(), first);
155 Flush();
156 CHECK_EQ(write_count(), 2); 152 CHECK_EQ(write_count(), 2);
157 CHECK_EQ(last_written().bytecode(), Bytecode::kJumpIfTrue); 153 CHECK_EQ(last_written(), second);
158 CHECK_EQ(last_written().operand(0), second.operand(0));
159 } 154 }
160 155
161 TEST_F(BytecodePeepholeOptimizerTest, KeepToBooleanLogicalNot) { 156 TEST_F(BytecodePeepholeOptimizerTest, KeepToBooleanLogicalNot) {
162 BytecodeNode first(Bytecode::kLdaNull); 157 BytecodeNode first(Bytecode::kLdaNull);
163 BytecodeNode second(Bytecode::kToBooleanLogicalNot); 158 BytecodeNode second(Bytecode::kToBooleanLogicalNot);
164 optimizer()->Write(&first); 159 optimizer()->Write(&first);
165 CHECK_EQ(write_count(), 0); 160 CHECK_EQ(write_count(), 0);
166 optimizer()->Write(&second); 161 optimizer()->Write(&second);
167 CHECK_EQ(write_count(), 1); 162 CHECK_EQ(write_count(), 1);
168 CHECK_EQ(last_written(), first); 163 CHECK_EQ(last_written(), first);
(...skipping 28 matching lines...) Expand all
197 Flush(); 192 Flush();
198 CHECK_EQ(write_count(), 2); 193 CHECK_EQ(write_count(), 2);
199 CHECK_EQ(last_written(), second); 194 CHECK_EQ(last_written(), second);
200 } 195 }
201 196
202 TEST_F(BytecodePeepholeOptimizerTest, StarRxLdarRx) { 197 TEST_F(BytecodePeepholeOptimizerTest, StarRxLdarRx) {
203 BytecodeLabel label; 198 BytecodeLabel label;
204 BytecodeNode first(Bytecode::kStar, Register(0).ToOperand()); 199 BytecodeNode first(Bytecode::kStar, Register(0).ToOperand());
205 BytecodeNode second(Bytecode::kLdar, Register(0).ToOperand()); 200 BytecodeNode second(Bytecode::kLdar, Register(0).ToOperand());
206 optimizer()->Write(&first); 201 optimizer()->Write(&first);
202 optimizer()->Write(&second);
207 CHECK_EQ(write_count(), 0); 203 CHECK_EQ(write_count(), 0);
208 optimizer()->Write(&second); 204 Flush();
209 CHECK_EQ(write_count(), 1); 205 CHECK_EQ(write_count(), 1);
210 CHECK_EQ(last_written(), first); 206 CHECK_EQ(last_written(), first);
211 Flush();
212 CHECK_EQ(write_count(), 1);
213 } 207 }
214 208
215 TEST_F(BytecodePeepholeOptimizerTest, StarRxLdarRxStatement) { 209 TEST_F(BytecodePeepholeOptimizerTest, StarRxLdarRxStatement) {
216 BytecodeNode first(Bytecode::kStar, Register(0).ToOperand()); 210 BytecodeNode first(Bytecode::kStar, Register(0).ToOperand());
217 BytecodeNode second(Bytecode::kLdar, Register(0).ToOperand()); 211 BytecodeNode second(Bytecode::kLdar, Register(0).ToOperand());
218 second.source_info().MakeStatementPosition(0); 212 second.source_info().MakeStatementPosition(0);
219 optimizer()->Write(&first); 213 optimizer()->Write(&first);
220 CHECK_EQ(write_count(), 0); 214 CHECK_EQ(write_count(), 0);
221 optimizer()->Write(&second); 215 optimizer()->Write(&second);
222 CHECK_EQ(write_count(), 1); 216 CHECK_EQ(write_count(), 1);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 CHECK_EQ(last_written(), first); 249 CHECK_EQ(last_written(), first);
256 Flush(); 250 Flush();
257 CHECK_EQ(write_count(), 2); 251 CHECK_EQ(write_count(), 2);
258 CHECK_EQ(last_written(), second); 252 CHECK_EQ(last_written(), second);
259 } 253 }
260 254
261 TEST_F(BytecodePeepholeOptimizerTest, ToNameToName) { 255 TEST_F(BytecodePeepholeOptimizerTest, ToNameToName) {
262 BytecodeNode first(Bytecode::kToName); 256 BytecodeNode first(Bytecode::kToName);
263 BytecodeNode second(Bytecode::kToName); 257 BytecodeNode second(Bytecode::kToName);
264 optimizer()->Write(&first); 258 optimizer()->Write(&first);
259 optimizer()->Write(&second);
265 CHECK_EQ(write_count(), 0); 260 CHECK_EQ(write_count(), 0);
266 optimizer()->Write(&second); 261 Flush();
267 CHECK_EQ(write_count(), 1);
268 CHECK_EQ(last_written(), first); 262 CHECK_EQ(last_written(), first);
269 Flush();
270 CHECK_EQ(write_count(), 1); 263 CHECK_EQ(write_count(), 1);
271 } 264 }
272 265
273 TEST_F(BytecodePeepholeOptimizerTest, TypeOfToName) { 266 TEST_F(BytecodePeepholeOptimizerTest, TypeOfToName) {
274 BytecodeNode first(Bytecode::kTypeOf); 267 BytecodeNode first(Bytecode::kTypeOf);
275 BytecodeNode second(Bytecode::kToName); 268 BytecodeNode second(Bytecode::kToName);
276 optimizer()->Write(&first); 269 optimizer()->Write(&first);
270 optimizer()->Write(&second);
277 CHECK_EQ(write_count(), 0); 271 CHECK_EQ(write_count(), 0);
278 optimizer()->Write(&second); 272 Flush();
279 CHECK_EQ(write_count(), 1); 273 CHECK_EQ(write_count(), 1);
280 CHECK_EQ(last_written(), first); 274 CHECK_EQ(last_written(), first);
281 Flush();
282 CHECK_EQ(write_count(), 1);
283 } 275 }
284 276
285 TEST_F(BytecodePeepholeOptimizerTest, LdaConstantStringToName) { 277 TEST_F(BytecodePeepholeOptimizerTest, LdaConstantStringToName) {
286 Handle<Object> word = 278 Handle<Object> word =
287 isolate()->factory()->NewStringFromStaticChars("optimizing"); 279 isolate()->factory()->NewStringFromStaticChars("optimizing");
288 size_t index = constant_array()->Insert(word); 280 size_t index = constant_array()->Insert(word);
289 BytecodeNode first(Bytecode::kLdaConstant, static_cast<uint32_t>(index)); 281 BytecodeNode first(Bytecode::kLdaConstant, static_cast<uint32_t>(index));
290 BytecodeNode second(Bytecode::kToName); 282 BytecodeNode second(Bytecode::kToName);
291 optimizer()->Write(&first); 283 optimizer()->Write(&first);
284 optimizer()->Write(&second);
292 CHECK_EQ(write_count(), 0); 285 CHECK_EQ(write_count(), 0);
293 optimizer()->Write(&second); 286 Flush();
294 CHECK_EQ(write_count(), 1); 287 CHECK_EQ(write_count(), 1);
295 CHECK_EQ(last_written(), first); 288 CHECK_EQ(last_written(), first);
296 Flush();
297 CHECK_EQ(write_count(), 1);
298 } 289 }
299 290
300 TEST_F(BytecodePeepholeOptimizerTest, LdaConstantNumberToName) { 291 TEST_F(BytecodePeepholeOptimizerTest, LdaConstantNumberToName) {
301 Handle<Object> word = isolate()->factory()->NewNumber(0.380); 292 Handle<Object> word = isolate()->factory()->NewNumber(0.380);
302 size_t index = constant_array()->Insert(word); 293 size_t index = constant_array()->Insert(word);
303 BytecodeNode first(Bytecode::kLdaConstant, static_cast<uint32_t>(index)); 294 BytecodeNode first(Bytecode::kLdaConstant, static_cast<uint32_t>(index));
304 BytecodeNode second(Bytecode::kToName); 295 BytecodeNode second(Bytecode::kToName);
305 optimizer()->Write(&first); 296 optimizer()->Write(&first);
306 CHECK_EQ(write_count(), 0); 297 CHECK_EQ(write_count(), 0);
307 optimizer()->Write(&second); 298 optimizer()->Write(&second);
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 CHECK_EQ(last_written().operand_count(), 2); 559 CHECK_EQ(last_written().operand_count(), 2);
569 CHECK_EQ(last_written().operand(0), 0); 560 CHECK_EQ(last_written().operand(0), 0);
570 CHECK_EQ(last_written().operand(1), reg_operand); 561 CHECK_EQ(last_written().operand(1), reg_operand);
571 Reset(); 562 Reset();
572 } 563 }
573 } 564 }
574 565
575 } // namespace interpreter 566 } // namespace interpreter
576 } // namespace internal 567 } // namespace internal
577 } // namespace v8 568 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/interpreter/bytecode_expectations/LetVariable.golden ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698