LLVM 每周 - 第 112 期,2016 年 2 月 22 日
欢迎阅读 LLVM 每周的第 112 期,这是一份每周发布(每周一发布)的时事通讯,涵盖 LLVM、Clang 和相关项目的进展。LLVM 每周由 Alex Bradbury 为您带来。订阅未来的期数请访问 http://llvmweekly.org,并将其转发给您认为可能感兴趣的任何人。请将任何提示或反馈发送至 [email protected],或在 Twitter 上联系 @llvmweekly 或 @asbradbury。
本期文章的规范网址为 http://llvmweekly.org。
来自网络的新闻和文章
Filip Pizlo 撰写了一篇 精彩的文章,介绍了 WebKit 的 JavaScriptCore 的新 B3 JIT 编译器。它旨在取代 LLVM 作为其第四层 JIT 的优化后端。这篇文章详细描述了他们放弃 LLVM 的原因(主要是编译时间)以及所做的设计权衡,例如减少内存分配和最大限度地减少 IR 中的指针跟踪。这让我想起了 Mike Pall 在 LuaJIT 2.0 IR 中做出的权衡。Philip Reames 也分享了 关于 B3 的一些初步想法。我知道有些人对 WebKit 放弃 LLVM 感到失望,但如果您允许我添加一点社论,我认为 B3 对于 LLVM 和更广泛的编译器社区来说是一个非常积极的发展。B3 探索了与 LLVM 选择的设计权衡不同的一组设计权衡,而这类变化在全新的代码库中探索起来可能更容易。感谢这篇文章(以及希望未来的 B3/AIR 文档),我们可以从 B3 开发人员的经验中学习,并考虑他们的一些选择是否适合 LLVM。还需要记住,LLVM 不是代码生成和优化的唯一可行途径,我们不应该将 LLVM 的设计选择视为唯一正确的方式。令人印象深刻的是,B3 在仅 6 个月的开发时间内就发展到现在的状态。
LDC 的 0.17.0 版本,用于 D 编程语言的基于 LLVM 的编译器,已 发布。您可以查看 此处的详细变更日志。
GCC6 将包含大量新的警告,并且 这篇博客文章详细介绍了其中许多警告。
EuroLLVM 2016 的日程表现已公布。它将于 3 月 17 日至 18 日在巴塞罗那举行。
邮件列表
Bob Wilson 建议 Clang 中的格式安全警告 默认设置为错误。Nico Weber 发布了关于该主题的简明 总结。
Sanjoy Das 发布了一份关于 在 LLVM 中添加保护内联函数的 RFC。这些内联函数的使用方式与 WebKit 的新 B3 编译器中的 Check 操作码类似。
Alina Sbirlea 建议 在 LLVM 测试套件中添加 bitcode 测试。Hal Finkel 建议更进一步,只需 将 Halide 作为前端示例拉入 LLVM 测试套件,这将提供更广泛的测试覆盖范围。
Andrew Trick 分享了一些 关于 WebKit B3 公告后对 LLVM 的想法。“即使 LLVM 的编译时间问题在很大程度上得到解决,我相信它们可以解决,但由于实现通用性、灵活性和分层的架构决策,始终会存在系统性的编译时间和内存开销。这些都是软件工程中的权衡。”
LLVM 提交
PPCLoopDataPrefetch 传递已移至 Transforms/Scalar/LoopDataPrefetch,为其成为目标无关传递做准备。 r261265。
cmpxchg LLVM 指令现在允许指针类型操作数。 r261281。
X86 后端获得了对新的堆栈符号排序优化支持。这主要用于减少代码大小,并且在某些 SPEC CPU 2000 基准测试中产生了很小但可衡量的改进。 r260917。
LLVM C API 已扩展,使其能够用于操纵 datalayout。 r260936。
LazyCallGraph 上的一些主要工作已签入。 r261040。
AMDGPU 后端获得了基本反汇编程序。 r261185。
PostOrderFuctionAttrs 传递已移植到新的传递管理器。如提交消息中所述,这实际上代表了一个重要的里程碑。 r261203。
Hexagon 后端获得了对线程局部存储的支持。 r261218。