@@ -264,6 +264,7 @@ pub struct ModuleConfig {
264
264
vectorize_loop : bool ,
265
265
vectorize_slp : bool ,
266
266
merge_functions : bool ,
267
+ inline_threshold : Option < usize >
267
268
}
268
269
269
270
unsafe impl Send for ModuleConfig { }
@@ -289,6 +290,7 @@ impl ModuleConfig {
289
290
vectorize_loop : false ,
290
291
vectorize_slp : false ,
291
292
merge_functions : false ,
293
+ inline_threshold : None
292
294
}
293
295
}
294
296
@@ -297,6 +299,7 @@ impl ModuleConfig {
297
299
self . no_prepopulate_passes = sess. opts . cg . no_prepopulate_passes ;
298
300
self . no_builtins = trans. no_builtins ;
299
301
self . time_passes = sess. time_passes ( ) ;
302
+ self . inline_threshold = sess. opts . cg . inline_threshold ;
300
303
301
304
// Copy what clang does by turning on loop vectorization at O2 and
302
305
// slp vectorization at O3. Otherwise configure other optimization aspects
@@ -1005,6 +1008,7 @@ pub unsafe fn with_llvm_pmb(llmod: ModuleRef,
1005
1008
// manager.
1006
1009
let builder = llvm:: LLVMPassManagerBuilderCreate ( ) ;
1007
1010
let opt = config. opt_level . unwrap_or ( llvm:: CodeGenLevelNone ) ;
1011
+ let inline_threshold = config. inline_threshold ;
1008
1012
1009
1013
llvm:: LLVMRustConfigurePassManagerBuilder ( builder, opt,
1010
1014
config. merge_functions ,
@@ -1017,17 +1021,20 @@ pub unsafe fn with_llvm_pmb(llmod: ModuleRef,
1017
1021
// always-inline functions (but don't add lifetime intrinsics), at O1 we
1018
1022
// inline with lifetime intrinsics, and O2+ we add an inliner with a
1019
1023
// thresholds copied from clang.
1020
- match opt {
1021
- llvm:: CodeGenLevelNone => {
1024
+ match ( opt, inline_threshold) {
1025
+ ( _, Some ( t) ) => {
1026
+ llvm:: LLVMPassManagerBuilderUseInlinerWithThreshold ( builder, t as u32 ) ;
1027
+ }
1028
+ ( llvm:: CodeGenLevelNone , _) => {
1022
1029
llvm:: LLVMRustAddAlwaysInlinePass ( builder, false ) ;
1023
1030
}
1024
- llvm:: CodeGenLevelLess => {
1031
+ ( llvm:: CodeGenLevelLess , _ ) => {
1025
1032
llvm:: LLVMRustAddAlwaysInlinePass ( builder, true ) ;
1026
1033
}
1027
- llvm:: CodeGenLevelDefault => {
1034
+ ( llvm:: CodeGenLevelDefault , _ ) => {
1028
1035
llvm:: LLVMPassManagerBuilderUseInlinerWithThreshold ( builder, 225 ) ;
1029
1036
}
1030
- llvm:: CodeGenLevelAggressive => {
1037
+ ( llvm:: CodeGenLevelAggressive , _ ) => {
1031
1038
llvm:: LLVMPassManagerBuilderUseInlinerWithThreshold ( builder, 275 ) ;
1032
1039
}
1033
1040
}
0 commit comments