@@ -367,6 +367,59 @@ TEST_F(VPIntrinsicTest, IntrinsicIDRoundTrip) {
367
367
ASSERT_NE (FullTripCounts, 0u );
368
368
}
369
369
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
+
370
423
// / Check that VPIntrinsic::getDeclarationForParams works.
371
424
TEST_F (VPIntrinsicTest, VPIntrinsicDeclarationForParams) {
372
425
std::unique_ptr<Module> M = createVPDeclarationModule ();
0 commit comments