|
6 | 6 | // |
7 | 7 | //===----------------------------------------------------------------------===// |
8 | 8 |
|
| 9 | +#include "../lib/IR/LLVMContextImpl.h" |
9 | 10 | #include "llvm/IR/Metadata.h" |
10 | 11 | #include "llvm/ADT/DenseMap.h" |
11 | 12 | #include "llvm/ADT/STLExtras.h" |
@@ -1366,6 +1367,43 @@ TEST_F(DILocationTest, discriminatorSpecialCases) { |
1366 | 1367 | EXPECT_EQ(std::nullopt, L4->cloneByMultiplyingDuplicationFactor(0x1000)); |
1367 | 1368 | } |
1368 | 1369 |
|
| 1370 | +TEST_F(DILocationTest, KeyInstructions) { |
| 1371 | + Context.pImpl->NextAtomGroup = 1; |
| 1372 | + |
| 1373 | + EXPECT_EQ(Context.pImpl->NextAtomGroup, 1u); |
| 1374 | + DILocation *A1 = DILocation::get(Context, 1, 0, getSubprogram(), nullptr, false, 1, 2); |
| 1375 | + // The group is only applied to the DILocation if the build has opted into |
| 1376 | + // the additional DILocation fields needed for the feature. |
| 1377 | +#ifdef EXPERIMENTAL_KEY_INSTRUCTIONS |
| 1378 | + EXPECT_EQ(A1->getAtomGroup(), 1u); |
| 1379 | + EXPECT_EQ(A1->getAtomRank(), 2u); |
| 1380 | +#else |
| 1381 | + EXPECT_EQ(A1->getAtomGroup(), 0u); |
| 1382 | + EXPECT_EQ(A1->getAtomRank(), 0u); |
| 1383 | +#endif |
| 1384 | + |
| 1385 | + // Group number 1 has been "used" so next available is 2. |
| 1386 | + EXPECT_EQ(Context.pImpl->NextAtomGroup, 2u); |
| 1387 | + |
| 1388 | + // Set a group number higher than current + 1, then check the waterline. |
| 1389 | + DILocation::get(Context, 2, 0, getSubprogram(), nullptr, false, 5, 1); |
| 1390 | + EXPECT_EQ(Context.pImpl->NextAtomGroup, 6u); |
| 1391 | + |
| 1392 | + // The waterline should be unchanged (group <= next). |
| 1393 | + DILocation::get(Context, 3, 0, getSubprogram(), nullptr, false, 4, 1); |
| 1394 | + EXPECT_EQ(Context.pImpl->NextAtomGroup, 6u); |
| 1395 | + DILocation::get(Context, 3, 0, getSubprogram(), nullptr, false, 5, 1); |
| 1396 | + EXPECT_EQ(Context.pImpl->NextAtomGroup, 6u); |
| 1397 | + |
| 1398 | + // Check the waterline gets incremented by 1. |
| 1399 | + EXPECT_EQ(Context.incNextAtomGroup(), 6u); |
| 1400 | + EXPECT_EQ(Context.pImpl->NextAtomGroup, 7u); |
| 1401 | + |
| 1402 | + Context.updateAtomGroupWaterline(8); |
| 1403 | + EXPECT_EQ(Context.pImpl->NextAtomGroup, 8u); |
| 1404 | + Context.updateAtomGroupWaterline(7); |
| 1405 | + EXPECT_EQ(Context.pImpl->NextAtomGroup, 8u); |
| 1406 | +} |
1369 | 1407 |
|
1370 | 1408 | typedef MetadataTest GenericDINodeTest; |
1371 | 1409 |
|
|
0 commit comments