LLVM 周报 - 第 14 期,2014 年 4 月 7 日
欢迎阅读 LLVM 周报的第十四期,这是一份每周发布(每周一发布)的新闻通讯,涵盖 LLVM、Clang 和相关项目的最新进展。LLVM 周报由 Alex Bradbury 为您带来。订阅未来的问题,请访问 http://llvmweekly.org 并将其转发给您认为可能感兴趣的任何其他人。如有任何提示或反馈,请发送邮件至 [email protected],或在 Twitter 上联系 @llvmweekly 或 @asbradbury。
本周似乎有大量与 LLVM 相关的新闻出现,希望我已经成功地收集了所有信息。如果您下周在伦敦,您可能对参加 我周三的 LLVM 入门演讲 感兴趣。摘要 在此。
当然,EuroLLVM 将在本周的周一和周二举行。遗憾的是我不能参加。如果有人在博客上发布活动内容,请务必将链接发送给我。
本期文章的正式地址 可在 llvmweekly.org 上找到。
来自网络的新闻和文章
本周最引人注目的 LLVM 相关新闻无疑是 Pyston 的宣布,这是一个针对 LLVM 的 Python JIT。更多技术细节 可在 Github 仓库上找到。对许多人来说,这立刻让人想起由 Google 工程师启动的 Unladen Swallow 项目,该项目旨在用 LLVM 对 Python 进行 JIT 编译。该项目最终失败了,但对 Pyston 的作者来说,假设它会遭遇相同的命运是不公平的。目前尚不清楚 Dropbox 在 Pyston 上投入了多少开发时间。他们显然还有很多工作要做,尽管 苹果公司也正在努力从 JavaScript 针对 LLVM,这意味着他们并非唯一在这个领域工作的开发者。Kevin Modzelewski 在 LLVM 邮件列表上 分享了一些更多信息,详细介绍了他们到目前为止实施的一些 LLVM 工作(包括一些针对 GCed 内存的初始逃逸分析)。
一个独立的非营利性 LLVM 基金会 即将成立。作为一家供应商中立的组织,它将代表社区利益,并计划在今年年底前成立。首任董事会成员将是 Vikram Adve、Chandler Carruth、Doug Gregor、David Kipping、Anton Korobeynikov、Chris Lattner、Tanya Lattner 和 Alex Rosenberg。
Rust 0.10 已发布。另请参阅关于 Hacker News 和 Reddit 的讨论。Rust 是一种来自 Mozilla 的系统编程语言,它使用 LLVM 作为其代码生成后端。
基于 LLVM 的反编译框架 Dagger 已 发布了其源代码,并发表了五篇文章,介绍其实现方法并记录了后续步骤或“TODO”。
一个 针对 Accelerate 数组语言的 LLVM 后端 已发布。它将 Accelerate 代码编译成 LLVM IR,并且可以针对多核 CPU 和 NVIDIA GPU。
最近关于基于 LLVM 的 MalDiv 多样化编译器的演讲 PDF 幻灯片 已发布。此类工具可以有效地消除基于签名的恶意软件匹配。
在邮件列表中
来自 ARM 的 James Molloy 一直在研究最近由苹果公司开源的 ARM64 后端,并得出结论 以 ARM64 为基础,从 AArch64 合并会更容易。关键的理由是 ARM64 后端性能更高,但存在一些正确性问题,移植性能修复比正确性修复更困难。后续回复似乎都表示同意。Bradley Smith 报告称 在修复观察到的正确性问题方面取得了良好的进展,并取得了一些有趣的性能结果。对于本周参加 EuroLLVM 的人士,周一和周三的主要会议结束后将进行讨论(详情 在此)。
开始有人要求将补丁包含到 LLVM/Clang 3.4.1 中。其中包括 大量 AArch64 补丁(另外还有 一个),以及一些 各种错误修复。
Reid Kleckner 提出了一种新的尾调用标记,“musttail”,它保证尾调用优化将执行。
Shankar Easwaran 开始讨论 为 lld 添加对反解符号的支持。
Jeroen Dobbelaere 在 针对的架构方面遇到了一个有趣的问题。该架构具有 64 位寄存器,但指针大小始终为 32 位。JF Bastien 建议 这类似于 PNaCl 和 x32 ABI。
Peter Collingbourne 建议对具有确定性陷阱/展开行为的加载/存储进行 IR 扩展。目的是为可能发生陷阱的操作提供零成本异常处理。该提案附带了初始补丁,尽管 Andrew Trick 质疑添加新的 IR 指令是否合适。
LLVM 项目的 Phabricator 实例已 迁移至 reviews.llvm.org。目前指向旧实例的链接已失效,但希望很快会设置重定向。当你阅读本文时,我应该已经更新了 llvmweekly.org 上的所有失效链接。
LLVM 提交
MipsAsmParser 和 MipsOperand 进行了重写。改进内容在提交信息中有所记录。 r205292。
ARM 后端获得了对分段堆栈的支持。 r205430。
现在可以使用 MachineCode 层在 ARM 上运行 Windows。 r205459。
TargetLowering 获得了一个钩子,用于控制何时可能使用 shuffle 扩展
BUILD_VECTOR
。 r205230。目标可以选择使用 ExpandBVWithShuffles,该功能在之后的提交中添加。 r205243。X86TargetTransformInfo 获得了 getUnrollingPreferences,它由通用循环展开器使用。这有助于优化在 X86 上使用微操作缓存。这在 TSVC 基准测试套件中产生了 7.5%-15% 的加速。 r205348。
ARM 获得了一个很好的小型优化传递,它可以删除重复的 DMB 指令。 r205409。
原子 ldrex/strex 循环现在在 IR 中展开,而不是在 MachineInstr 发射时展开。这将清理代码,但也有助于简化未来的优化。 r205525。
Clang 提交
clang 静态分析器在 PthreadLockChecker 中获得了双重解锁检测,以及在销毁锁后使用锁的检查。 r205274、 r205275。
OpenMP 的“copyin”子句已实现。 r205164。
添加了“optnone”属性,该属性会抑制函数上的大多数优化。 r205255。
选择方法作为建议校正的启发式方法得到改进,以忽略显然无法正常工作的那些方法。 r205653。
将“BitwiseConstraintManager”理念添加到开放项目页面。 r205666。