LLVM 项目博客

LLVM 项目新闻和来自前线的细节

LLVM 每周 - #2, 2014 年 1 月 13 日

欢迎来到 LLVM 每周的第二期(也是第一期出现在 LLVM 博客上的)。LLVM 每周是一个新闻通讯(每周一发布),涵盖 LLVM、Clang 和相关项目的最新进展。感谢所有提供积极反馈或建议的人,我计划在未来的版本中整合一些有关 git 活动和贡献的统计信息,以及 Bugzilla 的活动情况。LLVM 每周由 Alex Bradbury 提供。订阅未来的问题,请访问 http://llvmweekly.org,并将其转发给您认为可能感兴趣的任何人。请将任何提示或反馈发送至 [email protected],或 @llvmweekly@asbradbury (推特)。

本期文章的规范位置 可以在 llvmweekly.org 上找到

来自网络的新闻和文章

Stephen Diehl 发布了 Haskell 版本的“Kaleidoscope”教程,介绍如何使用 LLVM 实现一个 JIT 编译的语言。该教程获得了非常积极的评价,并引发了 HN 上的讨论

EuroLLVM 的注册已 开放。您还有时间提交您的演讲、海报或研讨会提案。

Rust 0.9 已发布。Rust 是一种面向 LLVM 的系统编程语言,特别强调类型安全、内存安全和并发性。Mozilla 的核心 Rust 开发人员之一 Niko Matsakis 还做了 在 linux.conf.au 上介绍 Rust 的演讲

Coverity 7 现在包含 Clang 编译器支持

在邮件列表中

  • Apple 正在 招聘实习生,他们的 LLVM 编译器前端和运行时团队将在今年夏天招募实习生。请注意,实习仅限于学生。

  • Amara Emerson 分享了 关于处理 AArch64 中 -mfpu 选项删除的建议。此提案旨在与 gcc 匹配,在 gcc 中,使用 -march 上的功能修饰符来指定 FPU/NEON,而不是使用 -mfpu。有人指出 GCC 还有 -mcpu 来使事情变得复杂。希望与 GCC 开发人员的合作能够导致一个简化,两者都可以使用。

  • Tobias Grosser 已 设置了一些新机器来跟踪 -O3 性能,使用 LNT,这是一个用于跟踪 LLVM 性能随时间变化的框架。Tobias 正在寻找人来接手并改进 LNT 基础设施,以利用这些新数据。LNT 是用 Python 编写的,使用 Flask 和 SQLAlchemy,因此对于有兴趣为 LLVM 做贡献但可能不符合 LLVM 贡献者典型特征的人来说,这是一个理想的项目。

  • Timothy Baldridge 询问 LLVM 是否可以在 JIT 的方法中内联外部库函数。回复指出,对于给出的具体示例(memcpy),LLVM 已经能够内联。Kevin Modzelewski 描述了他使用的一种技术

  • Rafael Espíndola 宣布了一个新的里程碑,所有树内后端现在 使用 MCInst 打印汇编。树外目标将需要将 MachineInstr 降低到 MCInst 以使用新的打印机,并且最近 将 Sparc 后端转换 来做到这一点可能是一个很好的指南。

  • 作为在 LLVM 代码库中使用 C++11 的工作的一部分,Chandler Carruth 已要求任何运行构建机器的人 升级到新的基线编译器版本。这些版本是 MSVC 2012、GCC 4.7 或 Clang 3.1。

  • Jasper Neumann 一直 使用哈希进行开关降低,作为使用跳转表的一种替代方法。他后来 进一步阐述了这种技术,并指出了一篇看起来很有意思的论文,Roger Anthony Sayle 编写的“多路分支代码生成”

  • Kevin Modzelewski 遇到了 令人失望的位码解析性能,特别是在存在调试信息时。问题还没有确定或解决,我希望能够在下一期的文章中指出问题的解释!

  • Chandler Carruth 建议将 过程间分析传递合并到分析库中。现在,各种过程间分析位于 lib/Analysis/IPA 中,并作为 LLVMipa 库构建。Chris Lattner 同意,因此我们可以预期合并将在不久的将来发生。

  • Chandler Carruth 已 建议 更新 LLVM 编码标准,以便命名空间永远不会缩进,而不是当前令人困惑的混合状态。尽管争论空格是大多数程序员最喜欢的消遣方式,但到目前为止,这条线程一直没有争议。

  • Milian Wolff 询问 使用 clang C API 解析默认值

  • Renato Golin 正在努力 将各种 pragma 添加到 Clang,并正在征求有关如何实施它的反馈。邮件列表中的一些人建议尝试使用 C++11 通用属性 来实现这些功能,并可能在 C99 中启用对语法的支持。

  • __has_attribute 特性宏通常用于检测编译器对特定属性的支持。Aaron Ballman 建议将其扩展,以便您可以测试所需属性语法的精确形式。

LLVM 提交

  • Sparc ASM 解析器已经进行了进一步的开发,学习了如何解析分支指令、条件移动、浮点指令等等。它还获得了最初的反汇编器实现。 r198738r199033r198591

  • 在 SimplifyCFG 中,现在将理解,在为没有空洞的 switch 构建查找表时,不需要默认结果。根据提交消息,这在一个引导构建中将 clang 二进制文件减少了 164KB。 r199025

  • 新的传递管理器看到了进一步的发展。 r198998 和许多其他(在提交日志中以 [PM] 为前缀)

  • SampleProfile 传递看到了进一步的发展。配置文件样本通过 CFG 传播,通过启发式地将指令样本转换为分支权重。进行了一些工作来扩展和简化样本配置文件输入文件的格式。 r198972r198973

  • LoopVectorizer 可以对步长内存访问使用版本控制。 r198950

  • 在 DataLayout 中,现在使用 'w' 而不是 'c' 进行 win32 命名改编。 r198938

  • LLVM 开发人员政策已更新,更清楚地说明了如何向项目提交补丁。 r198901

  • WriteAsOperand 已被删除,取而代之的是 printAsOperand 方法。 r198836

  • x86 后端学习了一些 AVX-512 内在函数。 r198745

Clang 提交

  • 添加了对 enable_if 属性的支持。这可以放在函数声明上,以根据函数参数的值控制选择哪个重载。有关更多信息,请参见 commitdiff(特别是文档更改)。 r198996

  • 对 MS VC++ ABI 兼容性的更多工作已提交。 r198907r198975r198977r198900 等等。

  • __has_attribute 现在理解特定于目标的属性。 r198897

  • clang 插件基础设施现在至少被一些测试覆盖。 r198747

  • clang 内部机制的文档已更新,包含有关添加新属性的最新信息。 r198705

  • 一个基于仪器的配置文件引导优化初始实现已发布。 r198640