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

Side by Side Diff: test/unittests/compiler/machine-operator-reducer-unittest.cc

Issue 763963002: [turbofan] Add checked load/store operators. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Reapply fix. Created 6 years 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 #include "src/base/bits.h" 5 #include "src/base/bits.h"
6 #include "src/base/division-by-constant.h" 6 #include "src/base/division-by-constant.h"
7 #include "src/compiler/js-graph.h" 7 #include "src/compiler/js-graph.h"
8 #include "src/compiler/machine-operator-reducer.h" 8 #include "src/compiler/machine-operator-reducer.h"
9 #include "src/compiler/typer.h" 9 #include "src/compiler/typer.h"
10 #include "test/unittests/compiler/graph-unittest.h" 10 #include "test/unittests/compiler/graph-unittest.h"
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 TRACED_FOREACH(int32_t, k, kInt32Values) { 505 TRACED_FOREACH(int32_t, k, kInt32Values) {
506 TRACED_FOREACH(int32_t, l, kInt32Values) { 506 TRACED_FOREACH(int32_t, l, kInt32Values) {
507 if (k == 0 || k == -1 || l == 0 || l == -1) continue; 507 if (k == 0 || k == -1 || l == 0 || l == -1) continue;
508 508
509 // (x & K) & L => x & (K & L) 509 // (x & K) & L => x & (K & L)
510 Reduction const r1 = Reduce(graph()->NewNode( 510 Reduction const r1 = Reduce(graph()->NewNode(
511 machine()->Word32And(), 511 machine()->Word32And(),
512 graph()->NewNode(machine()->Word32And(), p0, Int32Constant(k)), 512 graph()->NewNode(machine()->Word32And(), p0, Int32Constant(k)),
513 Int32Constant(l))); 513 Int32Constant(l)));
514 ASSERT_TRUE(r1.Changed()); 514 ASSERT_TRUE(r1.Changed());
515 EXPECT_THAT(r1.replacement(), IsWord32And(p0, IsInt32Constant(k & l))); 515 EXPECT_THAT(r1.replacement(),
516 (k & l) ? IsWord32And(p0, IsInt32Constant(k & l))
517 : IsInt32Constant(0));
516 518
517 // (K & x) & L => x & (K & L) 519 // (K & x) & L => x & (K & L)
518 Reduction const r2 = Reduce(graph()->NewNode( 520 Reduction const r2 = Reduce(graph()->NewNode(
519 machine()->Word32And(), 521 machine()->Word32And(),
520 graph()->NewNode(machine()->Word32And(), Int32Constant(k), p0), 522 graph()->NewNode(machine()->Word32And(), Int32Constant(k), p0),
521 Int32Constant(l))); 523 Int32Constant(l)));
522 ASSERT_TRUE(r2.Changed()); 524 ASSERT_TRUE(r2.Changed());
523 EXPECT_THAT(r2.replacement(), IsWord32And(p0, IsInt32Constant(k & l))); 525 EXPECT_THAT(r2.replacement(),
526 (k & l) ? IsWord32And(p0, IsInt32Constant(k & l))
527 : IsInt32Constant(0));
524 } 528 }
525 } 529 }
526 } 530 }
527 531
528 532
529 TEST_F(MachineOperatorReducerTest, Word32AndWithInt32AddAndConstant) { 533 TEST_F(MachineOperatorReducerTest, Word32AndWithInt32AddAndConstant) {
530 Node* const p0 = Parameter(0); 534 Node* const p0 = Parameter(0);
531 535
532 TRACED_FOREACH(int32_t, k, kInt32Values) { 536 TRACED_FOREACH(int32_t, k, kInt32Values) {
533 TRACED_FORRANGE(int32_t, l, 1, 31) { 537 TRACED_FORRANGE(int32_t, l, 1, 31) {
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 graph()->NewNode(machine()->Word32Sar(), p0, Int32Constant(x)), 737 graph()->NewNode(machine()->Word32Sar(), p0, Int32Constant(x)),
734 Int32Constant(x)); 738 Int32Constant(x));
735 Reduction r = Reduce(node); 739 Reduction r = Reduce(node);
736 ASSERT_TRUE(r.Changed()); 740 ASSERT_TRUE(r.Changed());
737 int32_t m = bit_cast<int32_t>(~((1U << x) - 1U)); 741 int32_t m = bit_cast<int32_t>(~((1U << x) - 1U));
738 EXPECT_THAT(r.replacement(), IsWord32And(p0, IsInt32Constant(m))); 742 EXPECT_THAT(r.replacement(), IsWord32And(p0, IsInt32Constant(m)));
739 } 743 }
740 } 744 }
741 745
742 746
747 TEST_F(MachineOperatorReducerTest,
748 Word32ShlWithWord32SarAndInt32AddAndConstant) {
749 Node* const p0 = Parameter(0);
750 TRACED_FOREACH(int32_t, k, kInt32Values) {
751 TRACED_FORRANGE(int32_t, l, 1, 31) {
752 // (x + (K << L)) >> L << L => (x & (-1 << L)) + (K << L)
753 Reduction const r = Reduce(graph()->NewNode(
754 machine()->Word32Shl(),
755 graph()->NewNode(machine()->Word32Sar(),
756 graph()->NewNode(machine()->Int32Add(), p0,
757 Int32Constant(k << l)),
758 Int32Constant(l)),
759 Int32Constant(l)));
760 ASSERT_TRUE(r.Changed());
761 EXPECT_THAT(r.replacement(),
762 IsInt32Add(IsWord32And(p0, IsInt32Constant(-1 << l)),
763 IsInt32Constant(k << l)));
764 }
765 }
766 }
767
768
743 TEST_F(MachineOperatorReducerTest, Word32ShlWithWord32Shr) { 769 TEST_F(MachineOperatorReducerTest, Word32ShlWithWord32Shr) {
744 Node* p0 = Parameter(0); 770 Node* p0 = Parameter(0);
745 TRACED_FORRANGE(int32_t, x, 1, 31) { 771 TRACED_FORRANGE(int32_t, x, 1, 31) {
746 Node* node = graph()->NewNode( 772 Node* node = graph()->NewNode(
747 machine()->Word32Shl(), 773 machine()->Word32Shl(),
748 graph()->NewNode(machine()->Word32Shr(), p0, Int32Constant(x)), 774 graph()->NewNode(machine()->Word32Shr(), p0, Int32Constant(x)),
749 Int32Constant(x)); 775 Int32Constant(x));
750 Reduction r = Reduce(node); 776 Reduction r = Reduce(node);
751 ASSERT_TRUE(r.Changed()); 777 ASSERT_TRUE(r.Changed());
752 int32_t m = bit_cast<int32_t>(~((1U << x) - 1U)); 778 int32_t m = bit_cast<int32_t>(~((1U << x) - 1U));
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 Reduction r = Reduce(node); 1312 Reduction r = Reduce(node);
1287 ASSERT_TRUE(r.Changed()); 1313 ASSERT_TRUE(r.Changed());
1288 EXPECT_THAT(r.replacement(), 1314 EXPECT_THAT(r.replacement(),
1289 IsStore(rep, base, index, value, effect, control)); 1315 IsStore(rep, base, index, value, effect, control));
1290 } 1316 }
1291 } 1317 }
1292 1318
1293 } // namespace compiler 1319 } // namespace compiler
1294 } // namespace internal 1320 } // namespace internal
1295 } // namespace v8 1321 } // namespace v8
OLDNEW
« no previous file with comments | « test/unittests/compiler/js-typed-lowering-unittest.cc ('k') | test/unittests/compiler/node-test-utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698