diff --git a/llvm/include/llvm/IR/PassManager.h b/llvm/include/llvm/IR/PassManager.h --- a/llvm/include/llvm/IR/PassManager.h +++ b/llvm/include/llvm/IR/PassManager.h @@ -548,8 +548,9 @@ } template - std::enable_if_t::value> - addPass(PassT &&Pass) { + LLVM_ATTRIBUTE_MINSIZE + std::enable_if_t::value> + addPass(PassT &&Pass) { using PassModelT = detail::PassModel; @@ -565,8 +566,9 @@ /// implementation complexity and avoid potential invalidation issues that may /// happen with nested pass managers of the same type. template - std::enable_if_t::value> - addPass(PassT &&Pass) { + LLVM_ATTRIBUTE_MINSIZE + std::enable_if_t::value> + addPass(PassT &&Pass) { for (auto &P : Pass.Passes) Passes.push_back(std::move(P)); } diff --git a/llvm/include/llvm/Support/Compiler.h b/llvm/include/llvm/Support/Compiler.h --- a/llvm/include/llvm/Support/Compiler.h +++ b/llvm/include/llvm/Support/Compiler.h @@ -212,6 +212,12 @@ #define LLVM_READONLY #endif +#if __has_attribute(minsize) +#define LLVM_ATTRIBUTE_MINSIZE __attribute__((minsize)) +#else +#define LLVM_ATTRIBUTE_MINSIZE +#endif + #if __has_builtin(__builtin_expect) || LLVM_GNUC_PREREQ(4, 0, 0) #define LLVM_LIKELY(EXPR) __builtin_expect((bool)(EXPR), true) #define LLVM_UNLIKELY(EXPR) __builtin_expect((bool)(EXPR), false) diff --git a/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h b/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h --- a/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h +++ b/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h @@ -103,8 +103,9 @@ /// to the end of \var IsLoopNestPass so we can easily identify the types of /// passes in the pass manager later. template - std::enable_if_t::value> - addPass(PassT &&Pass) { + LLVM_ATTRIBUTE_MINSIZE + std::enable_if_t::value> + addPass(PassT &&Pass) { using LoopPassModelT = detail::PassModel; @@ -116,8 +117,9 @@ } template - std::enable_if_t::value> - addPass(PassT &&Pass) { + LLVM_ATTRIBUTE_MINSIZE + std::enable_if_t::value> + addPass(PassT &&Pass) { using LoopNestPassModelT = detail::PassModel - std::enable_if_t::value> - addPass(RepeatedPass &&Pass) { + LLVM_ATTRIBUTE_MINSIZE + std::enable_if_t::value> + addPass(RepeatedPass &&Pass) { using RepeatedLoopPassModelT = detail::PassModel, PreservedAnalyses, LoopAnalysisManager, LoopStandardAnalysisResults &, @@ -147,8 +150,9 @@ } template - std::enable_if_t::value> - addPass(RepeatedPass &&Pass) { + LLVM_ATTRIBUTE_MINSIZE + std::enable_if_t::value> + addPass(RepeatedPass &&Pass) { using RepeatedLoopNestPassModelT = detail::PassModel, PreservedAnalyses, LoopAnalysisManager, LoopStandardAnalysisResults &,