LLVM 每周 - 第 9 期,2014 年 3 月 3 日
欢迎来到 LLVM 每周的第九期,这是一个每周发布一次(每周一发布)的新闻通讯,涵盖 LLVM、Clang 和相关项目的最新进展。LLVM 每周由 Alex Bradbury 为您带来。订阅未来的期号,请访问 http://llvmweekly.org,并将它传递给您认为可能感兴趣的任何人。请将任何建议或反馈发送到 [email protected],或者在 Twitter 上发送到 @llvmweekly 或 @asbradbury。
除了上周又大了一岁之外,我还开始宣传我与 Ben Everard 合著的书籍,Learning Python with Raspberry Pi (Amazon US),它应该很快以平装本的形式出版,或者现在就可以在 Kindle 上购买。希望它很快就能在 oreilly.com 上以无 DRM 的数字格式提供。我将在 muxup.com 上发布更多关于我的 Raspberry Pi exploit 和教程,所以如果您感兴趣,请关注 @muxup。
本期文章的官方网站 可以在 llvmweekly.org 上找到。
来自网络的新闻和文章
Google Summer of Code 2014 的导师组织列表 已经发布。LLVM 是其中之一,因此任何有资格的编译器工程师都可能想查看 想法页面。我发现其他组织在宣传相关项目的想法,例如 Linux 基金会、X.org,当然还有 GCC。
在上周结束时,博通在 宣布发布 VideoCore IV 图形引擎的完整寄存器级文档 以及完整的图形驱动程序源代码方面迈出了重要一步。最著名的使用 VideoCore IV 的设备是 Raspberry Pi。发布的文档为制作类似于最近发布的 GPU 加速 FFT 库 支持的东西打开了大门。当然,LLVM 每周的一些读者可能对使用这些信息来制作一个 LLVM 后端感兴趣。希望以下几点提示会有所帮助。在 VideoCore IV 逆向工程项目 的主页上链接了许多资源。我特别要提一下 QPU 逆向工程工作,尽管博通的发布使得这项工作的逆向工程部分变得不必要,但它仍然包含了很好的信息。您可能想查看 raspi-internals 邮件列表 和 Freenode 上的 #raspberrypi-internals
。查看 VideoCore FFT 代码的带注释的反汇编 和 Herman Hermitage 的正在进行的 QPU 教程 也是值得的。
一个名为 Fracture 的体系结构无关的反编译器到 LLVM IR 的代码已发布。
Olivier Goffart 撰写了关于 他使用 libclang 对 Qt 的 moc 进行概念验证重新实现 的文章。它实际上是来自去年的,但我以前没见过。
Alex Denisov 撰写了关于 编写 clang 插件的指南。他提供了一个最小插件示例,该插件会对小写的 Objective C 类名发出警告。
Coursera 将在 3 月 17 日重新运行 他们的编译器课程。请查看 Dirkjan Ochtman 对之前课程运行的印象。
Qualcomm LLVM 团队正在 为实习生招聘。
邮件列表上的内容
Denis Steckelmacher 启动了一个关于使用 LLVM 进行代码生成的建议 GSoC 项目的讨论。来自 Kirill Batuzov 和 Julian Seward 的回复尤其有趣,他们详细阐述了为什么它不是“仅仅使用 LLVM 就能快速完成”的情况,并建议了一些可以提高 Valgrind 速度的更改。
Chandler Carruth 宣布他已经为构建系统上的 C++11 支持切换了开关。我个人欢迎我们的新的 C++11 主宰者。
对于那些对在 LLVM 上支持精确 GC 的问题感兴趣的人,请查看围绕 Philip Reames 的 关于表示安全点的提问 的讨论。
Alp Toker 提出了一种关于 LLVM OpenMP 运行时向前迈进的方法。现在主要的问题是没有真正的测试套件。Alp 的建议是组织几天的时间来调整 libgomp 测试套件(由于许可证原因,它将托管在外部)。
Jasper Neumann 提出了一种巧妙的优化方法 来检查模数。Benjamin Kramer 解释了将这种优化集成到窥视孔优化器中的难度。
Nico Weber 建议在 Clang 中添加一个警告,该警告会针对意外的缩进级别发出警告。他在错误追踪器上创建了一个 原型实现。
Saleem Abdulrasool 建议添加一个宏来指示正在使用 LLVM 集成汇编器。到目前为止,线程的回复者并不热衷于这个想法,他们指出项目应该真正检查他们需要的特定语法或功能是否有效,而不是将自己标记为与 LLVM 集成汇编器不兼容,当然 LLVM 集成汇编器将来可能会提高兼容性。
LLVM 提交
LLVM 添加了一个大端 AArch64 目标 r202024。有些人可能认为这是一次回退,但显然有相当多的人对 AArch64 上的大端感兴趣。在 ARM 的演讲 中,他们介绍了在 LE 主机上运行虚拟化的 BE 访客的情况。
C++11 开关的切换使得 LLVM 代码库中可以开始进行一些简化。例如,将简单的仿函数转换为 lambda 表达式。无论您喜欢还是讨厌 C++11 lambda 语法,它们肯定更简洁。 r202588。
OwningPtr<T>
获得了对转换为和从std::unique_ptr<T>
转换的支持,这为 LLVM 将来使用std::unique_ptr
奠定了基础。 r202609。编码标准文档已更新,以反映 LLVM/Clang 代码库中现在可以使用哪些 C++11 功能,以及提供有关其使用情况的指南。 r202497、r202620。
循环向量化器现在默认情况下包含在 LTO 优化管道中。 r202051。
DataLayout 已转换为普通对象,而不是传递。已经引入了包含 DataLayout 的 DataLayoutPass。 r202168。
PowerPC 后端学会了跟踪条件寄存器位,这为 POWER7 基准测试套件带来了可衡量的速度提升(10-35%)。 r202451。
X86 SSE 相关指令获得了一个调度模型。遗憾的是,目前没有迹象表明这是否对常见的基准测试产生了任何可衡量的差异。 r202065。
聚合体的标量替换传递 (SROA) 从 Chandler Carruth 获得了许多重构和错误修复,包括一些针对处理来自除默认地址空间以外的其他地址空间的指针的错误修复。 r202092、r202247 等等。
一个无效指针对检测器的实验性实现已作为 AddressSanitizer 的一部分添加。它试图识别何时将两个无关的指针进行比较或减法。 r202389。
流下泪水吧,因为 libtool 已从 LLVM 构建系统中删除。提交信息说它只被用来查找共享库扩展和 nm。93 行插入和 35277 行删除的 diffstat 说明了一切。 r202524。
Clang 提交
`omp simd` 指令支持所需的初始更改已完成。 r202360。
`-Wabsolute-value` 警告已完成,它将在绝对值函数的几种误用情况下发出警告。它将在使用 int 绝对值函数对 float 操作时发出警告,或者在对错误大小的类型操作时发出警告(例如,在 long long 上使用 abs 而不是 llabs),或者在对无符号值求绝对值时发出警告。 r202211。
一个 API 已添加到 libclang,用于创建一个包含 JSON 虚拟文件覆盖描述的缓冲区。 r202105。
驱动程序选项 `-ivfsoverlay` 已添加,它从文件中读取虚拟文件系统的描述,并将该描述覆盖到真实的文件系统上。 r202176。
CFG 边缘已重新设计以对可能无法访问的边缘进行编码。这涉及添加 AdjacentBlock 类,该类对块是否可访问进行编码。 r202325。
`remark` 诊断类型已添加。它为用户提供了其他信息(例如,来自向量化器有关已向量化的循环的信息)。 r202475。