Skip to content

Commit 91fd3e7

Browse files
authored
[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.
1 parent bcd65ba commit 91fd3e7

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,21 @@ CodeGenIntrinsicTable::CodeGenIntrinsicTable(const RecordKeeper &RC) {
4949
for (const Record *Def : Defs)
5050
Intrinsics.emplace_back(CodeGenIntrinsic(Def, Ctx));
5151

52-
// To ensure deterministic sorted order when duplicates are present, use
53-
// record ID as a tie-breaker similar to sortAndReportDuplicates in Utils.cpp.
5452
llvm::sort(Intrinsics,
5553
[](const CodeGenIntrinsic &LHS, const CodeGenIntrinsic &RHS) {
54+
// Order target independent intrinsics before target dependent
55+
// ones.
56+
bool LHSHasTarget = !LHS.TargetPrefix.empty();
57+
bool RHSHasTarget = !RHS.TargetPrefix.empty();
58+
59+
// To ensure deterministic sorted order when duplicates are
60+
// present, use record ID as a tie-breaker similar to
61+
// sortAndReportDuplicates in Utils.cpp.
5662
unsigned LhsID = LHS.TheDef->getID();
5763
unsigned RhsID = RHS.TheDef->getID();
58-
return std::tie(LHS.TargetPrefix, LHS.Name, LhsID) <
59-
std::tie(RHS.TargetPrefix, RHS.Name, RhsID);
64+
65+
return std::tie(LHSHasTarget, LHS.Name, LhsID) <
66+
std::tie(RHSHasTarget, RHS.Name, RhsID);
6067
});
6168

6269
Targets.push_back({"", 0, 0});

0 commit comments

Comments
 (0)