EuroLLVM 2024技术报告
EuroLLVM是以LLVM基金会旗下项目为核心的开发者会议,重点关注LLVM GitHub单仓库中的项目,如Clang以及近期因机器学习研究兴起的MLIR框架。Trail of Bits在编译器工程和LLVM领域拥有丰富经验,派遣多位编译器专家参会并展示两个重点项目:基于MLIR的C/C++编译器VAST,以及面向MLIR的新型指针分析方法PoTATo。本报告将分享为期两天(含会前研讨会)的技术洞察与实践经验。
安全意识觉醒
与往年相比,最显著的变化是安全议题的凸显。LLVM社区日益关注提升整个软件生态的安全性,这标志着编译器领域的新发展方向——LLVM领导层正积极寻求该领域的专业见解。
开幕主题演讲确立了安全作为编译器第三大支柱的地位(与优化和翻译并列)。ARM的Kristof Beyls通过回顾编译器关注点的演进史,强调安全性已成为与正确性、性能同等重要的核心关切。
技术环节提出了关键问题:如何验证安全缓解措施是否正确实施?为解答此问题,Kristof使用BOLT开发了静态二进制分析工具,重点验证-fstack-clash-protection
和-mbranch-protection=standard
(特别是pac-ret机制)。在Fedora 39 AArch64-linux发行版的3000个软件包测试中,pac-ret分析发现250万条返回指令中有4.6万条缺乏保护;对1920个使用栈冲突保护的库扫描识别出39个潜在漏洞(可能存在误报)。
关于选择BOLT而非IDA/Ghidra/Angr等逆向工程工具的原因,关键在于BOLT适用于批量二进制处理,且作为编译流水线组成部分能及时支持最新架构特性,而逆向工具往往存在滞后性。
MLIR超越机器学习
虽然MLIR因机器学习热潮而兴起,但其"ML"实指"多层级"(Multi-Level)。该项目远超张量处理范畴:SiFive将其应用于RISC-V电路设计;基于MLIR的通用语言编译器不断涌现,如JSIR(JavaScript)、Mojo(Python超集)、ClangIR以及我们的VAST(C/C++)。
本次会议的核心议题可总结为"如何最大化LLVM与MLIR在共享流水线中的价值"。多场报告指出:得益于更优的抽象能力,多数性能优化更适合在MLIR层完成,而LLVM主要负责目标机器代码生成。
Modular的Jeff Niu指出,尽管MLIR相较LLVM存在速度劣势,但Mojo编译器大部分运行时仍消耗在LLVM层——因为代码编译至LLVM时需要处理更多输入。慕尼黑工业大学团队甚至尝试完全跳过LLVM IR直接生成机器IR(MIR),在JIT编译场景实现约20%性能提升。
推荐关注第二场主题演讲《MLIR高效编程范式》,深入比较不同MLIR原语与模式的性能差异,帮助开发者直观理解获取属性、迭代或变异IR等操作的成本。同期演讲《接口实现深度解析》揭示了MLIR泛型基石的设计细节,阐释了方言表达副作用、符号和控制流交互等通用概念的实现机制与泛化开销。
基于区域的分析新趋势
多个独立团队发现:传统基于基本块的控制流图分析若改用区域化控制流表示,可显著提升运行时性能。主要原因在于无需重建循环信息,且整体表示更紧凑。典型案例如Mojo编译器内部的数据流分析。
C/C++后继语言演进
会议压轴议题聚焦C/C++后继语言。Carbon设有专题讨论,问题涵盖技术支持(如重构工具)到项目管理(如避免过度受谷歌影响)。其他语言如Rust/Swift也探讨了与C++的互操作方案:Carbon小组提及谷歌的Crubit(Rust),Apple的Egor Zhdan则专门介绍Swift互操作技术。
我们的技术贡献
Henrich Lauko展示了VAST的新特性"IR塔"——基于MLIR的多层抽象编译器IR项目,允许用户为不同分析/转换场景选择合适的抽象层。为解决高层MLIR表示与LLVM工具的兼容问题,“IR塔"支持在转换间拍摄IR快照并建立溯源链,实现从LLVM层依赖分析结果通过溯源链接反向映射至C源代码。
Robert Konicar展示了PoTATo项目:通过定制MLIR方言实现指针分析,将内存操作转换为PoTATo方言后执行优化与指针分析,最终生成别名集。结合VAST的IR塔可将结果反馈至原始代码。实验表明:指针分析前应用复制传播能显著缩减问题规模。
AI技术走廊讨论
除正式议程外,与会者广泛探讨AI/机器学习与编译技术的融合:硬件专家关注专用加速器代码生成,编译器团队优化线性代数计算,语言设计者努力适配数据科学需求。相反方向的研究(如何用机器学习辅助LLVM社区)相对稀缺——多集中于对LLVM领域数据运用机器学习方法进行分析。值得注意的是,LLM和GAN等热门技术未被深入讨论,这或许是创新突破的方向。
欢迎通过Twitter、LinkedIn、GitHub、Mastodon或Hacker News分享本文内容