LLVM 项目博客

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

LLVM 每周 - 第 110 期,2016 年 2 月 8 日

欢迎来到 LLVM 每周的第 110 期,这是一个每周发布一次的新闻简报(每周一发布),涵盖 LLVM、Clang 和相关项目的最新进展。LLVM 每周由 Alex Bradbury 为您带来。订阅未来的问题,请访问 http://llvmweekly.org,并将其转发给您认为可能感兴趣的任何人。请将任何提示或反馈发送至 [email protected],或在 Twitter 上关注 @llvmweekly@asbradbury

本期问题的规范主页 可以在 llvmweekly.org 找到

来自网络的新闻和文章

上周末 FOSDEM 的 LLVM 开发室的幻灯片 现在可以在线获取。不幸的是,演讲的录制出现了一些问题,因此视频将不可用。

JavaScriptCore 的 FTL JIT 正在从使用 LLVM 作为其后端转变为使用 B3(基本骨骼后端)。这包括它自己的 SSA IR、优化和指令选择后端。

LLVM 和 Clang 3.8-RC2 的源代码压缩包和二进制文件 现在已提供

苏黎世 LLVM 聚会 将于本周四,即 2 月 11 日下午 7 点举行。

Jeremy Bennett 撰写了一篇关于 Clang 和 GCC 命令行标志的比较。简而言之,397 个标志在 GCC 和 LLVM 中都适用,433 个是 LLVM 独有的,598 个是 GCC 独有的。

vim-llvmcov 已发布。这是一个 vim 插件,用于使用 llvm-cov 工具显示代码覆盖率。

在邮件列表中

  • Mehdi Amini 发布了一篇关于 LLVM 中浮点环境和舍入模式处理的 RFC。这项工作最早可以追溯到 2014 年,并且有一系列补丁正在审核中。Chandler Carruth 对此做出了回复,详细描述了他对当前设计的担忧,他提出的替代方案似乎得到了很多正面反馈。

  • Morten Brodersen 最近将一些应用程序从旧的 JIT 升级到了 LLVM 3.7.1 中的新 MCJIT,但他 发现了明显的性能下降。其他一些回复者也遇到了类似的问题,无论是编译时间还是生成的代码质量下降。一些帖子参与者将提供具体的例子,以便进行调查。问题可能是某个默认设置不同。Benoit Belley 指出 他们发现其前端在 3.7 中使用 allocas 会导致性能下降

  • Lang Hames 启动了关于 LLVM 库中的错误处理 的长时间讨论。Lang 已经实现了一个新方案,并正在寻求对此方案的反馈。讨论很多,不幸的是我没有时间进行适当的总结。如果您对错误处理设计感兴趣,请参与进来。

  • Adrian McCarthy 详细介绍了 最近将 minidump 支持添加到 LLDB。Minidump 是 Windows 中的核心文件的等效文件。

  • Juan Wajnerman 正在研究为 Crystal 语言添加对多线程的支持,并提出了一个关于 线程局部变量 的问题。LLVM 不会重新加载线程局部地址,这会导致在同一个线程中运行的协程中读取线程局部变量时出现问题,然后该协程被挂起并在不同的线程中继续执行。这显然是一个已知问题,由 PR19177 涵盖。

  • Steven Wu 发布了一篇关于 在目标文件中嵌入位码的 RFC。目标是将 Apple 分支中已有的支持上游。可以理解的是,一些回复者询问这与 Thin-LTO 工作正在引入的 .llvmbc 部分有什么关系。Steven 指出它几乎相同,但适用于 Mach-O 而不是 ELF,并且他希望在合并上游时将它们统一起来。

LLVM 提交

  • LLVM 现在具有内存 SSA 表达式。这还没有被树中的任何东西使用,但应该为各种分析和转换奠定一个非常有用的基础。这个补丁已经酝酿了很长时间,最初是在去年 4 月提交的,用于寻求初始反馈。 r259595

  • 引入了新的循环版本化循环不变代码移动 (LICM) 传递。通过创建由运行时检查保护的循环的新版本来测试无法在编译时确定不存在的潜在别名,这使得 LICM 有更多机会进行优化。 r259986

  • LazyValueInfo 在格值上获得了交叉操作,可用于同时利用多个事实来源。目的是对其进行更多利用,但它已经能够在执行跳转线程时移除一半的范围检查。 r259461

  • SmallSet 和 SmallPtrSet 模板现在将在使用大于 32 的大小创建时出错。 r259419

  • 为不支持的功能从后端发出错误的能力已经过重构,因此 BPF、WebAssembly 和 AMDGPU 后端都可以共享同一个实现。 r259498

  • 添加了一个使用 LoopVersioning 的简单传递,主要是用于测试。新的传递将完全消除所有可能别名的内存访问,无论需要多少运行时检查。 r259610

  • 现在已经记录了使用位集来编码类型信息的方式。 r259619

  • 现在可以使用标志 -DLLVM_ENABLE_LTO 与 CMake 一起构建 LLVM,以进行链接时优化。 r259766

  • TableGen 的 AsmOperandClass 获得了 IsOptional 字段。将其设置为 1 表示该操作数是可选的,如果操作数不存在,AsmParser 不会发出错误。 r259913

  • 现在有一个针对 Exynos-M1 的调度模型。 r259958

Clang 提交

  • Clang 现在具有针对 bitreverse 内在函数的内置函数。 r259671

  • 使用 cc1 驱动程序进行 profile-guided 优化时的选项名称已更改。 r259811

其他项目提交

  • AddressSanitizer 现在支持 iOS。 r259451

  • 现在已经记录了将新的 ELF LLD 作为库使用的当前策略。 r259606

  • Polly 的新 Sphinx 文档获得了关于如何将 Polly 与 Clang 一起使用的指南。 r259767