LLVM 每周 - #16, 2014 年 4 月 21 日
欢迎阅读 LLVM 每周的第 16 期,这是一份每周发布(每周一发布)的时事通讯,涵盖 LLVM、Clang 和相关项目的最新进展。LLVM 每周由 Alex Bradbury 为您带来。订阅未来期数,请访问 http://llvmweekly.org,并将其转发给您认为可能感兴趣的任何人。请将任何提示或反馈发送至 [email protected],或在 Twitter 上通过 @llvmweekly 或 @asbradbury 联系我们。
对于上周的 LLVM 每周通过电子邮件发送了两次,我们表示歉意。Mailgun 具有将电子邮件安排在未来的有用功能,但在操作不正确时,无法通过 API 取消它。可能他们也无法取消它,我无从得知,因为我关于此问题的支持票从未得到答复。
既然是复活节,有人知道为什么 GCC 的 标志是 GNU 从鸡蛋中破壳而出 吗?
本期内容的官方来源 可以在 llvmweekly.org 上找到。
来自网络的新闻和文章
作为 LLVM 后端实现的 Emscripten 的新后端已 合并到 Emscripten 的主分支。这应该会显着提高编译时间。
Phoronix 发布了一组 比较 GCC 4.9RC1 和 Clang 3.5 HEAD 的小型基准测试。
Diego Novillo 已 宣布 AutoFDO,这是一种工具,可将使用 Linux Perf 生成的配置文件数据转换为与 LLVM 的基于样本的分析器兼容的格式。
Polly 项目已 发布了另一个电话会议的会议记录,这次重点关注去线性化。
在邮件列表中
Jingyue Wu 分享了针对 getelementptr 的通用子表达式消除 (CSE) 的初始补丁。他和他的同事发现,使用 NVPTX 后端时,循环展开通常会导致 getelementptr 指令组,这些指令会增加寄存器压力,但这些指令通常可以通过一些简单的 CSE 进行优化。到目前为止,关于将类似功能包含在目标无关的流程中的反馈是积极的,尽管人们很想知道它是否在任何其他使用开源基准测试的后端上有所帮助。
Austin Seipp 已 重新讨论了命名寄存器变量的问题。他补充了关于此功能对格拉斯哥哈斯克尔编译器 (GHC) 的实用性的观点。由于无法为线程本地存储分配专用寄存器,他们目前在 OS X 上使用 clang 遇到了严重的性能下降。Renato Golin 随后跟进 了他认为解决此问题最好的方法,而 Mark Seaborn 分享了 NaCl 团队使用的巧妙技巧,他们会在验证它包含他们预期的代码后内联
pthread_getspecific
。Kostya Serebryany 分享了他对线程在访问配置文件计数器时发生争用的担忧。对于多线程 VP9 编码器,他发现使用
-fprofile-instr-generate
运行时,与单线程运行相比,其开销增加了 7 倍,而单线程运行时其开销增加了 15%。内容过多,无法概括,但对于感兴趣的读者来说,关于潜在解决方案有很多讨论,他们应该看看。Dan Gohman 回答了一个关于 LLVM IR 访问结构体字段的问题,他 简洁地总结了 LLVM 目前如何使用别名分析信息。
Richard Carback 正在 征求对他 TableGen DAGISel 文档的反馈。他的 笔记 看起来是一个很好的起点,记录了迄今为止 LLVM 中最神秘的部分之一。特别是那些有此代码经验的人被鼓励检查文档以确保准确性。
LLVM 提交
LLVM 的内部 BumpPtrAllocator 已切换为使用指向板片的指针向量,而不是单个链接列表,并且底层分配器现在是模板参数。 r206147,r206149。分配器现在也可以将大小传递给释放函数,这提高了一些库(例如 tcmalloc)的性能。 r206265。
LazyCallGraph 已添加对构建持久强连接组件的支持。提交消息中包含关于此方法推理的详细注释以及一些关于实现的详细信息。 r206581。
常量提升已在 PowerPC 上启用。 r206141。
PseudoSourceValue 不再是 Value 的子类。 r206255。
已实现 DebugInfoVerifier。 r206300。
MIPS 获得了对 IEEE 754-2008 NaN 编码的初步支持。 r206396。
OnDiskHashTable 已从 Clang 移动到 LLVM。 r206438。
ARM 的基于 IR 的原子操作流程已从 Target 移动到 CodeGen,这使得 ARM64 可以使用它。 r206485,r206490。
模块验证在 JIT 的发布版本中默认情况下已关闭,但可以覆盖此设置。 r206561。
Cortex-A53 计算机模型描述已从 AArch64 移植到 ARM64。 r206652。
Clang 提交
现在有一个用于计算指令分析的函数散列的新散列算法,该算法已重写以帮助确保在控制流发生变化时散列也会发生变化。 r206397。
线程安全分析 SSA 流程已重写。 r206338。
对大端 ARM64 的支持已添加到 Targets.cpp 中。 r206390。现在还可以为 ARM64 禁用 NEON 和加密支持。 r206394。
其他项目提交
- LLD 现在支持
--defsym=<symbol>=<symbol>
,就像 GNU LD 所支持的那样。 r206417。