[llvm] [LLVM][TableGen] Add error check for duplicate intrinsic names (PR #109226)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 19 00:54:08 PDT 2024
================
@@ -47,20 +47,51 @@ CodeGenIntrinsicTable::CodeGenIntrinsicTable(const RecordKeeper &RC) {
Intrinsics.reserve(Defs.size());
for (const Record *Def : Defs)
- Intrinsics.push_back(CodeGenIntrinsic(Def, Ctx));
+ Intrinsics.emplace_back(CodeGenIntrinsic(Def, Ctx));
+ // To ensure deterministic sorted order when duplicates are present, use
+ // record ID as a tie-breaker similar to sortAndReportDuplicates in Utils.cpp.
llvm::sort(Intrinsics,
[](const CodeGenIntrinsic &LHS, const CodeGenIntrinsic &RHS) {
- return std::tie(LHS.TargetPrefix, LHS.Name) <
- std::tie(RHS.TargetPrefix, RHS.Name);
+ unsigned LhsID = LHS.TheDef->getID();
+ unsigned RhsID = RHS.TheDef->getID();
+ return std::tie(LHS.TargetPrefix, LHS.Name, LhsID) <
+ std::tie(RHS.TargetPrefix, RHS.Name, RhsID);
});
+
Targets.push_back({"", 0, 0});
for (size_t I = 0, E = Intrinsics.size(); I < E; ++I)
if (Intrinsics[I].TargetPrefix != Targets.back().Name) {
Targets.back().Count = I - Targets.back().Offset;
Targets.push_back({Intrinsics[I].TargetPrefix, I, 0});
}
Targets.back().Count = Intrinsics.size() - Targets.back().Offset;
+
+ CheckDuplicateIntrinsics();
+}
+
+// Check for duplicate intrinsic names.
+void CodeGenIntrinsicTable::CheckDuplicateIntrinsics(void) const {
----------------
nikic wrote:
```suggestion
void CodeGenIntrinsicTable::CheckDuplicateIntrinsics() const {
```
https://github.com/llvm/llvm-project/pull/109226
More information about the llvm-commits
mailing list