Skip to content

Commit 41e95d2

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 009398b commit 41e95d2

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

llvm/utils/TableGen/Basic/CodeGenIntrinsics.cpp

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

52-
llvm::sort(Intrinsics,
53-
[](const CodeGenIntrinsic &LHS, const CodeGenIntrinsic &RHS) {
54-
return std::tie(LHS.TargetPrefix, LHS.Name) <
55-
std::tie(RHS.TargetPrefix, RHS.Name);
56-
});
52+
llvm::sort(Intrinsics, [](const CodeGenIntrinsic &LHS,
53+
const CodeGenIntrinsic &RHS) {
54+
// Order target independent intrinsics before target dependent ones.
55+
bool LHSHasTarget = !LHS.TargetPrefix.empty();
56+
bool RHSHasTarget = !RHS.TargetPrefix.empty();
57+
return std::tie(LHSHasTarget, LHS.Name) < std::tie(RHSHasTarget, RHS.Name);
58+
});
59+
5760
Targets.push_back({"", 0, 0});
5861
for (size_t I = 0, E = Intrinsics.size(); I < E; ++I)
5962
if (Intrinsics[I].TargetPrefix != Targets.back().Name) {

0 commit comments

Comments
 (0)