[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