[llvm] [LLVM][TableGen] Speed up sorting of intrinsics (PR #109230)

Rahul Joshi via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 18 21:39:43 PDT 2024


https://github.com/jurahul created https://github.com/llvm/llvm-project/pull/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 comaring two target dependent intrinsics, the Name already includes llvm.<TargetPrefix> as a suffix, so no need to needlessly compare it separately.

>From 88979afa7ee383549582c33143734ddbe96ebbbe Mon Sep 17 00:00:00 2001
From: Rahul Joshi <rjoshi at nvidia.com>
Date: Wed, 18 Sep 2024 21:34:00 -0700
Subject: [PATCH] [LLVM][TableGen] Speed up sorting of intrinsics

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 comaring two target dependent intrinsics, the Name already
includes llvm.<TargetPrefix> as a suffix, so no need to needlessly
compare it separately.
---
 llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp b/llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp
index 05104e938b8486..bcbf204830a9dc 100644
--- a/llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp
+++ b/llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp
@@ -49,11 +49,14 @@ CodeGenIntrinsicTable::CodeGenIntrinsicTable(const RecordKeeper &RC) {
   for (const Record *Def : Defs)
     Intrinsics.push_back(CodeGenIntrinsic(Def, Ctx));
 
-  llvm::sort(Intrinsics,
-             [](const CodeGenIntrinsic &LHS, const CodeGenIntrinsic &RHS) {
-               return std::tie(LHS.TargetPrefix, LHS.Name) <
-                      std::tie(RHS.TargetPrefix, RHS.Name);
-             });
+  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();
+    return std::tie(LHSHasTarget, LHS.Name) < std::tie(RHSHasTarget, RHS.Name);
+  });
+
   Targets.push_back({"", 0, 0});
   for (size_t I = 0, E = Intrinsics.size(); I < E; ++I)
     if (Intrinsics[I].TargetPrefix != Targets.back().Name) {



More information about the llvm-commits mailing list