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

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

Issue 732103002: [turbofan] remove redundant '& 0x1F' for shifts. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments + ror fix 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
« no previous file with comments | « test/mjsunit/asm/word32ror.js ('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 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 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 566
567 567
568 // ----------------------------------------------------------------------------- 568 // -----------------------------------------------------------------------------
569 // Word32Ror 569 // Word32Ror
570 570
571 571
572 TEST_F(MachineOperatorReducerTest, ReduceToWord32RorWithParameters) { 572 TEST_F(MachineOperatorReducerTest, ReduceToWord32RorWithParameters) {
573 Node* value = Parameter(0); 573 Node* value = Parameter(0);
574 Node* shift = Parameter(1); 574 Node* shift = Parameter(1);
575 Node* shl = graph()->NewNode(machine()->Word32Shl(), value, shift); 575 Node* shl = graph()->NewNode(machine()->Word32Shl(), value, shift);
576 Node* shr = graph()->NewNode( 576 Node* sub = graph()->NewNode(machine()->Int32Sub(), Int32Constant(32), shift);
577 machine()->Word32Shr(), value, 577 Node* shr = graph()->NewNode(machine()->Word32Shr(), value, sub);
578 graph()->NewNode(machine()->Int32Sub(), Int32Constant(32), shift));
579 578
580 // (x << y) | (x >> (32 - y)) => x ror y 579 // (x << y) | (x >>> (32 - y)) => x ror (32 - y)
581 Node* node1 = graph()->NewNode(machine()->Word32Or(), shl, shr); 580 Node* node1 = graph()->NewNode(machine()->Word32Or(), shl, shr);
582 Reduction reduction1 = Reduce(node1); 581 Reduction reduction1 = Reduce(node1);
583 EXPECT_TRUE(reduction1.Changed()); 582 EXPECT_TRUE(reduction1.Changed());
584 EXPECT_EQ(reduction1.replacement(), node1); 583 EXPECT_EQ(reduction1.replacement(), node1);
585 EXPECT_THAT(reduction1.replacement(), IsWord32Ror(value, shift)); 584 EXPECT_THAT(reduction1.replacement(), IsWord32Ror(value, sub));
586 585
587 // (x >> (32 - y)) | (x << y) => x ror y 586 // (x >>> (32 - y)) | (x << y) => x ror y
588 Node* node2 = graph()->NewNode(machine()->Word32Or(), shr, shl); 587 Node* node2 = graph()->NewNode(machine()->Word32Or(), shr, shl);
589 Reduction reduction2 = Reduce(node2); 588 Reduction reduction2 = Reduce(node2);
590 EXPECT_TRUE(reduction2.Changed()); 589 EXPECT_TRUE(reduction2.Changed());
591 EXPECT_EQ(reduction2.replacement(), node2); 590 EXPECT_EQ(reduction2.replacement(), node2);
592 EXPECT_THAT(reduction2.replacement(), IsWord32Ror(value, shift)); 591 EXPECT_THAT(reduction2.replacement(), IsWord32Ror(value, sub));
593 } 592 }
594 593
595 594
596 TEST_F(MachineOperatorReducerTest, ReduceToWord32RorWithConstant) { 595 TEST_F(MachineOperatorReducerTest, ReduceToWord32RorWithConstant) {
597 Node* value = Parameter(0); 596 Node* value = Parameter(0);
598 TRACED_FORRANGE(int32_t, k, 0, 31) { 597 TRACED_FORRANGE(int32_t, k, 0, 31) {
599 Node* shl = 598 Node* shl =
600 graph()->NewNode(machine()->Word32Shl(), value, Int32Constant(k)); 599 graph()->NewNode(machine()->Word32Shl(), value, Int32Constant(k));
601 Node* shr = 600 Node* shr =
602 graph()->NewNode(machine()->Word32Shr(), value, Int32Constant(32 - k)); 601 graph()->NewNode(machine()->Word32Shr(), value, Int32Constant(32 - k));
603 602
604 // (x << K) | (x >> ((32 - K) - y)) => x ror K 603 // (x << K) | (x >>> ((32 - K) - y)) => x ror (32 - K)
605 Node* node1 = graph()->NewNode(machine()->Word32Or(), shl, shr); 604 Node* node1 = graph()->NewNode(machine()->Word32Or(), shl, shr);
606 Reduction reduction1 = Reduce(node1); 605 Reduction reduction1 = Reduce(node1);
607 EXPECT_TRUE(reduction1.Changed()); 606 EXPECT_TRUE(reduction1.Changed());
608 EXPECT_EQ(reduction1.replacement(), node1); 607 EXPECT_EQ(reduction1.replacement(), node1);
609 EXPECT_THAT(reduction1.replacement(), 608 EXPECT_THAT(reduction1.replacement(),
610 IsWord32Ror(value, IsInt32Constant(k))); 609 IsWord32Ror(value, IsInt32Constant(32 - k)));
611 610
612 // (x >> (32 - K)) | (x << K) => x ror K 611 // (x >>> (32 - K)) | (x << K) => x ror K
613 Node* node2 = graph()->NewNode(machine()->Word32Or(), shr, shl); 612 Node* node2 = graph()->NewNode(machine()->Word32Or(), shr, shl);
614 Reduction reduction2 = Reduce(node2); 613 Reduction reduction2 = Reduce(node2);
615 EXPECT_TRUE(reduction2.Changed()); 614 EXPECT_TRUE(reduction2.Changed());
616 EXPECT_EQ(reduction2.replacement(), node2); 615 EXPECT_EQ(reduction2.replacement(), node2);
617 EXPECT_THAT(reduction2.replacement(), 616 EXPECT_THAT(reduction2.replacement(),
618 IsWord32Ror(value, IsInt32Constant(k))); 617 IsWord32Ror(value, IsInt32Constant(32 - k)));
619 } 618 }
620 } 619 }
621 620
622 621
623 TEST_F(MachineOperatorReducerTest, Word32RorWithZeroShift) { 622 TEST_F(MachineOperatorReducerTest, Word32RorWithZeroShift) {
624 Node* value = Parameter(0); 623 Node* value = Parameter(0);
625 Node* node = 624 Node* node =
626 graph()->NewNode(machine()->Word32Ror(), value, Int32Constant(0)); 625 graph()->NewNode(machine()->Word32Ror(), value, Int32Constant(0));
627 Reduction reduction = Reduce(node); 626 Reduction reduction = Reduce(node);
628 EXPECT_TRUE(reduction.Changed()); 627 EXPECT_TRUE(reduction.Changed());
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
1248 Reduction r = Reduce(node); 1247 Reduction r = Reduce(node);
1249 ASSERT_TRUE(r.Changed()); 1248 ASSERT_TRUE(r.Changed());
1250 EXPECT_THAT(r.replacement(), 1249 EXPECT_THAT(r.replacement(),
1251 IsStore(rep, base, index, value, effect, control)); 1250 IsStore(rep, base, index, value, effect, control));
1252 } 1251 }
1253 } 1252 }
1254 1253
1255 } // namespace compiler 1254 } // namespace compiler
1256 } // namespace internal 1255 } // namespace internal
1257 } // namespace v8 1256 } // namespace v8
OLDNEW
« no previous file with comments | « test/mjsunit/asm/word32ror.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698