Skip to content

Commit 6f14f2e

Browse files
homurollSvyatoslavScherbina
authored andcommitted
Added an option to configure MaxDevirtIterations (#3)
* Added an option to configure MaxDevirtIterations * fixup! Added an option to configure MaxDevirtIterations (cherry picked from commit 74a4177)
1 parent 176f3d5 commit 6f14f2e

File tree

4 files changed

+14
-1
lines changed

4 files changed

+14
-1
lines changed

llvm/include/llvm-c/Transforms/PassBuilder.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@ void LLVMPassBuilderOptionsSetMergeFunctions(LLVMPassBuilderOptionsRef Options,
102102
void LLVMPassBuilderOptionsSetInlinerThreshold(
103103
LLVMPassBuilderOptionsRef Options, int Threshold);
104104

105+
void LLVMPassBuilderOptionsSetMaxDevirtIterations(
106+
LLVMPassBuilderOptionsRef Options, int Iterations);
107+
105108
/**
106109
* Dispose of a heap-allocated PassBuilderOptions instance
107110
*/

llvm/include/llvm/Passes/PassBuilder.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ class PipelineTuningOptions {
8585
// analyses after various module->function or cgscc->function adaptors in the
8686
// default pipelines.
8787
bool EagerlyInvalidateAnalyses;
88+
89+
/// Tuning option to override default devirtualization iterations.
90+
int MaxDevirtIterations;
8891
};
8992

9093
/// This class provides access to building LLVM's passes.

llvm/lib/Passes/PassBuilderBindings.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,11 @@ void LLVMPassBuilderOptionsSetInlinerThreshold(
144144
unwrap(Options)->PTO.InlinerThreshold = Threshold;
145145
}
146146

147+
void LLVMPassBuilderOptionsSetMaxDevirtIterations(
148+
LLVMPassBuilderOptionsRef Options, int Iterations) {
149+
unwrap(Options)->PTO.MaxDevirtIterations = Iterations;
150+
}
151+
147152
void LLVMDisposePassBuilderOptions(LLVMPassBuilderOptionsRef Options) {
148153
delete unwrap(Options);
149154
}

llvm/lib/Passes/PassBuilderPipelines.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ PipelineTuningOptions::PipelineTuningOptions() {
290290
CallGraphProfile = true;
291291
MergeFunctions = EnableMergeFunctions;
292292
InlinerThreshold = -1;
293+
MaxDevirtIterations = -1;
293294
EagerlyInvalidateAnalyses = EnableEagerlyInvalidateAnalyses;
294295
}
295296

@@ -810,9 +811,10 @@ PassBuilder::buildInlinerPipeline(OptimizationLevel Level,
810811
if (PGOOpt)
811812
IP.EnableDeferral = EnablePGOInlineDeferral;
812813

814+
int MDI = PTO.MaxDevirtIterations == -1 ? MaxDevirtIterations : PTO.MaxDevirtIterations;
813815
ModuleInlinerWrapperPass MIWP(IP, PerformMandatoryInliningsFirst,
814816
InlineContext{Phase, InlinePass::CGSCCInliner},
815-
UseInlineAdvisor, MaxDevirtIterations);
817+
UseInlineAdvisor, MDI);
816818

817819
// Require the GlobalsAA analysis for the module so we can query it within
818820
// the CGSCC pipeline.

0 commit comments

Comments
 (0)