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