Skip to content

Commit 1ccdda0

Browse files
homurollhaitaka
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 1eb9278 commit 1ccdda0

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
@@ -96,6 +96,9 @@ class PipelineTuningOptions {
9696
// analyses after various module->function or cgscc->function adaptors in the
9797
// default pipelines.
9898
bool EagerlyInvalidateAnalyses;
99+
100+
/// Tuning option to override default devirtualization iterations.
101+
int MaxDevirtIterations;
99102
};
100103

101104
/// 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
@@ -145,6 +145,11 @@ void LLVMPassBuilderOptionsSetInlinerThreshold(
145145
unwrap(Options)->PTO.InlinerThreshold = Threshold;
146146
}
147147

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

llvm/lib/Passes/PassBuilderPipelines.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ PipelineTuningOptions::PipelineTuningOptions() {
321321
UnifiedLTO = false;
322322
MergeFunctions = EnableMergeFunctions;
323323
InlinerThreshold = -1;
324+
MaxDevirtIterations = -1;
324325
EagerlyInvalidateAnalyses = EnableEagerlyInvalidateAnalyses;
325326
}
326327

@@ -912,9 +913,10 @@ PassBuilder::buildInlinerPipeline(OptimizationLevel Level,
912913
if (PGOOpt)
913914
IP.EnableDeferral = EnablePGOInlineDeferral;
914915

916+
int MDI = PTO.MaxDevirtIterations == -1 ? MaxDevirtIterations : PTO.MaxDevirtIterations;
915917
ModuleInlinerWrapperPass MIWP(IP, PerformMandatoryInliningsFirst,
916918
InlineContext{Phase, InlinePass::CGSCCInliner},
917-
UseInlineAdvisor, MaxDevirtIterations);
919+
UseInlineAdvisor, MDI);
918920

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

0 commit comments

Comments
 (0)