Skip to content

Commit 41ff517

Browse files
aeubanksmemfrob
authored andcommitted
Mark PassBuilder::addPass() as minsize
PassBuilder.cpp is the slowest LLVM file to compile (if only building X86). This makes PassBuilder.o a little faster to compile and a little smaller as well. These methods are not performance critical at all but are instantiated many times. 83M -> 72M instructions according to perf stat. Reviewed By: rnk Differential Revision: https://reviews.llvm.org/D110782
1 parent 0f56f50 commit 41ff517

File tree

3 files changed

+24
-12
lines changed

3 files changed

+24
-12
lines changed

llvm/include/llvm/IR/PassManager.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -548,8 +548,9 @@ class PassManager : public PassInfoMixin<
548548
}
549549

550550
template <typename PassT>
551-
std::enable_if_t<!std::is_same<PassT, PassManager>::value>
552-
addPass(PassT &&Pass) {
551+
LLVM_ATTRIBUTE_MINSIZE
552+
std::enable_if_t<!std::is_same<PassT, PassManager>::value>
553+
addPass(PassT &&Pass) {
553554
using PassModelT =
554555
detail::PassModel<IRUnitT, PassT, PreservedAnalyses, AnalysisManagerT,
555556
ExtraArgTs...>;
@@ -565,8 +566,9 @@ class PassManager : public PassInfoMixin<
565566
/// implementation complexity and avoid potential invalidation issues that may
566567
/// happen with nested pass managers of the same type.
567568
template <typename PassT>
568-
std::enable_if_t<std::is_same<PassT, PassManager>::value>
569-
addPass(PassT &&Pass) {
569+
LLVM_ATTRIBUTE_MINSIZE
570+
std::enable_if_t<std::is_same<PassT, PassManager>::value>
571+
addPass(PassT &&Pass) {
570572
for (auto &P : Pass.Passes)
571573
Passes.push_back(std::move(P));
572574
}

llvm/include/llvm/Support/Compiler.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,12 @@
212212
#define LLVM_READONLY
213213
#endif
214214

215+
#if __has_attribute(minsize)
216+
#define LLVM_ATTRIBUTE_MINSIZE __attribute__((minsize))
217+
#else
218+
#define LLVM_ATTRIBUTE_MINSIZE
219+
#endif
220+
215221
#if __has_builtin(__builtin_expect) || LLVM_GNUC_PREREQ(4, 0, 0)
216222
#define LLVM_LIKELY(EXPR) __builtin_expect((bool)(EXPR), true)
217223
#define LLVM_UNLIKELY(EXPR) __builtin_expect((bool)(EXPR), false)

llvm/include/llvm/Transforms/Scalar/LoopPassManager.h

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,9 @@ class PassManager<Loop, LoopAnalysisManager, LoopStandardAnalysisResults &,
103103
/// to the end of \var IsLoopNestPass so we can easily identify the types of
104104
/// passes in the pass manager later.
105105
template <typename PassT>
106-
std::enable_if_t<is_detected<HasRunOnLoopT, PassT>::value>
107-
addPass(PassT &&Pass) {
106+
LLVM_ATTRIBUTE_MINSIZE
107+
std::enable_if_t<is_detected<HasRunOnLoopT, PassT>::value>
108+
addPass(PassT &&Pass) {
108109
using LoopPassModelT =
109110
detail::PassModel<Loop, PassT, PreservedAnalyses, LoopAnalysisManager,
110111
LoopStandardAnalysisResults &, LPMUpdater &>;
@@ -116,8 +117,9 @@ class PassManager<Loop, LoopAnalysisManager, LoopStandardAnalysisResults &,
116117
}
117118

118119
template <typename PassT>
119-
std::enable_if_t<!is_detected<HasRunOnLoopT, PassT>::value>
120-
addPass(PassT &&Pass) {
120+
LLVM_ATTRIBUTE_MINSIZE
121+
std::enable_if_t<!is_detected<HasRunOnLoopT, PassT>::value>
122+
addPass(PassT &&Pass) {
121123
using LoopNestPassModelT =
122124
detail::PassModel<LoopNest, PassT, PreservedAnalyses,
123125
LoopAnalysisManager, LoopStandardAnalysisResults &,
@@ -133,8 +135,9 @@ class PassManager<Loop, LoopAnalysisManager, LoopStandardAnalysisResults &,
133135
// `RepeatedPass` has a templated `run` method that will result in incorrect
134136
// detection of `HasRunOnLoopT`.
135137
template <typename PassT>
136-
std::enable_if_t<is_detected<HasRunOnLoopT, PassT>::value>
137-
addPass(RepeatedPass<PassT> &&Pass) {
138+
LLVM_ATTRIBUTE_MINSIZE
139+
std::enable_if_t<is_detected<HasRunOnLoopT, PassT>::value>
140+
addPass(RepeatedPass<PassT> &&Pass) {
138141
using RepeatedLoopPassModelT =
139142
detail::PassModel<Loop, RepeatedPass<PassT>, PreservedAnalyses,
140143
LoopAnalysisManager, LoopStandardAnalysisResults &,
@@ -147,8 +150,9 @@ class PassManager<Loop, LoopAnalysisManager, LoopStandardAnalysisResults &,
147150
}
148151

149152
template <typename PassT>
150-
std::enable_if_t<!is_detected<HasRunOnLoopT, PassT>::value>
151-
addPass(RepeatedPass<PassT> &&Pass) {
153+
LLVM_ATTRIBUTE_MINSIZE
154+
std::enable_if_t<!is_detected<HasRunOnLoopT, PassT>::value>
155+
addPass(RepeatedPass<PassT> &&Pass) {
152156
using RepeatedLoopNestPassModelT =
153157
detail::PassModel<LoopNest, RepeatedPass<PassT>, PreservedAnalyses,
154158
LoopAnalysisManager, LoopStandardAnalysisResults &,

0 commit comments

Comments
 (0)