Skip to content

Commit fb3928d

Browse files
committed
[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.
1 parent e0458a2 commit fb3928d

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)