LLVM 每周 - 第 7 期,2014 年 2 月 17 日
欢迎来到 LLVM 每周的第七期,这是一个每周一发布的周刊,涵盖 LLVM、Clang 和相关项目的进展。LLVM 每周由 Alex Bradbury 为您提供。订阅未来的期数,请访问 http://llvmweekly.org,并将其传递给您认为可能感兴趣的任何人。请将任何建议或反馈发送至 [email protected],或在 Twitter 上发送至 @llvmweekly 或 @asbradbury。
与往常一样,如果您最喜欢的邮件列表讨论或提交内容没有被我选入,我表示歉意。如果您认为我错过了什么有趣的东西,请告诉我。在过去的一周中,没有太多外部新闻报道或博客文章(我发现的),但在邮件列表中却非常繁忙,有很多有趣的讨论或 RFC。
本期的规范地址 可以在 llvmweekly.org 找到。
来自网络的新闻和文章
ELLCC 嵌入式编译器集合现在 提供预编译版本,适用于 ARM、i386、Mips、PowerPC 和 x86-64。方便的是,这些都是静态链接的。ELLCC 的目标是为嵌入式系统提供一个易于使用的多目标交叉编译环境,当然它基于 LLVM 和 clang。
下一届滑铁卢地区 LLVM 社交活动 已定于 2 月 20 日举行。
下一届巴黎 LLVM 社交活动 将于 2 月 24 日举行,由 Mozilla 主办。
邮件列表中的内容
Philip Reames 贡献了一个关于 在 CodeGenPrepare 之前使用 GetElementPtr 作为 LLVM IR 中指针寻址的规范形式 的 RFC。这个提议背后的动机对许多人来说会很有趣,特别是 Rust 社区以及其他希望以 LLVM 为目标的语言实现者。Philip 及其同事(我相信是在 Azul Systems)希望在 LLVM 中支持精确的垃圾收集,令人兴奋的是,一个完整的可上游实现将在“相对较短的时间内出现(即几个月,而不是几周,也不是几年)”。
作为对上周 GCC 邮件列表讨论的后续行动,Renato Golin 撰写了一篇关于 LLVM 和 GCC 开发人员如何合作的详细提案。他欢迎 在 Slashdot 上的回复。Chris Lattner 非常赞成这项努力,但指出已经有一些列表用于此目的(例如“Itanium ABI 列表”,我假设指的是 cxx-abi-dev),也许可以创建其他类似的供应商中立的邮件列表。
Tom Roeder 发布了一个关于 将控制流完整性技术集成到 LLVM 中的 RFC。控制流完整性 (CFI) 通过确保运行时的控制流与预先确定的路径匹配来帮助抵御各种攻击,并在 这篇 2005 年的论文 中进行了描述。Tom 已经实现了一个在 Chromium 上经过测试的实现,该实现对 dromaeo 基准测试产生了约 4% 的开销。JF Bastien 回复说,PNaCl 团队对此工作很感兴趣,而其他回复者则讨论了在 LLVM IR 中表示跳转表而不是内联汇编。
Jordan Rose 针对 clang 静态分析器的未来 发表了一篇讨论帖。他提出的一个问题是如何将问题标记为误报,希望以比禁用检查器更复杂的方式进行。他还提到了添加全程序分析模式的长期计划,该模式将在翻译单元之间工作。Ted Kremenek 跟进 了更多关于将报告的诊断视为“问题”的细节,这些问题可能被单独抑制。
来自英特尔的 Andrew Bokhanko 启动了一个关于 向 Clang 添加某种 SIMD 编译指示 的讨论。选项包括将 OpenMP 4 的
#pragma omp simd
实现从 clang-omp 上游。Mahdi Hamzeh 在邮件列表中发帖,询问 寄存器分配之前是否进行 if-转换。Andrew Trick 指出了 EarlyIfConverter,它可以在寄存器分配之前运行,但只会生成条件移动,而不是预测指令。他 建议了一种方法,将 if-转换实现为特定于目标的传递。
Vadim Chugunov 发起了一篇关于 compiler-rt 路线图的讨论。问题包括可能的重命名、是否应该删除 libunwind 以及确保它为 LLVM 可以定位的所有平台构建。
Matt Arsenault 正在 寻求解决循环归纳变量比实际需要更大的问题的想法。
Howard Hinnant 正在辞去 libc++ 的代码所有者职务,看起来 Marshall Clow 将接手。许多 LLVM 开发人员也顺便感谢 Howard 为 libc++ 付出的辛勤工作。
Ted Kremenek 对 ArrayBoundChecker 和 ArrayBoundCheckerV2 的状态进行了很好的总结。
LLVM 提交内容
AsmPrinter::EmitInlineAsm() 将不再对具有成熟 MC(机器代码)支持的目标使用 EmitRawText() 调用。添加了 MCASMInfo::UseIntegratedAS 字段。如果为真,则集成汇编器将解析内联汇编,即使在发出汇编输出时也是如此。 r201237。
RTDyld API 了解了如何预先计算模块中所有段所需内存量,并使用 reserveAllocationSpace 预留给定数量的空间。 r201259。
LTO API 获得了
lto_module_create_from_memory_with_path
,这主要用于从链接器发出警告消息。 r201114。ScalarEvolution 现在将分析循环的循环次数,其中有一个 switch 保护退出。 r201159。
Phabricator 上的注释现在包含一个建议,即为以这种方式审查过的提交提供指向 Differential 修订(代码审查)的链接。请这样做! r201160。
AArch64 后端现在识别 Cortex-A53 和 Cortex-A57。 r201305。
ARM 集成汇编器获得了对
.arch_extension
指令的部分支持。 r201471。
Clang 提交内容
Clang 对 Microsoft ABI 兼容性进行了更多更新。Clang 现在理解 Microsoft 的
pointers_to_members
编译指示。 r201105 以及vtordisp
编译指示 r201274。在其他 MS ABI 开发中,-vm{b,g,s,m,v}
现在也得到支持。 r201175。添加了命令行选项
-fstack-protector-strong
。 r201120。另请参见 r200601 以了解有关 sspstrong 函数属性的信息。提交了 OpenMP
if
子句的前端支持。 r201297。您可以使用
--rtlib=compiler-rt
标志尝试链接到 compiler-rt 而不是 libgcc。 r201307。添加了
-Wignored-pragmas
诊断,它将在编译指示产生副作用但被忽略的情况下发出警告。 r201102。生成每个诊断消息的检查器的名称现在可以通过
getCheckName()
获得。这可以用于启用/禁用特定检查器。 r201186。Clang 现在理解
-fbuild-session-timestamp=
和-fmodules-validate-once-per-build-session
标志,这些标志允许您在构建过程中仅验证模块的源文件一次。 r201224,r201225。