LLVM 每周 - 第 11 期,2014 年 3 月 17 日
欢迎阅读 LLVM 每周的第十一期,这是一份每周发布(每周一发布)的新闻通讯,涵盖 LLVM、Clang 和相关项目的最新进展。LLVM 每周由 Alex Bradbury 为您提供。订阅未来几期,请访问 http://llvmweekly.org,并将其传递给您认为可能感兴趣的任何其他人。请将任何建议或反馈发送至 [email protected],或在 Twitter 上发送至 @llvmweekly 或 @asbradbury。
在我写的 与树莓派一起学习 Python (美国) 这本书中,我的个人简介似乎多了一个逗号,导致我的描述不是“编译器黑客,...”而是“编译器、黑客、Linux 极客和自由软件爱好者”。因此,这已经正式确认,我是一个编译器。我想这让我特别适合撰写 LLVM 每周。
以前我只链接到实习机会,而不是招聘广告。我很想知道读者对链接到寻找具有 LLVM 经验的人的招聘广告的看法?请通过电子邮件或 Twitter 告诉我。
此期的规范首页可以在 llvmweekly.org 上找到。
来自网络的新闻和文章
LLVM 流行的 'Kaleidoscope' 教程(关于使用 LLVM 实现一种语言)已被 移植到 Rust。
已经公布了 EuroLLVM 2014 的议程。EuroLLVM 将于 4 月 7 日和 8 日在苏格兰爱丁堡举行。在撰写本文时,仍然有一些名额可用。
PNaCl 的“金丝雀”工具链现在 基于 LLVM 3.4。
英特尔内联函数指南 是一个有用的参考,介绍了现代英特尔 CPU 上可用的各种专用功能。
博通剑桥正在 寻找一名 LLVM 编译器工程师。请参阅招聘广告了解更多信息。
在邮件列表中
在 这篇文章中关于评估 LLVM 的寄存器分配器 的主题中,有一些有用的信息,特别是如何确保所有寄存器分配器都被链接到 clang 二进制文件中。
David Majinemer 在 关于在 LLVM IR 中提供节声明的 RFC 上发帖。当前,节属性可以在 GlobalVariables 和 Functions 上使用,但正如 RFC 中指出的那样,这存在问题。另一个关键的动机是支持表示 Microsoft ABI 的 RTTI(运行时类型信息)数据。
Justin Bogner 发布了两个与分析相关的 RFC。第一个与 创建用于读取和写入分析数据的 LLVM 库 相关。他还提出了一个 用于基于检测的分析数据的二进制格式,而不是当前使用的简单文本格式。一个用于处理提议的二进制分析数据格式的库实际上 在本周提交了,但该提交为了进行更多讨论而被撤回。
Mike McFadden 的 关于他实现的原地归并排序的详细说明 本周在 Reddit 和 Hacker News 上广为传播。他在 clang 邮件列表上发帖,询问是否有人可以与他交谈,关于使用他的实现来替换 libcxx 当前的
inplace_stable_sort
(他的实现比其快 3-15 倍)。对于他在 cfe-commits 上发布的帖子,还没有任何回复。Mikael Persson 在邮件列表中宣布,他一直在继续开发 Templight 调试器,并附上了 Templight 修补程序的修订版本。 Templight 是 C++ 模板元编程的调试器和分析器。与之前的官方版本相比,主要的新增功能是 Mikael 添加了一个 gdb 样式的调试器。
Rudolphe Suescun 关于 lld 是否已准备好用于他的项目 的问题引发了一些有趣的回复,详细介绍了当前的状态和 LLVM 链接器 lld 的不足之处。特别是,当前缺乏对链接器脚本的支持以及在链接时缺乏对合并调试信息的 支持。
LLVM 提交
我认为上周没有提到过这一点,但已经决定将覆盖其基类的虚方法标记为
override
关键字(并且virtual
关键字将被认为是多余的)。r203433、r203442 等等。对 MIPS 上的 NaCl 支持进行了开发,包括对加载、存储、堆栈指针更改和函数调用的沙箱支持。 r203484、r203606。
正如上周的 RFC 中所讨论的,cmpxchg 现在有一个第二个排序操作数,用于描述在没有进行交换的情况下所需的语义。 r203559。
添加了一个优化,以便可以通过添加一个位掩码检查来执行从 switch 到查找表的转换。提交消息中给出了一个示例。 r203694。
已删除示例 LLVM 项目。它随着时间的推移而腐烂,并且在 LLVM 正从 autoconf/automake 迁移到 CMake 的时候没有包含 CMake 支持。 r203729。
PowerPC 后端学习了对 VSX 指令集扩展的基本支持。 r203768。
合并了一个修补集,以将 MergeFunctions 时间复杂度从
O(N*N)
改进为O(N*log(N))
。 r203788。MachineRegisterInfo 正在进行一些主要的重构,以便允许使用 C++11 基于范围的 for 循环。 r203865。
已删除
linker_private
和linker_private_weak
链接类型。 r203866。
Clang 提交
在概要引导优化 (PGO) 的世界中,PGO 计数器现在会在必要时缩减到 32 位,而不是仅仅截断。 r203592。
静态分析器获得了对检测将指针传递给 const 但未初始化的内存的支持。 r203822。
-Wunreachable-code
诊断已分解为不同的诊断组,以便提供对不可到达代码检查的访问,以用于-Wunreachable-code
的默认启发式方法不足的情况。 r203994。