LLVM 每周 - 第 23 期,2014 年 6 月 9 日
欢迎来到 LLVM 每周的第 23 期,这是一份每周发布一次的新闻通讯(每周一发布),涵盖 LLVM、Clang 和相关项目的进展。LLVM 每周由 Alex Bradbury 为您带来。订阅未来版本请访问 http://llvmweekly.org,并将其转发给您认为可能感兴趣的任何人。请将任何提示或反馈发送至 [email protected],或在 Twitter 上关注 @llvmweekly 或 @asbradbury。
来自网络的新闻和文章
Philip Reames 已经 宣布晚期安全点放置的代码现已可用。
这是一组来自 Azul Systems 的 LLVM 补丁,旨在支持 LLVM 中的精确重新定位垃圾收集。Phlip 列出了一系列问题,他希望社区能够就如何推进这些补丁提供反馈。目前还没有太多回应,希望很快就会有,因为我知道许多社区都非常希望看到 LLVM 中更好的 GC 支持(例如 Rust、Ocaml)。
本周最大的 LLVM 新闻当然就是 Apple 宣布 Swift 编程语言。它的开发由 LLVM 的原始作者 Chris Lattner 带领。他有一些关于 Swift 的更多信息 在他的网站上。目前还没有源代码发布,并且 Apple 还没有表示它是否会保持专有。无论哪种方式,这都是一项有趣的开发。Chris Lattner 现在在 Twitter 上,并且一直在 发布关于 Swift 实现的片段信息。
LunarG 已经 宣布了 Glassy Mesa 项目。该项目由 Valve 资助,将探索通过改进着色器编译器来提高 Mesa 中的游戏性能。当前的解析器和优化层被 glslang 和基于 LLVM 的 LunarGlass 取代。更多技术细节 可以在幻灯片中找到。
Sébastien Métrot 发布了 xspray,一个 OS X 上 lldb 的前端。它的一项有趣功能是内置的绘图数据支持。
随着最近所有关于 LLVM 的新闻,似乎 'llvm' 的搜索流量激增。
在邮件列表上
Zachary Tuner 已经开始了一个关于 LLVM 中的多线程和互斥锁 的讨论,这是在他(目前正在审查)的补丁之后进行的,这些补丁试图用
std::mutex
和std::recursive_mutex
替换 LLVM 自身的互斥锁实现。关键问题是多线程应该是编译时参数还是调整时参数,如果尝试在禁用线程的应用程序中获取互斥锁,会发生什么,以及是否应该包含用于查找死锁的调试代码。Sean Silva 询问 考虑到该功能现在有许多用户(包括 WebKit),堆栈映射是否应该在 LLVM 3.5 中标记为稳定。Andrew Trick 建议在这样做之前进行另一轮 RFC,并打算在下周提交另一个提案。
Gerolf Hoflehner 正在 征求他对提出的指令组合器传递的反馈意见。这将在机器 IR 级别运行,旨在克服在 ISEL 级别组合指令时观察到的一些缺陷。
关于 LLVM 3.3/3.4 IR 是否向后兼容 3.2 的问题出现了。LLVM 不提供这种形式的兼容性,尽管 Stephen Hines 指出 Android 维护着 LLVM 3.2 的位码编写器。
相当一段时间前,Dennis Luehring 关注 GCC 优化器似乎比 Clang 表现更好的情况。Benjamin Kramer 和 Richard Smith 都提交了补丁,现在 Clang 在这个测试用例中表现出色。
LLVM 提交
已引入 jumptable 属性。如果使用此属性标记函数,则可以将对它的引用重写为对相应的跳转指令表函数指针的引用。 r210280。
GlobalAlias 现在可以指向任意 ConstantExpression。有关此操作的后果,请参见提交消息。 r210062。
子字级并行 (SLP) 向量化器已扩展以支持对 getelementptr 表达式的向量化。 r210342。
LLVM 程序员手册已通过使用 IRBuilder 的示例进行改进。 r210354。
Clang 提交
已提交语义分析以确保循环处于 OpenMP 规范形式。 r210095。
已添加
__builtin_operator_new
和__builtin_operator_delete
。允许对这些进行一些优化,这些优化在::operator new
上是不允许的,它们旨在用于实现像 std::allocator 这样的东西。 r210137。已引入新的编译指示以提供向量化和交错的优化提示。现在您可以使用
#pragma clang loop vectorize(enable)
以及vectorize(disable)
、vectorize_width(n)
、interleave(enable/disable)
和interleave_count(n)
。 r210330。对 MSVC++ ABI 的支持继续,为 MS 添加了
dynamic_cast
。 r210377。对全局命名寄存器的支持略有扩展,允许在这些变量中保存指针类型。 r210274。
现在支持 GCC 的
-Wframe-larger-than=bytes
诊断。 r210293。