Skip to content

Commit 74a4177

Browse files
authored
Added an option to configure MaxDevirtIterations (#3)
* Added an option to configure MaxDevirtIterations * fixup! Added an option to configure MaxDevirtIterations
1 parent 7cc4fe9 commit 74a4177

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
@@ -91,6 +91,9 @@ class PipelineTuningOptions {
9191
// analyses after various module->function or cgscc->function adaptors in the
9292
// default pipelines.
9393
bool EagerlyInvalidateAnalyses;
94+
95+
/// Tuning option to override default devirtualization iterations.
96+
int MaxDevirtIterations;
9497
};
9598

9699
/// 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
@@ -202,6 +202,7 @@ PipelineTuningOptions::PipelineTuningOptions() {
202202
CallGraphProfile = true;
203203
MergeFunctions = EnableMergeFunctions;
204204
InlinerThreshold = -1;
205+
MaxDevirtIterations = -1;
205206
EagerlyInvalidateAnalyses = EnableEagerlyInvalidateAnalyses;
206207
}
207208

@@ -747,9 +748,10 @@ PassBuilder::buildInlinerPipeline(OptimizationLevel Level,
747748
if (PGOOpt)
748749
IP.EnableDeferral = EnablePGOInlineDeferral;
749750

751+
int MDI = PTO.MaxDevirtIterations == -1 ? MaxDevirtIterations : PTO.MaxDevirtIterations;
750752
ModuleInlinerWrapperPass MIWP(IP, PerformMandatoryInliningsFirst,
751753
InlineContext{Phase, InlinePass::CGSCCInliner},
752-
UseInlineAdvisor, MaxDevirtIterations);
754+
UseInlineAdvisor, MDI);
753755

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

0 commit comments

Comments
 (0)