@@ -745,6 +745,120 @@ TEST_F(AArch64GISelMITest, TestNumSignBitsConstant) {
745
745
EXPECT_EQ (3u , Info.computeNumSignBits (CopyRegNeg32));
746
746
}
747
747
748
+ TEST_F (AArch64GISelMITest, TestNumSignBitsXOR) {
749
+ StringRef MIRString = " %c1:_(s8) = G_CONSTANT i8 1\n "
750
+ " %cn1:_(s8) = G_CONSTANT i8 -1\n "
751
+ " %c127:_(s8) = G_CONSTANT i8 127\n "
752
+ " %c32:_(s8) = G_CONSTANT i8 32\n "
753
+ " %cn32:_(s8) = G_CONSTANT i8 -32\n "
754
+
755
+ " %xor1:_(s8) = G_XOR %c1, %cn1\n "
756
+ " %Copy1:_(s8) = COPY %xor1\n "
757
+
758
+ " %xor2:_(s8) = G_XOR %c1, %c32\n "
759
+ " %Copy2:_(s8) = COPY %xor2\n "
760
+
761
+ " %xor3:_(s8) = G_XOR %c32, %c127\n "
762
+ " %Copy3:_(s8) = COPY %xor3\n "
763
+
764
+ " %xor4:_(s8) = G_XOR %cn32, %c127\n "
765
+ " %Copy4:_(s8) = COPY %xor4\n "
766
+
767
+ " %xor5:_(s8) = G_XOR %c127, %cn32\n "
768
+ " %Copy5:_(s8) = COPY %xor5\n " ;
769
+ setUp (MIRString);
770
+ if (!TM)
771
+ GTEST_SKIP ();
772
+ Register Copy1 = Copies[Copies.size () - 5 ];
773
+ Register Copy2 = Copies[Copies.size () - 4 ];
774
+ Register Copy3 = Copies[Copies.size () - 3 ];
775
+ Register Copy4 = Copies[Copies.size () - 2 ];
776
+ Register Copy5 = Copies[Copies.size () - 1 ];
777
+
778
+ GISelKnownBits Info (*MF);
779
+ EXPECT_EQ (7u , Info.computeNumSignBits (Copy1));
780
+ EXPECT_EQ (2u , Info.computeNumSignBits (Copy2));
781
+ EXPECT_EQ (1u , Info.computeNumSignBits (Copy3));
782
+ EXPECT_EQ (1u , Info.computeNumSignBits (Copy4));
783
+ EXPECT_EQ (1u , Info.computeNumSignBits (Copy5));
784
+ }
785
+
786
+ TEST_F (AArch64GISelMITest, TestNumSignBitsOR) {
787
+ StringRef MIRString = " %c1:_(s8) = G_CONSTANT i8 1\n "
788
+ " %cn1:_(s8) = G_CONSTANT i8 -1\n "
789
+ " %c127:_(s8) = G_CONSTANT i8 127\n "
790
+ " %c32:_(s8) = G_CONSTANT i8 32\n "
791
+ " %cn32:_(s8) = G_CONSTANT i8 -32\n "
792
+
793
+ " %or1:_(s8) = G_OR %c1, %cn1\n "
794
+ " %Copy1:_(s8) = COPY %or1\n "
795
+
796
+ " %or2:_(s8) = G_OR %c1, %c32\n "
797
+ " %Copy2:_(s8) = COPY %or2\n "
798
+
799
+ " %or3:_(s8) = G_OR %c32, %c127\n "
800
+ " %Copy3:_(s8) = COPY %or3\n "
801
+
802
+ " %or4:_(s8) = G_OR %cn32, %c127\n "
803
+ " %Copy4:_(s8) = COPY %or4\n "
804
+
805
+ " %or5:_(s8) = G_OR %c127, %cn32\n "
806
+ " %Copy5:_(s8) = COPY %or5\n " ;
807
+ setUp (MIRString);
808
+ if (!TM)
809
+ GTEST_SKIP ();
810
+ Register Copy1 = Copies[Copies.size () - 5 ];
811
+ Register Copy2 = Copies[Copies.size () - 4 ];
812
+ Register Copy3 = Copies[Copies.size () - 3 ];
813
+ Register Copy4 = Copies[Copies.size () - 2 ];
814
+ Register Copy5 = Copies[Copies.size () - 1 ];
815
+
816
+ GISelKnownBits Info (*MF);
817
+ EXPECT_EQ (8u , Info.computeNumSignBits (Copy1));
818
+ EXPECT_EQ (2u , Info.computeNumSignBits (Copy2));
819
+ EXPECT_EQ (1u , Info.computeNumSignBits (Copy3));
820
+ EXPECT_EQ (8u , Info.computeNumSignBits (Copy4));
821
+ EXPECT_EQ (8u , Info.computeNumSignBits (Copy5));
822
+ }
823
+
824
+ TEST_F (AArch64GISelMITest, TestNumSignBitsAND) {
825
+ StringRef MIRString = " %c1:_(s8) = G_CONSTANT i8 1\n "
826
+ " %cn1:_(s8) = G_CONSTANT i8 -1\n "
827
+ " %c127:_(s8) = G_CONSTANT i8 127\n "
828
+ " %c32:_(s8) = G_CONSTANT i8 32\n "
829
+ " %cn32:_(s8) = G_CONSTANT i8 -32\n "
830
+
831
+ " %and1:_(s8) = G_AND %c1, %cn1\n "
832
+ " %Copy1:_(s8) = COPY %and1\n "
833
+
834
+ " %and2:_(s8) = G_AND %c1, %c32\n "
835
+ " %Copy2:_(s8) = COPY %and2\n "
836
+
837
+ " %and3:_(s8) = G_AND %c32, %c127\n "
838
+ " %Copy3:_(s8) = COPY %and3\n "
839
+
840
+ " %and4:_(s8) = G_AND %cn32, %c127\n "
841
+ " %Copy4:_(s8) = COPY %and4\n "
842
+
843
+ " %and5:_(s8) = G_AND %c127, %cn32\n "
844
+ " %Copy5:_(s8) = COPY %and5\n " ;
845
+ setUp (MIRString);
846
+ if (!TM)
847
+ GTEST_SKIP ();
848
+ Register Copy1 = Copies[Copies.size () - 5 ];
849
+ Register Copy2 = Copies[Copies.size () - 4 ];
850
+ Register Copy3 = Copies[Copies.size () - 3 ];
851
+ Register Copy4 = Copies[Copies.size () - 2 ];
852
+ Register Copy5 = Copies[Copies.size () - 1 ];
853
+
854
+ GISelKnownBits Info (*MF);
855
+ EXPECT_EQ (7u , Info.computeNumSignBits (Copy1));
856
+ EXPECT_EQ (8u , Info.computeNumSignBits (Copy2));
857
+ EXPECT_EQ (2u , Info.computeNumSignBits (Copy3));
858
+ EXPECT_EQ (1u , Info.computeNumSignBits (Copy4));
859
+ EXPECT_EQ (1u , Info.computeNumSignBits (Copy5));
860
+ }
861
+
748
862
TEST_F (AArch64GISelMITest, TestNumSignBitsSext) {
749
863
StringRef MIRString = " %3:_(p0) = G_IMPLICIT_DEF\n "
750
864
" %4:_(s8) = G_LOAD %3 :: (load (s8))\n "
0 commit comments