@@ -853,4 +853,51 @@ TEST_F(GISelMITest, LowerMinMax) {
853
853
854
854
EXPECT_TRUE (CheckMachineFunction (*MF, CheckStr)) << *MF;
855
855
}
856
+
857
+ TEST_F (GISelMITest, WidenScalarBuildVector) {
858
+ if (!TM)
859
+ return ;
860
+
861
+ LLT S32 = LLT::scalar (32 );
862
+ LLT S16 = LLT::scalar (16 );
863
+ LLT V2S16 = LLT::vector (2 , S16);
864
+ LLT V2S32 = LLT::vector (2 , S32);
865
+
866
+ DefineLegalizerInfo (A, {
867
+ getActionDefinitionsBuilder ({G_SMIN, G_SMAX, G_UMIN, G_UMAX})
868
+ .lowerFor ({s64, LLT::vector (2 , s32)});
869
+ });
870
+
871
+ AInfo Info (MF->getSubtarget ());
872
+ DummyGISelObserver Observer;
873
+ LegalizerHelper Helper (*MF, Info, Observer, B);
874
+ B.setInsertPt (*EntryMBB, EntryMBB->end ());
875
+
876
+ Register Constant0 = B.buildConstant (S16, 1 ).getReg (0 );
877
+ Register Constant1 = B.buildConstant (S16, 2 ).getReg (0 );
878
+ auto BV0 = B.buildBuildVector (V2S16, {Constant0, Constant1});
879
+ auto BV1 = B.buildBuildVector (V2S16, {Constant0, Constant1});
880
+
881
+ EXPECT_EQ (LegalizerHelper::LegalizeResult::Legalized,
882
+ Helper.widenScalar (*BV0, 0 , V2S32));
883
+ EXPECT_EQ (LegalizerHelper::LegalizeResult::Legalized,
884
+ Helper.widenScalar (*BV1, 1 , S32));
885
+
886
+ auto CheckStr = R"(
887
+ CHECK: [[K0:%[0-9]+]]:_(s16) = G_CONSTANT i16 1
888
+ CHECK-NEXT: [[K1:%[0-9]+]]:_(s16) = G_CONSTANT i16 2
889
+ CHECK-NEXT: [[EXT_K0_0:%[0-9]+]]:_(s32) = G_ANYEXT [[K0]]
890
+ CHECK-NEXT: [[EXT_K1_0:%[0-9]+]]:_(s32) = G_ANYEXT [[K1]]
891
+ CHECK-NEXT: [[BV0:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[EXT_K0_0]]:_(s32), [[EXT_K1_0]]:_(s32)
892
+ CHECK-NEXT: [[BV0_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[BV0]]
893
+
894
+ CHECK: [[EXT_K0_1:%[0-9]+]]:_(s32) = G_ANYEXT [[K0]]
895
+ CHECK-NEXT: [[EXT_K1_1:%[0-9]+]]:_(s32) = G_ANYEXT [[K1]]
896
+
897
+ CHECK-NEXT: [[BV1:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[EXT_K0_1]]:_(s32), [[EXT_K1_1]]:_(s32)
898
+ )" ;
899
+
900
+ EXPECT_TRUE (CheckMachineFunction (*MF, CheckStr)) << *MF;
901
+ }
902
+
856
903
} // namespace
0 commit comments