LLVM 项目博客

LLVM 项目新闻和来自战壕的细节

LLVM 每周 - 第 10 期,2014 年 3 月 10 日

欢迎来到 LLVM 每周的第 10 期,这是一份每周发布的新闻稿(每周一发布),涵盖 LLVM、Clang 和相关项目的最新进展。LLVM 每周由 Alex Bradbury 带来。在 http://llvmweekly.org 订阅未来版本,并将其传递给任何你认为可能感兴趣的人。请将任何建议或反馈发送至 [email protected],或在 Twitter 上联系 @llvmweekly@asbradbury

本周,我与 Ben Everard 合作编写的书籍 学习 Python 与树莓派 (美国亚马逊) 正式发布。

本期的规范地址 可以在 llvmweekly.org 上找到

来自网络的新闻和文章

John Regehr 撰写了一篇博客文章,详细介绍了 为 LLVM 实现超优化器的一些想法。评论中也有一些不错的观点。

Capstone 反汇编框架的 2.1 版本 已经发布。库大小减少了约 40%,内存使用量减少了 40%,并且还有一些性能改进。

Facebook 发布了 Chisel,这是一组 LLDB 命令,用于帮助调试 iOS 应用程序。

vim-lldb 的一个分支,lldb 仓库中包含的用于 Vim 的 LLDB 插件已经出现。到目前为止,更改都比较小。

在邮件列表中

  • 本周邮件列表中最有趣的讨论之一可能是来自 Mark Seaborn 的 关于将 PNaCl 的 IR 简化传递上游的问题。PNaCl 和新的 Emscripten fastcomp 后端都使用了一系列树外 IR 到 IR 传递,这些传递通过将复杂特征降低到更简单的特征来简化 IR。建议将它们上游,以便每个人都能从中受益。Chandler Carruth 表达了担忧,这些传递在没有树内用户的情况下可能会腐烂,建议 PNaCl 和 Emscripten 社区可以更多地为上游 LLVM 做出贡献,这样的记录将有助于缓解这种担忧。有许多人表示他们会发现这些功能很有用。

  • Diego Novillo 询问 人们是否对优化报告工具感兴趣。这将提供有关各种优化器做出的决定的有用信息,这在调查代码为何无法按预期执行以及寻找遗漏的优化方面可能很有用。不出所料,每个人都认为这将是一个很好的功能。Diego 承诺在未来几天内撰写一些更详细、更具体的提议,现在已经清楚人们喜欢这个总体想法。

  • Kev Kitchens 询问有关交叉编译 compiler-rt 的问题。Vadim Chugunov 有用地指出了 他在 Rust 的 compiler-rt 分支上进行的工作,以支持这一点。在讨论中还指出,对展开的支持实际上位于 libc++abi 中,而不是在您可能期望找到它的独立 libunwind 中。

  • 有一个关于 反向迭代器和其它问题的命名方面的相当长的讨论,对于任何喜欢讨论细节的人来说,这应该是一段有趣的阅读(并不是说有什么问题,那里有一些关于 API 命名原则的良好讨论)。

  • Tim Northover 分享了一个关于 为 cmpxchg 添加第二个排序操作数 的 RFC(包含初始补丁),该操作数指示失败排序。

LLVM 提交

  • 基于 PBQP(分区布尔二次规划)的寄存器分配器的新实现已落地。 r202735。原始提交 (r202551) 消息详细说明了更改,包括大幅减少内存消耗。据称平均内存减少了 400 倍。标语是“PBQP:不再吞噬你内存中的每一个字节”。

  • AArch64 获得了 Cortex-A53 的机器描述,这涉及为所有非 NEON 指令提供调度注释。 r203125。已还原

  • SPARC 后端获得了对 VIS SIMD 指令集扩展的支持。 r202660

  • 一大堆类进行了移动,目的是让 LLVM 的支持库在使用 C++ 模块构建时能够正常工作。 r202814 以及其它很多。InstIterator、GetElementPtrTypeIterator、CallSite、PatternMatch、ValueHandle、ValueMap、CFG、ConstantFolder、NoFolder、PredIteratorCache、ConstantRange、PassNameParser 和 LeakDetector 从 Support 移动到了 IR。

  • PROLOG_LABEL TargetOpcode 被替换为 CFI_INSTRUCTION,旨在具有更简单的语义,并且使用起来不那么复杂。有关更多详细信息,请参阅提交消息。 r203204

  • OwningPtr<T> 的使用被替换为 std::unique_ptr<T>r203083

  • inalloca 语法已清理。 r203376

Clang 提交

  • PGO(配置文件引导优化)代码进行了一些小幅重构,为处理非 C/C++ 代码和对 Objective-C 块的初步支持做准备。 r203073r203157

  • 模块依赖关系现在包含在由 -MD/-MMD 等创建的依赖文件。 r203208

  • -Wunreachable-code 选项不再警告配置值保护的死代码。 r202912

  • MSVC 命名修饰方案不用于不可见的静态变量或类型。 r202951

其它项目提交

  • LLDB 现在支持使用 GDB JIT 接口在 Linux 上进行 JIT 调试。 r202956

  • Polly 开始为并行循环发出 llvm.loop 元数据。 r202854

  • 在 compiler-rt 中,提交了用于 ARM 的 __sync_fetch_and_* 的汇编程序实现。 r202812

  • LLD 中 Windows 支持的级别已记录在案。 r203017