@@ -367,6 +367,59 @@ TEST_F(VPIntrinsicTest, IntrinsicIDRoundTrip) {
367367  ASSERT_NE (FullTripCounts, 0u );
368368}
369369
370+ // / Check that going from intrinsic to VP intrinsic and back results in the same
371+ // / intrinsic.
372+ TEST_F (VPIntrinsicTest, IntrinsicToVPRoundTrip) {
373+   unsigned  FullTripCounts = 0 ;
374+   Intrinsic::ID IntrinsicID = Intrinsic::not_intrinsic + 1 ;
375+   for  (; IntrinsicID < Intrinsic::num_intrinsics; IntrinsicID++) {
376+     Intrinsic::ID VPID = VPIntrinsic::getForIntrinsic (IntrinsicID);
377+     //  No equivalent VP intrinsic available.
378+     if  (VPID == Intrinsic::not_intrinsic)
379+       continue ;
380+ 
381+     //  Return itself if passed intrinsic ID is VP intrinsic.
382+     if  (VPIntrinsic::isVPIntrinsic (IntrinsicID)) {
383+       ASSERT_EQ (IntrinsicID, VPID);
384+       continue ;
385+     }
386+ 
387+     std::optional<Intrinsic::ID> RoundTripIntrinsicID =
388+         VPIntrinsic::getFunctionalIntrinsicIDForVP (VPID);
389+     //  No equivalent non-predicated intrinsic available.
390+     if  (!RoundTripIntrinsicID)
391+       continue ;
392+ 
393+     ASSERT_EQ (*RoundTripIntrinsicID, IntrinsicID);
394+     ++FullTripCounts;
395+   }
396+   ASSERT_NE (FullTripCounts, 0u );
397+ }
398+ 
399+ // / Check that going from VP intrinsic to equivalent non-predicated intrinsic
400+ // / and back results in the same intrinsic.
401+ TEST_F (VPIntrinsicTest, VPToNonPredIntrinsicRoundTrip) {
402+   std::unique_ptr<Module> M = createVPDeclarationModule ();
403+   assert (M);
404+ 
405+   unsigned  FullTripCounts = 0 ;
406+   for  (const  auto  &VPDecl : *M) {
407+     auto  VPID = VPDecl.getIntrinsicID ();
408+     std::optional<Intrinsic::ID> NonPredID =
409+         VPIntrinsic::getFunctionalIntrinsicIDForVP (VPID);
410+ 
411+     //  No equivalent non-predicated intrinsic available
412+     if  (!NonPredID)
413+       continue ;
414+ 
415+     Intrinsic::ID RoundTripVPID = VPIntrinsic::getForIntrinsic (*NonPredID);
416+ 
417+     ASSERT_EQ (RoundTripVPID, VPID);
418+     ++FullTripCounts;
419+   }
420+   ASSERT_NE (FullTripCounts, 0u );
421+ }
422+ 
370423// / Check that VPIntrinsic::getDeclarationForParams works.
371424TEST_F (VPIntrinsicTest, VPIntrinsicDeclarationForParams) {
372425  std::unique_ptr<Module> M = createVPDeclarationModule ();
0 commit comments