LLVM 每周 - 第 98 期,2015 年 11 月 16 日
欢迎来到 LLVM 每周的第 98 期,这是一份每周发布(每周一发布)的时事通讯,涵盖 LLVM、Clang 和相关项目的最新发展。LLVM 每周由 Alex Bradbury 编写。订阅未来的期刊请访问 http://llvmweekly.org,并将其转发给您认为可能感兴趣的任何人。请将任何提示或反馈发送至 [email protected],或在 Twitter 上联系 @llvmweekly 或 @asbradbury。
本期时事通讯来自维也纳,我正要从短暂的休息中回家(所以如果它比平时晚一点,可能细节少一点,请见谅)。我承认,没有人真的写信请求 LLVM 每周分享旅行小贴士,但我要说维也纳是一个美丽的城市,在过去的几天里为我提供了很多活动。如果你要来这里,我强烈推荐 Salm Bräu,那里有美味的啤酒和食物。
本期的规范主页 可以在 llvmweekly.org 上找到。
来自网络的新闻和文章
所有 LLVM 开发者会议视频 现在都已发布,并将一直保留。这包括 Chris Lattner 和 Joseph Groff 关于 Swift IR 的演讲。您还可以在 这里 找到大多数幻灯片。Quarkslab 的团队也 发布了一份旅行报告。
本周的大新闻是,来自 NVIDIA 的 PGI Fortran 编译器的代码 将开源,并产生一个面向 LLVM 的生产级 Fortran 前端。这个项目是美国国家核安全局 (NNSA)、NVIDIA 和劳伦斯利弗莫尔、桑迪亚和洛斯阿拉莫斯国家实验室之间的合作。Hal Finkel 在 LLVM 邮件列表中分享了一些更多信息。由于源代码发布要等到大约一年后,那么现有的 Flang 工作会怎样呢?希望是 Flang 的部分内容将与 PGI 版本合并。PGI 团队的 Douglas Miles 也 分享了一个小型 FAQ。Fortran 公告
Bjarne Stroustrup 分享了关于最近一次 C++ 标准会议的 详细旅行报告。
Include Security 博客的这篇文章 深入探讨了 LLVM 中对 SafeStack 缓冲区溢出保护的支持的详细信息。
在官方的 LLVM 博客上,一篇新的帖子提供了一个非常有用的指南,介绍如何 使用 bugpoint 和自定义脚本缩减测试用例。正如帖子中所述,bugpoint 是一款非常强大的工具,但可能难以使用。
邮件列表上的内容
您是否维护了一个树外目标?您的树外目标是否具有大量子寄存器,并且依赖于不精确的通道掩码可用?如果是这样,Matthias Braun 希望收到您的来信。如果拟议的更改可能影响您,请立即说出来。
Geoff Berry 提议对去虚拟化进行更多工作。特别是,他希望将
llvm.assume
传播到函数调用中。他还询问了默认情况下启用 Clang 的-fstrict-vtable-pointers
还需要什么,Piotr Padlewski 和 Richard Smith 对此做出了详细的回答。Cong Hou 发布了关于 在 LLVM IR 中添加向量归约加法指令 的 RFC。还没有太多反馈,但 David Li 质疑是否可以使用更简单的指令/内联函数来模拟效果。
Ben Langmuir 发布了一个关于 模块映射文件中的模块是否应覆盖隐式发现的模块 的 RFC。
LLVM 提交
LLVM 的基于 autoconf 的构建系统现在正式被弃用,CMake 构建系统更受青睐。 r252520。
您想使用 Clang 和 LLVM 编译 CUDA 代码吗?现在有一些 方便的文档描述了如何做到这一点。另请参见 Jingyue 在最近的 LLVM 开发者会议上的演讲。 r252660。
已添加了用于 PowerPC 的简单机器指令 SSA 传递。实现简短且直接,因此如果您想对目标进行一些 MI 级别的窥孔优化,值得阅读。 r252651。
已添加了对 AArch64 的地址标记的基本支持。在 AArch64 中,地址的最高 8 位可以用来存储额外的元数据,这些位在经过地址转换之前会被屏蔽。 r252573。
Hexagon 后端现在支持程序集解析。 r252443。
CMake 构建系统获得了一个新的 LLVMExternalProjectUtils 模块。例如,它与 LLVM 测试套件一起使用,该套件可以设置为在树内的 clang 或 lld 更改时重新构建。它也可以与 compiler-rt 或 libcxx 一起使用。 r252747。
现在定义了“空标记”(写为
token empty
),用于在 LLVM IR 中使用标记时。 r252811。LibFuzzer 获得了一种新的实验性搜索启发式方法,drill。正如 FuzzerLoop.cpp 中的注释所解释的那样,这将 1) 读取+洗牌+执行+最小化语料库,2) 选择一个随机单元,3) 重置覆盖率,4) 开始模糊化,就好像所选单元是语料库的唯一元素一样,5) 完成后再次重置覆盖率,6) 将新创建的语料库合并到原始语料库中。 r252838。
已引入了一个 BITREVERSE SelectionDAG 节点和一组
llvm.bitreverse.*
内联函数。目的是后端不再需要重新实现类似的代码来将指令模式与他们自己的 ISA 的位反转指令匹配。另请参见对 ARM 后端的补丁,该补丁用 ISD::BITREVERSE 替换了 ARMISD::RBIT。 r252878, r253047。
Clang 提交
添加了对
__attribute__(internal_linkage)
的支持。这很像 C 的 static 关键字,但适用于 C++ 类方法。 r252648。Clang 现在支持 GCC 的
__auto_type
扩展,并进行了一些小的改进。 r252690。
其他项目提交
libcxx 获得了对使用 mustl libc 进行构建的初始支持。这主要是一个新的 CMake 选项,这是必需的,因为 Musl 没有提供一个宏来指示它的存在。 r252457)。