|
11 | 11 |
|
12 | 12 | using namespace cl::sycl;
|
13 | 13 |
|
14 |
| -TEST_F(SchedulerTest, MemObjCommandCleanup) { |
| 14 | +TEST_F(SchedulerTest, MemObjCommandCleanupAllocaUsers) { |
15 | 15 | MockScheduler MS;
|
16 | 16 | buffer<int, 1> BufA(range<1>(1));
|
17 | 17 | buffer<int, 1> BufB(range<1>(1));
|
@@ -51,3 +51,31 @@ TEST_F(SchedulerTest, MemObjCommandCleanup) {
|
51 | 51 | EXPECT_EQ(MockDirectUser->MDeps[0].MDepCommand, MockAllocaB.get());
|
52 | 52 | EXPECT_TRUE(IndirectUserDeleted);
|
53 | 53 | }
|
| 54 | + |
| 55 | +TEST_F(SchedulerTest, MemObjCommandCleanupAllocaDeps) { |
| 56 | + MockScheduler MS; |
| 57 | + buffer<int, 1> Buf(range<1>(1)); |
| 58 | + detail::Requirement MockReq = getMockRequirement(Buf); |
| 59 | + std::vector<detail::Command *> AuxCmds; |
| 60 | + detail::MemObjRecord *MemObjRec = MS.getOrInsertMemObjRecord( |
| 61 | + detail::getSyclObjImpl(MQueue), &MockReq, AuxCmds); |
| 62 | + |
| 63 | + // Create a fake alloca. |
| 64 | + detail::AllocaCommand *MockAllocaCmd = |
| 65 | + new detail::AllocaCommand(detail::getSyclObjImpl(MQueue), MockReq); |
| 66 | + MemObjRec->MAllocaCommands.push_back(MockAllocaCmd); |
| 67 | + |
| 68 | + // Add another mock command and add MockAllocaCmd as its user. |
| 69 | + MockCommand DepCmd(detail::getSyclObjImpl(MQueue), MockReq); |
| 70 | + addEdge(MockAllocaCmd, &DepCmd, nullptr); |
| 71 | + |
| 72 | + // Check that DepCmd.MUsers size reflect the dependency properly. |
| 73 | + ASSERT_EQ(DepCmd.MUsers.size(), 1U); |
| 74 | + ASSERT_EQ(DepCmd.MUsers.count(MockAllocaCmd), 1U); |
| 75 | + |
| 76 | + MS.cleanupCommandsForRecord(MemObjRec); |
| 77 | + MS.removeRecordForMemObj(detail::getSyclObjImpl(Buf).get()); |
| 78 | + |
| 79 | + // Check that DepCmd has its MUsers field cleared. |
| 80 | + ASSERT_EQ(DepCmd.MUsers.size(), 0U); |
| 81 | +} |
0 commit comments