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

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

Issue 2161563002: Revert of [interpeter] Move to table based peephole optimizer. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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;
138 optimizer()->Write(&first); 137 optimizer()->Write(&first);
139 CHECK_EQ(write_count(), 0); 138 CHECK_EQ(write_count(), 0);
140 optimizer()->WriteJump(&second, &label); 139 optimizer()->Write(&second);
140 CHECK_EQ(write_count(), 1);
141 CHECK_EQ(last_written(), first);
142 Flush();
141 CHECK_EQ(write_count(), 2); 143 CHECK_EQ(write_count(), 2);
142 CHECK_EQ(last_written(), second); 144 CHECK_EQ(last_written(), second);
143 } 145 }
144 146
145 TEST_F(BytecodePeepholeOptimizerTest, ElideJumpIfToBooleanTrue) { 147 TEST_F(BytecodePeepholeOptimizerTest, ElideJumpIfToBooleanTrue) {
146 BytecodeNode first(Bytecode::kLdaTrue); 148 BytecodeNode first(Bytecode::kLdaTrue);
147 BytecodeNode second(Bytecode::kJumpIfToBooleanTrue, 3); 149 BytecodeNode second(Bytecode::kJumpIfToBooleanTrue, 3);
148 BytecodeLabel label;
149 optimizer()->Write(&first); 150 optimizer()->Write(&first);
150 CHECK_EQ(write_count(), 0); 151 CHECK_EQ(write_count(), 0);
151 optimizer()->WriteJump(&second, &label); 152 optimizer()->Write(&second);
153 CHECK_EQ(write_count(), 1);
154 CHECK_EQ(last_written(), first);
155 Flush();
152 CHECK_EQ(write_count(), 2); 156 CHECK_EQ(write_count(), 2);
153 CHECK_EQ(last_written(), second); 157 CHECK_EQ(last_written().bytecode(), Bytecode::kJumpIfTrue);
158 CHECK_EQ(last_written().operand(0), second.operand(0));
154 } 159 }
155 160
156 TEST_F(BytecodePeepholeOptimizerTest, KeepToBooleanLogicalNot) { 161 TEST_F(BytecodePeepholeOptimizerTest, KeepToBooleanLogicalNot) {
157 BytecodeNode first(Bytecode::kLdaNull); 162 BytecodeNode first(Bytecode::kLdaNull);
158 BytecodeNode second(Bytecode::kToBooleanLogicalNot); 163 BytecodeNode second(Bytecode::kToBooleanLogicalNot);
159 optimizer()->Write(&first); 164 optimizer()->Write(&first);
160 CHECK_EQ(write_count(), 0); 165 CHECK_EQ(write_count(), 0);
161 optimizer()->Write(&second); 166 optimizer()->Write(&second);
162 CHECK_EQ(write_count(), 1); 167 CHECK_EQ(write_count(), 1);
163 CHECK_EQ(last_written(), first); 168 CHECK_EQ(last_written(), first);
(...skipping 28 matching lines...) Expand all
192 Flush(); 197 Flush();
193 CHECK_EQ(write_count(), 2); 198 CHECK_EQ(write_count(), 2);
194 CHECK_EQ(last_written(), second); 199 CHECK_EQ(last_written(), second);
195 } 200 }
196 201
197 TEST_F(BytecodePeepholeOptimizerTest, StarRxLdarRx) { 202 TEST_F(BytecodePeepholeOptimizerTest, StarRxLdarRx) {
198 BytecodeLabel label; 203 BytecodeLabel label;
199 BytecodeNode first(Bytecode::kStar, Register(0).ToOperand()); 204 BytecodeNode first(Bytecode::kStar, Register(0).ToOperand());
200 BytecodeNode second(Bytecode::kLdar, Register(0).ToOperand()); 205 BytecodeNode second(Bytecode::kLdar, Register(0).ToOperand());
201 optimizer()->Write(&first); 206 optimizer()->Write(&first);
207 CHECK_EQ(write_count(), 0);
202 optimizer()->Write(&second); 208 optimizer()->Write(&second);
203 CHECK_EQ(write_count(), 0); 209 CHECK_EQ(write_count(), 1);
210 CHECK_EQ(last_written(), first);
204 Flush(); 211 Flush();
205 CHECK_EQ(write_count(), 1); 212 CHECK_EQ(write_count(), 1);
206 CHECK_EQ(last_written(), first);
207 } 213 }
208 214
209 TEST_F(BytecodePeepholeOptimizerTest, StarRxLdarRxStatement) { 215 TEST_F(BytecodePeepholeOptimizerTest, StarRxLdarRxStatement) {
210 BytecodeNode first(Bytecode::kStar, Register(0).ToOperand()); 216 BytecodeNode first(Bytecode::kStar, Register(0).ToOperand());
211 BytecodeNode second(Bytecode::kLdar, Register(0).ToOperand()); 217 BytecodeNode second(Bytecode::kLdar, Register(0).ToOperand());
212 second.source_info().MakeStatementPosition(0); 218 second.source_info().MakeStatementPosition(0);
213 optimizer()->Write(&first); 219 optimizer()->Write(&first);
214 CHECK_EQ(write_count(), 0); 220 CHECK_EQ(write_count(), 0);
215 optimizer()->Write(&second); 221 optimizer()->Write(&second);
216 CHECK_EQ(write_count(), 1); 222 CHECK_EQ(write_count(), 1);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 CHECK_EQ(last_written(), first); 255 CHECK_EQ(last_written(), first);
250 Flush(); 256 Flush();
251 CHECK_EQ(write_count(), 2); 257 CHECK_EQ(write_count(), 2);
252 CHECK_EQ(last_written(), second); 258 CHECK_EQ(last_written(), second);
253 } 259 }
254 260
255 TEST_F(BytecodePeepholeOptimizerTest, ToNameToName) { 261 TEST_F(BytecodePeepholeOptimizerTest, ToNameToName) {
256 BytecodeNode first(Bytecode::kToName); 262 BytecodeNode first(Bytecode::kToName);
257 BytecodeNode second(Bytecode::kToName); 263 BytecodeNode second(Bytecode::kToName);
258 optimizer()->Write(&first); 264 optimizer()->Write(&first);
265 CHECK_EQ(write_count(), 0);
259 optimizer()->Write(&second); 266 optimizer()->Write(&second);
260 CHECK_EQ(write_count(), 0); 267 CHECK_EQ(write_count(), 1);
268 CHECK_EQ(last_written(), first);
261 Flush(); 269 Flush();
262 CHECK_EQ(last_written(), first);
263 CHECK_EQ(write_count(), 1); 270 CHECK_EQ(write_count(), 1);
264 } 271 }
265 272
266 TEST_F(BytecodePeepholeOptimizerTest, TypeOfToName) { 273 TEST_F(BytecodePeepholeOptimizerTest, TypeOfToName) {
267 BytecodeNode first(Bytecode::kTypeOf); 274 BytecodeNode first(Bytecode::kTypeOf);
268 BytecodeNode second(Bytecode::kToName); 275 BytecodeNode second(Bytecode::kToName);
269 optimizer()->Write(&first); 276 optimizer()->Write(&first);
277 CHECK_EQ(write_count(), 0);
270 optimizer()->Write(&second); 278 optimizer()->Write(&second);
271 CHECK_EQ(write_count(), 0); 279 CHECK_EQ(write_count(), 1);
280 CHECK_EQ(last_written(), first);
272 Flush(); 281 Flush();
273 CHECK_EQ(write_count(), 1); 282 CHECK_EQ(write_count(), 1);
274 CHECK_EQ(last_written(), first);
275 } 283 }
276 284
277 TEST_F(BytecodePeepholeOptimizerTest, LdaConstantStringToName) { 285 TEST_F(BytecodePeepholeOptimizerTest, LdaConstantStringToName) {
278 Handle<Object> word = 286 Handle<Object> word =
279 isolate()->factory()->NewStringFromStaticChars("optimizing"); 287 isolate()->factory()->NewStringFromStaticChars("optimizing");
280 size_t index = constant_array()->Insert(word); 288 size_t index = constant_array()->Insert(word);
281 BytecodeNode first(Bytecode::kLdaConstant, static_cast<uint32_t>(index)); 289 BytecodeNode first(Bytecode::kLdaConstant, static_cast<uint32_t>(index));
282 BytecodeNode second(Bytecode::kToName); 290 BytecodeNode second(Bytecode::kToName);
283 optimizer()->Write(&first); 291 optimizer()->Write(&first);
292 CHECK_EQ(write_count(), 0);
284 optimizer()->Write(&second); 293 optimizer()->Write(&second);
285 CHECK_EQ(write_count(), 0); 294 CHECK_EQ(write_count(), 1);
295 CHECK_EQ(last_written(), first);
286 Flush(); 296 Flush();
287 CHECK_EQ(write_count(), 1); 297 CHECK_EQ(write_count(), 1);
288 CHECK_EQ(last_written(), first);
289 } 298 }
290 299
291 TEST_F(BytecodePeepholeOptimizerTest, LdaConstantNumberToName) { 300 TEST_F(BytecodePeepholeOptimizerTest, LdaConstantNumberToName) {
292 Handle<Object> word = isolate()->factory()->NewNumber(0.380); 301 Handle<Object> word = isolate()->factory()->NewNumber(0.380);
293 size_t index = constant_array()->Insert(word); 302 size_t index = constant_array()->Insert(word);
294 BytecodeNode first(Bytecode::kLdaConstant, static_cast<uint32_t>(index)); 303 BytecodeNode first(Bytecode::kLdaConstant, static_cast<uint32_t>(index));
295 BytecodeNode second(Bytecode::kToName); 304 BytecodeNode second(Bytecode::kToName);
296 optimizer()->Write(&first); 305 optimizer()->Write(&first);
297 CHECK_EQ(write_count(), 0); 306 CHECK_EQ(write_count(), 0);
298 optimizer()->Write(&second); 307 optimizer()->Write(&second);
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 CHECK_EQ(last_written().operand_count(), 2); 568 CHECK_EQ(last_written().operand_count(), 2);
560 CHECK_EQ(last_written().operand(0), 0); 569 CHECK_EQ(last_written().operand(0), 0);
561 CHECK_EQ(last_written().operand(1), reg_operand); 570 CHECK_EQ(last_written().operand(1), reg_operand);
562 Reset(); 571 Reset();
563 } 572 }
564 } 573 }
565 574
566 } // namespace interpreter 575 } // namespace interpreter
567 } // namespace internal 576 } // namespace internal
568 } // namespace v8 577 } // 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