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

Side by Side Diff: test/unittests/compiler/change-lowering-unittest.cc

Issue 652363006: [turbofan] First step towards correctified 64-bit addressing. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fixes2 Created 6 years, 1 month 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 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 #include "src/code-stubs.h" 5 #include "src/code-stubs.h"
6 #include "src/compiler/change-lowering.h" 6 #include "src/compiler/change-lowering.h"
7 #include "src/compiler/js-graph.h" 7 #include "src/compiler/js-graph.h"
8 #include "src/compiler/node-properties-inl.h" 8 #include "src/compiler/node-properties-inl.h"
9 #include "src/compiler/simplified-operator.h" 9 #include "src/compiler/simplified-operator.h"
10 #include "test/unittests/compiler/compiler-test-utils.h" 10 #include "test/unittests/compiler/compiler-test-utils.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 _, IsHeapConstant(Unique<HeapObject>::CreateImmovable( 83 _, IsHeapConstant(Unique<HeapObject>::CreateImmovable(
84 CEntryStub(isolate(), 1).GetCode())), 84 CEntryStub(isolate(), 1).GetCode())),
85 IsExternalConstant(ExternalReference( 85 IsExternalConstant(ExternalReference(
86 Runtime::FunctionForId(Runtime::kAllocateHeapNumber), isolate())), 86 Runtime::FunctionForId(Runtime::kAllocateHeapNumber), isolate())),
87 IsInt32Constant(0), IsNumberConstant(0.0), effect_matcher, 87 IsInt32Constant(0), IsNumberConstant(0.0), effect_matcher,
88 control_matcher); 88 control_matcher);
89 } 89 }
90 Matcher<Node*> IsLoadHeapNumber(const Matcher<Node*>& value_matcher, 90 Matcher<Node*> IsLoadHeapNumber(const Matcher<Node*>& value_matcher,
91 const Matcher<Node*>& control_matcher) { 91 const Matcher<Node*>& control_matcher) {
92 return IsLoad(kMachFloat64, value_matcher, 92 return IsLoad(kMachFloat64, value_matcher,
93 IsInt32Constant(HeapNumberValueOffset()), graph()->start(), 93 IsIntPtrConstant(HeapNumberValueOffset()), graph()->start(),
94 control_matcher); 94 control_matcher);
95 } 95 }
96 Matcher<Node*> IsIntPtrConstant(int value) {
97 return Is32() ? IsInt32Constant(value) : IsInt64Constant(value);
98 }
96 Matcher<Node*> IsWordEqual(const Matcher<Node*>& lhs_matcher, 99 Matcher<Node*> IsWordEqual(const Matcher<Node*>& lhs_matcher,
97 const Matcher<Node*>& rhs_matcher) { 100 const Matcher<Node*>& rhs_matcher) {
98 return Is32() ? IsWord32Equal(lhs_matcher, rhs_matcher) 101 return Is32() ? IsWord32Equal(lhs_matcher, rhs_matcher)
99 : IsWord64Equal(lhs_matcher, rhs_matcher); 102 : IsWord64Equal(lhs_matcher, rhs_matcher);
100 } 103 }
101 104
102 private: 105 private:
103 SimplifiedOperatorBuilder simplified_; 106 SimplifiedOperatorBuilder simplified_;
104 }; 107 };
105 108
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 158
156 Node* finish = reduction.replacement(); 159 Node* finish = reduction.replacement();
157 Capture<Node*> heap_number; 160 Capture<Node*> heap_number;
158 EXPECT_THAT( 161 EXPECT_THAT(
159 finish, 162 finish,
160 IsFinish( 163 IsFinish(
161 AllOf(CaptureEq(&heap_number), 164 AllOf(CaptureEq(&heap_number),
162 IsAllocateHeapNumber(IsValueEffect(val), graph()->start())), 165 IsAllocateHeapNumber(IsValueEffect(val), graph()->start())),
163 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier), 166 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier),
164 CaptureEq(&heap_number), 167 CaptureEq(&heap_number),
165 IsInt32Constant(HeapNumberValueOffset()), val, 168 IsIntPtrConstant(HeapNumberValueOffset()), val,
166 CaptureEq(&heap_number), graph()->start()))); 169 CaptureEq(&heap_number), graph()->start())));
167 } 170 }
168 171
169 172
170 TARGET_TEST_P(ChangeLoweringCommonTest, StringAdd) { 173 TARGET_TEST_P(ChangeLoweringCommonTest, StringAdd) {
171 Node* node = 174 Node* node =
172 graph()->NewNode(simplified()->StringAdd(), Parameter(0), Parameter(1)); 175 graph()->NewNode(simplified()->StringAdd(), Parameter(0), Parameter(1));
173 Reduction reduction = Reduce(node); 176 Reduction reduction = Reduce(node);
174 EXPECT_FALSE(reduction.Changed()); 177 EXPECT_FALSE(reduction.Changed());
175 } 178 }
(...skipping 24 matching lines...) Expand all
200 203
201 Node* phi = reduction.replacement(); 204 Node* phi = reduction.replacement();
202 Capture<Node*> add, branch, heap_number, if_true; 205 Capture<Node*> add, branch, heap_number, if_true;
203 EXPECT_THAT( 206 EXPECT_THAT(
204 phi, 207 phi,
205 IsPhi(kMachAnyTagged, 208 IsPhi(kMachAnyTagged,
206 IsFinish(AllOf(CaptureEq(&heap_number), 209 IsFinish(AllOf(CaptureEq(&heap_number),
207 IsAllocateHeapNumber(_, CaptureEq(&if_true))), 210 IsAllocateHeapNumber(_, CaptureEq(&if_true))),
208 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier), 211 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier),
209 CaptureEq(&heap_number), 212 CaptureEq(&heap_number),
210 IsInt32Constant(HeapNumberValueOffset()), 213 IsIntPtrConstant(HeapNumberValueOffset()),
211 IsChangeInt32ToFloat64(val), 214 IsChangeInt32ToFloat64(val),
212 CaptureEq(&heap_number), CaptureEq(&if_true))), 215 CaptureEq(&heap_number), CaptureEq(&if_true))),
213 IsProjection( 216 IsProjection(
214 0, AllOf(CaptureEq(&add), IsInt32AddWithOverflow(val, val))), 217 0, AllOf(CaptureEq(&add), IsInt32AddWithOverflow(val, val))),
215 IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))), 218 IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))),
216 IsIfFalse(AllOf(CaptureEq(&branch), 219 IsIfFalse(AllOf(CaptureEq(&branch),
217 IsBranch(IsProjection(1, CaptureEq(&add)), 220 IsBranch(IsProjection(1, CaptureEq(&add)),
218 graph()->start())))))); 221 graph()->start()))))));
219 } 222 }
220 223
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 342
340 343
341 TARGET_TEST_F(ChangeLowering64Test, ChangeInt32ToTagged) { 344 TARGET_TEST_F(ChangeLowering64Test, ChangeInt32ToTagged) {
342 Node* val = Parameter(0); 345 Node* val = Parameter(0);
343 Node* node = graph()->NewNode(simplified()->ChangeInt32ToTagged(), val); 346 Node* node = graph()->NewNode(simplified()->ChangeInt32ToTagged(), val);
344 Reduction reduction = Reduce(node); 347 Reduction reduction = Reduce(node);
345 ASSERT_TRUE(reduction.Changed()); 348 ASSERT_TRUE(reduction.Changed());
346 349
347 EXPECT_THAT(reduction.replacement(), 350 EXPECT_THAT(reduction.replacement(),
348 IsWord64Shl(IsChangeInt32ToInt64(val), 351 IsWord64Shl(IsChangeInt32ToInt64(val),
349 IsInt32Constant(SmiShiftAmount()))); 352 IsInt64Constant(SmiShiftAmount())));
350 } 353 }
351 354
352 355
353 TARGET_TEST_F(ChangeLowering64Test, ChangeTaggedToFloat64) { 356 TARGET_TEST_F(ChangeLowering64Test, ChangeTaggedToFloat64) {
354 STATIC_ASSERT(kSmiTag == 0); 357 STATIC_ASSERT(kSmiTag == 0);
355 STATIC_ASSERT(kSmiTagSize == 1); 358 STATIC_ASSERT(kSmiTagSize == 1);
356 359
357 Node* val = Parameter(0); 360 Node* val = Parameter(0);
358 Node* node = graph()->NewNode(simplified()->ChangeTaggedToFloat64(), val); 361 Node* node = graph()->NewNode(simplified()->ChangeTaggedToFloat64(), val);
359 Reduction reduction = Reduce(node); 362 Reduction reduction = Reduce(node);
360 ASSERT_TRUE(reduction.Changed()); 363 ASSERT_TRUE(reduction.Changed());
361 364
362 Node* phi = reduction.replacement(); 365 Node* phi = reduction.replacement();
363 Capture<Node*> branch, if_true; 366 Capture<Node*> branch, if_true;
364 EXPECT_THAT( 367 EXPECT_THAT(
365 phi, 368 phi,
366 IsPhi( 369 IsPhi(
367 kMachFloat64, IsLoadHeapNumber(val, CaptureEq(&if_true)), 370 kMachFloat64, IsLoadHeapNumber(val, CaptureEq(&if_true)),
368 IsChangeInt32ToFloat64(IsTruncateInt64ToInt32( 371 IsChangeInt32ToFloat64(IsTruncateInt64ToInt32(
369 IsWord64Sar(val, IsInt32Constant(SmiShiftAmount())))), 372 IsWord64Sar(val, IsInt64Constant(SmiShiftAmount())))),
370 IsMerge( 373 IsMerge(
371 AllOf(CaptureEq(&if_true), 374 AllOf(CaptureEq(&if_true),
372 IsIfTrue(AllOf( 375 IsIfTrue(AllOf(
373 CaptureEq(&branch), 376 CaptureEq(&branch),
374 IsBranch(IsWord64And(val, IsInt32Constant(kSmiTagMask)), 377 IsBranch(IsWord64And(val, IsInt64Constant(kSmiTagMask)),
375 graph()->start())))), 378 graph()->start())))),
376 IsIfFalse(CaptureEq(&branch))))); 379 IsIfFalse(CaptureEq(&branch)))));
377 } 380 }
378 381
379 382
380 TARGET_TEST_F(ChangeLowering64Test, ChangeTaggedToInt32) { 383 TARGET_TEST_F(ChangeLowering64Test, ChangeTaggedToInt32) {
381 STATIC_ASSERT(kSmiTag == 0); 384 STATIC_ASSERT(kSmiTag == 0);
382 STATIC_ASSERT(kSmiTagSize == 1); 385 STATIC_ASSERT(kSmiTagSize == 1);
383 386
384 Node* val = Parameter(0); 387 Node* val = Parameter(0);
385 Node* node = graph()->NewNode(simplified()->ChangeTaggedToInt32(), val); 388 Node* node = graph()->NewNode(simplified()->ChangeTaggedToInt32(), val);
386 Reduction reduction = Reduce(node); 389 Reduction reduction = Reduce(node);
387 ASSERT_TRUE(reduction.Changed()); 390 ASSERT_TRUE(reduction.Changed());
388 391
389 Node* phi = reduction.replacement(); 392 Node* phi = reduction.replacement();
390 Capture<Node*> branch, if_true; 393 Capture<Node*> branch, if_true;
391 EXPECT_THAT( 394 EXPECT_THAT(
392 phi, 395 phi,
393 IsPhi(kMachInt32, 396 IsPhi(kMachInt32,
394 IsChangeFloat64ToInt32(IsLoadHeapNumber(val, CaptureEq(&if_true))), 397 IsChangeFloat64ToInt32(IsLoadHeapNumber(val, CaptureEq(&if_true))),
395 IsTruncateInt64ToInt32( 398 IsTruncateInt64ToInt32(
396 IsWord64Sar(val, IsInt32Constant(SmiShiftAmount()))), 399 IsWord64Sar(val, IsInt64Constant(SmiShiftAmount()))),
397 IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))), 400 IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))),
398 IsIfFalse(AllOf( 401 IsIfFalse(AllOf(
399 CaptureEq(&branch), 402 CaptureEq(&branch),
400 IsBranch(IsWord64And(val, IsInt32Constant(kSmiTagMask)), 403 IsBranch(IsWord64And(val, IsInt64Constant(kSmiTagMask)),
401 graph()->start())))))); 404 graph()->start()))))));
402 } 405 }
403 406
404 407
405 TARGET_TEST_F(ChangeLowering64Test, ChangeTaggedToUint32) { 408 TARGET_TEST_F(ChangeLowering64Test, ChangeTaggedToUint32) {
406 STATIC_ASSERT(kSmiTag == 0); 409 STATIC_ASSERT(kSmiTag == 0);
407 STATIC_ASSERT(kSmiTagSize == 1); 410 STATIC_ASSERT(kSmiTagSize == 1);
408 411
409 Node* val = Parameter(0); 412 Node* val = Parameter(0);
410 Node* node = graph()->NewNode(simplified()->ChangeTaggedToUint32(), val); 413 Node* node = graph()->NewNode(simplified()->ChangeTaggedToUint32(), val);
411 Reduction reduction = Reduce(node); 414 Reduction reduction = Reduce(node);
412 ASSERT_TRUE(reduction.Changed()); 415 ASSERT_TRUE(reduction.Changed());
413 416
414 Node* phi = reduction.replacement(); 417 Node* phi = reduction.replacement();
415 Capture<Node*> branch, if_true; 418 Capture<Node*> branch, if_true;
416 EXPECT_THAT( 419 EXPECT_THAT(
417 phi, 420 phi,
418 IsPhi(kMachUint32, 421 IsPhi(kMachUint32,
419 IsChangeFloat64ToUint32(IsLoadHeapNumber(val, CaptureEq(&if_true))), 422 IsChangeFloat64ToUint32(IsLoadHeapNumber(val, CaptureEq(&if_true))),
420 IsTruncateInt64ToInt32( 423 IsTruncateInt64ToInt32(
421 IsWord64Sar(val, IsInt32Constant(SmiShiftAmount()))), 424 IsWord64Sar(val, IsInt64Constant(SmiShiftAmount()))),
422 IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))), 425 IsMerge(AllOf(CaptureEq(&if_true), IsIfTrue(CaptureEq(&branch))),
423 IsIfFalse(AllOf( 426 IsIfFalse(AllOf(
424 CaptureEq(&branch), 427 CaptureEq(&branch),
425 IsBranch(IsWord64And(val, IsInt32Constant(kSmiTagMask)), 428 IsBranch(IsWord64And(val, IsInt64Constant(kSmiTagMask)),
426 graph()->start())))))); 429 graph()->start()))))));
427 } 430 }
428 431
429 432
430 TARGET_TEST_F(ChangeLowering64Test, ChangeUint32ToTagged) { 433 TARGET_TEST_F(ChangeLowering64Test, ChangeUint32ToTagged) {
431 STATIC_ASSERT(kSmiTag == 0); 434 STATIC_ASSERT(kSmiTag == 0);
432 STATIC_ASSERT(kSmiTagSize == 1); 435 STATIC_ASSERT(kSmiTagSize == 1);
433 436
434 Node* val = Parameter(0); 437 Node* val = Parameter(0);
435 Node* node = graph()->NewNode(simplified()->ChangeUint32ToTagged(), val); 438 Node* node = graph()->NewNode(simplified()->ChangeUint32ToTagged(), val);
436 Reduction reduction = Reduce(node); 439 Reduction reduction = Reduce(node);
437 ASSERT_TRUE(reduction.Changed()); 440 ASSERT_TRUE(reduction.Changed());
438 441
439 Node* phi = reduction.replacement(); 442 Node* phi = reduction.replacement();
440 Capture<Node*> branch, heap_number, if_false; 443 Capture<Node*> branch, heap_number, if_false;
441 EXPECT_THAT( 444 EXPECT_THAT(
442 phi, 445 phi,
443 IsPhi( 446 IsPhi(
444 kMachAnyTagged, IsWord64Shl(IsChangeUint32ToUint64(val), 447 kMachAnyTagged, IsWord64Shl(IsChangeUint32ToUint64(val),
445 IsInt32Constant(SmiShiftAmount())), 448 IsInt64Constant(SmiShiftAmount())),
446 IsFinish(AllOf(CaptureEq(&heap_number), 449 IsFinish(AllOf(CaptureEq(&heap_number),
447 IsAllocateHeapNumber(_, CaptureEq(&if_false))), 450 IsAllocateHeapNumber(_, CaptureEq(&if_false))),
448 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier), 451 IsStore(StoreRepresentation(kMachFloat64, kNoWriteBarrier),
449 CaptureEq(&heap_number), 452 CaptureEq(&heap_number),
450 IsInt32Constant(HeapNumberValueOffset()), 453 IsInt64Constant(HeapNumberValueOffset()),
451 IsChangeUint32ToFloat64(val), 454 IsChangeUint32ToFloat64(val),
452 CaptureEq(&heap_number), CaptureEq(&if_false))), 455 CaptureEq(&heap_number), CaptureEq(&if_false))),
453 IsMerge( 456 IsMerge(
454 IsIfTrue(AllOf(CaptureEq(&branch), 457 IsIfTrue(AllOf(CaptureEq(&branch),
455 IsBranch(IsUint32LessThanOrEqual( 458 IsBranch(IsUint32LessThanOrEqual(
456 val, IsInt32Constant(SmiMaxValue())), 459 val, IsInt64Constant(SmiMaxValue())),
457 graph()->start()))), 460 graph()->start()))),
458 AllOf(CaptureEq(&if_false), IsIfFalse(CaptureEq(&branch)))))); 461 AllOf(CaptureEq(&if_false), IsIfFalse(CaptureEq(&branch))))));
459 } 462 }
460 463
461 } // namespace compiler 464 } // namespace compiler
462 } // namespace internal 465 } // namespace internal
463 } // namespace v8 466 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/compiler/test-simplified-lowering.cc ('k') | test/unittests/compiler/instruction-selector-unittest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698