diff options
| author | Valery Pykhtin <Valery.Pykhtin@amd.com> | 2019-06-07 12:16:46 +0000 |
|---|---|---|
| committer | Valery Pykhtin <Valery.Pykhtin@amd.com> | 2019-06-07 12:16:46 +0000 |
| commit | cb8de55f474984be7d21c4c43140e134af09bfa5 (patch) | |
| tree | 545d669d1ba7509baa6452eabe78192b6e2cf02a /llvm/lib/Target | |
| parent | 32742d8f368c315d0c31cb18abbaec32a1c059ff (diff) | |
| download | bcm5719-llvm-cb8de55f474984be7d21c4c43140e134af09bfa5.tar.gz bcm5719-llvm-cb8de55f474984be7d21c4c43140e134af09bfa5.zip | |
[AMDGPU] Constrain the AMDGPU inliner on maximum number of basic blocks in a caller function (compile time performance)
Differential revision: https://reviews.llvm.org/D62917
llvm-svn: 362789
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUInline.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInline.cpp b/llvm/lib/Target/AMDGPU/AMDGPUInline.cpp index 72388a195de..ba9fdf2dc60 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUInline.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUInline.cpp @@ -49,6 +49,12 @@ static cl::opt<unsigned> ArgAllocaCutoff("amdgpu-inline-arg-alloca-cutoff", cl::Hidden, cl::init(256), cl::desc("Maximum alloca size to use for inline cost")); +// Inliner constraint to achieve reasonable compilation time +static cl::opt<size_t> +MaxBB("amdgpu-inline-max-bb", cl::Hidden, cl::init(300), + cl::desc("Maximum BB number allowed in a function after inlining" + " (compile time constraint)")); + namespace { class AMDGPUInliner : public LegacyInlinerBase { @@ -208,7 +214,15 @@ InlineCost AMDGPUInliner::getInlineCost(CallSite CS) { return ACT->getAssumptionCache(F); }; - return llvm::getInlineCost(cast<CallBase>(*CS.getInstruction()), Callee, + auto IC = llvm::getInlineCost(cast<CallBase>(*CS.getInstruction()), Callee, LocalParams, TTI, GetAssumptionCache, None, PSI, RemarksEnabled ? &ORE : nullptr); + + if (IC && !IC.isAlways()) { + // Single BB does not increase total BB amount, thus subtract 1 + size_t Size = Caller->size() + Callee->size() - 1; + if (MaxBB && Size > MaxBB) + return llvm::InlineCost::getNever("max number of bb exceeded"); + } + return IC; } |

