Skip to content

Commit dee2c76

Browse files
committed
Reapply "[DebugInfo] Prevent non-determinism when updating DIArgList users of a value"
Reapply the commit which previously caused build failures due to the mismatched template arguments between the return type and the returned SmallVector. This reverts commit e8991ca.
1 parent 24706cd commit dee2c76

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

llvm/include/llvm/IR/Metadata.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ class ReplaceableMetadataImpl {
304304
void replaceAllUsesWith(Metadata *MD);
305305

306306
/// Returns the list of all DIArgList users of this.
307-
SmallVector<Metadata *, 4> getAllArgListUsers();
307+
SmallVector<Metadata *> getAllArgListUsers();
308308

309309
/// Resolve all uses of this.
310310
///
@@ -385,7 +385,7 @@ class ValueAsMetadata : public Metadata, ReplaceableMetadataImpl {
385385
Type *getType() const { return V->getType(); }
386386
LLVMContext &getContext() const { return V->getContext(); }
387387

388-
SmallVector<Metadata *, 4> getAllArgListUsers() {
388+
SmallVector<Metadata *> getAllArgListUsers() {
389389
return ReplaceableMetadataImpl::getAllArgListUsers();
390390
}
391391

llvm/lib/IR/Metadata.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,16 +195,22 @@ bool MetadataTracking::isReplaceable(const Metadata &MD) {
195195
return ReplaceableMetadataImpl::isReplaceable(MD);
196196
}
197197

198-
SmallVector<Metadata *, 4> ReplaceableMetadataImpl::getAllArgListUsers() {
199-
SmallVector<Metadata *, 4> MDUsers;
198+
SmallVector<Metadata *> ReplaceableMetadataImpl::getAllArgListUsers() {
199+
SmallVector<std::pair<OwnerTy, uint64_t> *> MDUsersWithID;
200200
for (auto Pair : UseMap) {
201201
OwnerTy Owner = Pair.second.first;
202202
if (!Owner.is<Metadata *>())
203203
continue;
204204
Metadata *OwnerMD = Owner.get<Metadata *>();
205205
if (OwnerMD->getMetadataID() == Metadata::DIArgListKind)
206-
MDUsers.push_back(OwnerMD);
206+
MDUsersWithID.push_back(&UseMap[Pair.first]);
207207
}
208+
llvm::sort(MDUsersWithID, [](auto UserA, auto UserB) {
209+
return UserA->second < UserB->second;
210+
});
211+
SmallVector<Metadata *> MDUsers;
212+
for (auto UserWithID : MDUsersWithID)
213+
MDUsers.push_back(UserWithID->first.get<Metadata *>());
208214
return MDUsers;
209215
}
210216

0 commit comments

Comments
 (0)