LLVM 每周 - 第 101 期,2015 年 12 月 7 日
欢迎阅读 LLVM 每周的第 101 期,这是一份每周发布(每周一发布)的新闻简报,涵盖 LLVM、Clang 和相关项目的进展。LLVM 每周由 Alex Bradbury 为您带来。订阅未来的版本,请访问 http://llvmweekly.org,并将其转发给您认为可能感兴趣的任何人。请将任何提示或反馈发送至 [email protected],或在 Twitter 上发送至 @llvmweekly 或 @asbradbury。
本期规范主页 可以在 llvmweekly.org 找到。
来自网络的新闻和文章
Swift 编程语言的实现 现在是开源的。它不再是简单的代码转储,现在将公开进行开发,并 鼓励外部贡献。如果您还没有,现在可能是一个好时机观看 Joseph Groff 和 Chris Lattner 的 关于 Swift 中间语言的演讲。
Rui Ueyama 在官方 LLVM 博客上写了关于新的 LLD ELF 链接器。
Visual C++ 团队发布了 带有 Microsoft CodeGen 的 Clang。它使用 Clang 解析器以及来自 Visual C++ 的代码生成器和优化器。大部分 Clang 和 LLVM 更改将被贡献回上游。
Alex Denisov 写了关于 使用 LLVM API 与 Swift 的文章。
如果您还没有为 FOSDEM 上的 LLVM 开发室提交您的演讲提案,现在您还有更多时间。请在周五之前提交您的提案。
邮件列表
Swift 团队成员已经开始讨论将他们的更改上游至 LLVM、Clang 和 LLDB。Clang 的更改包括添加一个“API 笔记”功能,该功能引起了其他开发人员的一些兴趣。它可用于通过外部 YAML 文件将某些属性与系统头文件中的函数关联,这比期望所有支持平台上的系统头文件都被更新要务实得多。
Vaivaswatha Nagaraj 观察到 malloc 和 realloc 没有设置 doesNotAccessMemory/onlyReadsMemory 属性,这使得 GlobalsAA 的效率大大降低。正如在随后的讨论中指出的那样,这些属性对于 malloc 和 realloc 不正确,但也许添加一个新的属性是有意义的。Vaivaswatha 起草了关于 HasInaccessibleState 属性的 RFC。这引发了很多讨论和替代方案,但尚未得出结论。
Christof Douma 发布了一份关于 向 ARM 代码生成器添加仅执行支持的 RFC。这意味着编译器不会生成对代码段的访问数据。
Oliver Stannard 发布了一份关于 支持针对小型嵌入式系统的 ARM 上的与位置无关代码的 RFC。在只读位置独立性 (ROPI) 中,代码和只读数据通过 PC 相对访问,偏移量在静态链接时已知。在读写位置独立性 (RWPI) 中,读写数据相对于静态基址寄存器 (R9) 访问。
本周的争论话题是关于 LLVM 内在函数的命名约定。建议使用
.
作为分隔符进行标准化。有一些建议是允许_
出现在单词中。您如何以不同的优化级别重新编译函数?Lang Hames 提供了一个使用 Orc API 执行此操作的示例。
LLVM 提交
llc 和 opt 增加了运行所有通道两次的选项。这旨在帮助找出在使用相同的通道管理器编译多个模块时出现的错误。 r254774。
已提交了 llvm-dwp 的初始原型。最终,它将成为一个工具,用于从多个 .dwo 分割调试文件构建 DWARF 包文件。 r254355。
MachineBasicBlock 中的所有基于权重的接口现在都已替换为基于概率的接口。 r254377。
LLVM 的 STLExtras 获得了基于范围的
std::any_of
和std::find
版本。 r254391、r254390。已添加
llvm.get.dynamic.area.offset.{i32,264}
内在函数。它们可用于获取最新动态 alloca 的地址。 r254404。X86 后端获得了一个新的通道,通过删除 LEA 的冗余地址重新计算来减少代码大小。 r254712。
WebAssembly 后端现在对 varargs 具有初步支持。 r254799。
Clang 提交
已添加了针对间接调用的前向边缘 CFI 的设计文档。 r254464。
pass_object_size
属性已添加到 Clang。它旨在用于解决__builtin_object_size
无法正常运行的情况。 r254554。已添加有关 UndefinedBehaviorSanitizer 的文档。 r254733。