[llvm] 91fd3e7 - [LLVM][TableGen] Speed up sorting of intrinsics (#109230)

via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 19 10:23:51 PDT 2024


Author: Rahul Joshi
Date: 2024-09-19T10:23:47-07:00
New Revision: 91fd3e764ba49315320328233ae94013f90c7414

URL: https://github.com/llvm/llvm-project/commit/91fd3e764ba49315320328233ae94013f90c7414
DIFF: https://github.com/llvm/llvm-project/commit/91fd3e764ba49315320328233ae94013f90c7414.diff

LOG: [LLVM][TableGen] Speed up sorting of intrinsics (#109230)

Speed up sorting of intrinsics by using the TargetPrefix to only
discriminate beteween target dependent vs target independent intrinsics
where target independent ones need to be sorted before target dependent
ones. When comparing two target dependent intrinsics, the Name already
includes `llvm.<TargetPrefix>` as a prefix, so no need to needlessly
compare it separately.

Added: 
    

Modified: 
    llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp b/llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp
index e566b7ceedf38e..a30dc72a83154a 100644
--- a/llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp
+++ b/llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp
@@ -49,14 +49,21 @@ CodeGenIntrinsicTable::CodeGenIntrinsicTable(const RecordKeeper &RC) {
   for (const Record *Def : Defs)
     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) {
+               // Order target independent intrinsics before target dependent
+               // ones.
+               bool LHSHasTarget = !LHS.TargetPrefix.empty();
+               bool RHSHasTarget = !RHS.TargetPrefix.empty();
+
+               // To ensure deterministic sorted order when duplicates are
+               // present, use record ID as a tie-breaker similar to
+               // sortAndReportDuplicates in Utils.cpp.
                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);
+
+               return std::tie(LHSHasTarget, LHS.Name, LhsID) <
+                      std::tie(RHSHasTarget, RHS.Name, RhsID);
              });
 
   Targets.push_back({"", 0, 0});


        


More information about the llvm-commits mailing list