@@ -547,4 +547,52 @@ TEST_F(GISelMITest, WidenUSUBO) {
547
547
// Check
548
548
EXPECT_TRUE (CheckMachineFunction (*MF, CheckStr)) << *MF;
549
549
}
550
+
551
+ TEST_F (GISelMITest, FewerElementsAnd) {
552
+ if (!TM)
553
+ return ;
554
+
555
+ const LLT V2S32 = LLT::vector (2 , 32 );
556
+ const LLT V5S32 = LLT::vector (5 , 32 );
557
+
558
+ // Declare your legalization info
559
+ DefineLegalizerInfo (A, {
560
+ getActionDefinitionsBuilder (G_AND)
561
+ .legalFor ({s32});
562
+ });
563
+
564
+ auto Op0 = B.buildUndef (V5S32);
565
+ auto Op1 = B.buildUndef (V5S32);
566
+ auto And = B.buildAnd (V5S32, Op0, Op1);
567
+
568
+ AInfo Info (MF->getSubtarget ());
569
+ DummyGISelObserver Observer;
570
+ LegalizerHelper Helper (*MF, Info, Observer, B);
571
+ EXPECT_TRUE (Helper.fewerElementsVector (*And, 0 , V2S32) ==
572
+ LegalizerHelper::LegalizeResult::Legalized);
573
+
574
+ auto CheckStr = R"(
575
+ CHECK: [[IMP_DEF0:%[0-9]+]]:_(<5 x s32>) = G_IMPLICIT_DEF
576
+ CHECK: [[IMP_DEF1:%[0-9]+]]:_(<5 x s32>) = G_IMPLICIT_DEF
577
+ CHECK: [[IMP_DEF2:%[0-9]+]]:_(<5 x s32>) = G_IMPLICIT_DEF
578
+ CHECK: [[EXTRACT0:%[0-9]+]]:_(<2 x s32>) = G_EXTRACT [[IMP_DEF0]]:_(<5 x s32>), 0
579
+ CHECK: [[EXTRACT1:%[0-9]+]]:_(<2 x s32>) = G_EXTRACT [[IMP_DEF1]]:_(<5 x s32>), 0
580
+ CHECK: [[AND0:%[0-9]+]]:_(<2 x s32>) = G_AND [[EXTRACT0]]:_, [[EXTRACT1]]:_
581
+ CHECK: [[INSERT0:%[0-9]+]]:_(<5 x s32>) = G_INSERT [[IMP_DEF2]]:_, [[AND0]]:_(<2 x s32>), 0
582
+
583
+ CHECK: [[EXTRACT2:%[0-9]+]]:_(<2 x s32>) = G_EXTRACT [[IMP_DEF0]]:_(<5 x s32>), 64
584
+ CHECK: [[EXTRACT3:%[0-9]+]]:_(<2 x s32>) = G_EXTRACT [[IMP_DEF1]]:_(<5 x s32>), 64
585
+ CHECK: [[AND1:%[0-9]+]]:_(<2 x s32>) = G_AND [[EXTRACT2]]:_, [[EXTRACT3]]:_
586
+ CHECK: [[INSERT1:%[0-9]+]]:_(<5 x s32>) = G_INSERT [[INSERT0]]:_, [[AND1]]:_(<2 x s32>), 64
587
+
588
+ CHECK: [[EXTRACT4:%[0-9]+]]:_(s32) = G_EXTRACT [[IMP_DEF0]]:_(<5 x s32>), 128
589
+ CHECK: [[EXTRACT5:%[0-9]+]]:_(s32) = G_EXTRACT [[IMP_DEF1]]:_(<5 x s32>), 128
590
+ CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[EXTRACT4]]:_, [[EXTRACT5]]:_
591
+ CHECK: [[INSERT2:%[0-9]+]]:_(<5 x s32>) = G_INSERT [[INSERT1]]:_, [[AND2]]:_(s32), 128
592
+ )" ;
593
+
594
+ // Check
595
+ EXPECT_TRUE (CheckMachineFunction (*MF, CheckStr)) << *MF;
596
+ }
597
+
550
598
} // namespace
0 commit comments