Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
5c88a1cd
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5c88a1cd
编写于
11月 19, 2015
作者:
B
Brian Anderson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add -C inline-threshold
Corresponds directly to llvm's inline-threshold
上级
6861c514
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
14 addition
and
5 deletion
+14
-5
src/librustc/session/config.rs
src/librustc/session/config.rs
+2
-0
src/librustc_trans/back/write.rs
src/librustc_trans/back/write.rs
+12
-5
未找到文件。
src/librustc/session/config.rs
浏览文件 @
5c88a1cd
...
...
@@ -513,6 +513,8 @@ fn parse_passes(slot: &mut Passes, v: Option<&str>) -> bool {
"optimize with possible levels 0-3"
),
debug_assertions
:
Option
<
bool
>
=
(
None
,
parse_opt_bool
,
"explicitly enable the cfg(debug_assertions) directive"
),
inline_threshold
:
Option
<
usize
>
=
(
None
,
parse_opt_uint
,
"set the inlining threshold for"
),
}
...
...
src/librustc_trans/back/write.rs
浏览文件 @
5c88a1cd
...
...
@@ -264,6 +264,7 @@ pub struct ModuleConfig {
vectorize_loop
:
bool
,
vectorize_slp
:
bool
,
merge_functions
:
bool
,
inline_threshold
:
Option
<
usize
>
}
unsafe
impl
Send
for
ModuleConfig
{
}
...
...
@@ -289,6 +290,7 @@ fn new(tm: TargetMachineRef, passes: Vec<String>) -> ModuleConfig {
vectorize_loop
:
false
,
vectorize_slp
:
false
,
merge_functions
:
false
,
inline_threshold
:
None
}
}
...
...
@@ -297,6 +299,7 @@ fn set_flags(&mut self, sess: &Session, trans: &CrateTranslation) {
self
.no_prepopulate_passes
=
sess
.opts.cg.no_prepopulate_passes
;
self
.no_builtins
=
trans
.no_builtins
;
self
.time_passes
=
sess
.time_passes
();
self
.inline_threshold
=
sess
.opts.cg.inline_threshold
;
// Copy what clang does by turning on loop vectorization at O2 and
// slp vectorization at O3. Otherwise configure other optimization aspects
...
...
@@ -1005,6 +1008,7 @@ pub unsafe fn with_llvm_pmb(llmod: ModuleRef,
// manager.
let
builder
=
llvm
::
LLVMPassManagerBuilderCreate
();
let
opt
=
config
.opt_level
.unwrap_or
(
llvm
::
CodeGenLevelNone
);
let
inline_threshold
=
config
.inline_threshold
;
llvm
::
LLVMRustConfigurePassManagerBuilder
(
builder
,
opt
,
config
.merge_functions
,
...
...
@@ -1017,17 +1021,20 @@ pub unsafe fn with_llvm_pmb(llmod: ModuleRef,
// always-inline functions (but don't add lifetime intrinsics), at O1 we
// inline with lifetime intrinsics, and O2+ we add an inliner with a
// thresholds copied from clang.
match
opt
{
llvm
::
CodeGenLevelNone
=>
{
match
(
opt
,
inline_threshold
)
{
(
_
,
Some
(
t
))
=>
{
llvm
::
LLVMPassManagerBuilderUseInlinerWithThreshold
(
builder
,
t
as
u32
);
}
(
llvm
::
CodeGenLevelNone
,
_
)
=>
{
llvm
::
LLVMRustAddAlwaysInlinePass
(
builder
,
false
);
}
llvm
::
CodeGenLevelLess
=>
{
(
llvm
::
CodeGenLevelLess
,
_
)
=>
{
llvm
::
LLVMRustAddAlwaysInlinePass
(
builder
,
true
);
}
llvm
::
CodeGenLevelDefault
=>
{
(
llvm
::
CodeGenLevelDefault
,
_
)
=>
{
llvm
::
LLVMPassManagerBuilderUseInlinerWithThreshold
(
builder
,
225
);
}
llvm
::
CodeGenLevelAggressive
=>
{
(
llvm
::
CodeGenLevelAggressive
,
_
)
=>
{
llvm
::
LLVMPassManagerBuilderUseInlinerWithThreshold
(
builder
,
275
);
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录