Skip to content

Commit 86f96f1

Browse files
committed
Add unittests
1 parent 741d6c0 commit 86f96f1

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

llvm/unittests/IR/VPIntrinsicTest.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
371424
TEST_F(VPIntrinsicTest, VPIntrinsicDeclarationForParams) {
372425
std::unique_ptr<Module> M = createVPDeclarationModule();

0 commit comments

Comments
 (0)