Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
e155ecdc
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,发现更多精彩内容 >>
未验证
提交
e155ecdc
编写于
3月 15, 2018
作者:
E
Emilio Cobos Álvarez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
try to fix the build on older LLVM versions.
上级
4053e25b
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
26 addition
and
0 deletion
+26
-0
src/librustc_llvm/ffi.rs
src/librustc_llvm/ffi.rs
+1
-0
src/librustc_trans/base.rs
src/librustc_trans/base.rs
+7
-0
src/rustllvm/PassWrapper.cpp
src/rustllvm/PassWrapper.cpp
+18
-0
未找到文件。
src/librustc_llvm/ffi.rs
浏览文件 @
e155ecdc
...
...
@@ -1739,6 +1739,7 @@ pub fn LLVMRustBuildOperandBundleDef(Name: *const c_char,
pub
fn
LLVMRustModuleCost
(
M
:
ModuleRef
)
->
u64
;
pub
fn
LLVMRustThinLTOAvailable
()
->
bool
;
pub
fn
LLVMRustPGOAvailable
()
->
bool
;
pub
fn
LLVMRustWriteThinBitcodeToFile
(
PMR
:
PassManagerRef
,
M
:
ModuleRef
,
BC
:
*
const
c_char
)
->
bool
;
...
...
src/librustc_trans/base.rs
浏览文件 @
e155ecdc
...
...
@@ -708,6 +708,13 @@ pub fn trans_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
}
}
if
(
tcx
.sess.opts.debugging_opts.pgo_gen
.is_some
()
||
!
tcx
.sess.opts.debugging_opts.pgo_use
.is_empty
())
&&
unsafe
{
!
llvm
::
LLVMRustPGOAvailable
()
}
{
tcx
.sess
.fatal
(
"this compiler's LLVM does not support PGO"
);
}
let
crate_hash
=
tcx
.crate_hash
(
LOCAL_CRATE
);
let
link_meta
=
link
::
build_link_meta
(
crate_hash
);
...
...
src/rustllvm/PassWrapper.cpp
浏览文件 @
e155ecdc
...
...
@@ -44,6 +44,10 @@
#include "llvm-c/Transforms/PassManagerBuilder.h"
#if LLVM_VERSION_GE(4, 0)
#define PGO_AVAILABLE
#endif
using
namespace
llvm
;
using
namespace
llvm
::
legacy
;
...
...
@@ -435,6 +439,8 @@ extern "C" void LLVMRustConfigurePassManagerBuilder(
unwrap
(
PMBR
)
->
SLPVectorize
=
SLPVectorize
;
unwrap
(
PMBR
)
->
OptLevel
=
fromRust
(
OptLevel
);
unwrap
(
PMBR
)
->
LoopVectorize
=
LoopVectorize
;
#ifdef PGO_AVAILABLE
if
(
PGOGenPath
)
{
assert
(
!
PGOUsePath
);
unwrap
(
PMBR
)
->
EnablePGOInstrGen
=
true
;
...
...
@@ -444,6 +450,9 @@ extern "C" void LLVMRustConfigurePassManagerBuilder(
assert
(
!
PGOGenPath
);
unwrap
(
PMBR
)
->
PGOInstrUse
=
PGOUsePath
;
}
#else
assert
(
!
PGOGenPath
&&
!
PGOUsePath
&&
"Should've caught earlier"
);
#endif
}
// Unfortunately, the LLVM C API doesn't provide a way to set the `LibraryInfo`
...
...
@@ -776,6 +785,15 @@ LLVMRustThinLTOAvailable() {
#endif
}
extern
"C"
bool
LLVMRustPGOAvailable
()
{
#ifdef PGO_AVAILABLE
return
true
;
#else
return
false
;
#endif
}
#if LLVM_VERSION_GE(4, 0)
// Here you'll find an implementation of ThinLTO as used by the Rust compiler
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录