CompilerDev 板


LINE

LLVM大概是现在最受产业界以及学术界欢迎的编译器框架之一了 很可惜的由於贡献与参与的人数以接近指数倍的速度增长 专案本身结构的复杂度 也逐年增高,这边就来提供一个简单的专案结构导览。 你主要可以学到两个重点: - 常见的元件(e.g.优化演算法、register allocator)可以在哪边找到? - LLVM命名以及安排资料夹的习惯是什麽 (这边只涵盖LLVM,其他子专案例如Clang,碍於篇幅以及笔者也不怎麽熟悉,就留到 未来再说吧) Top Level Strucutre (llvm-project/llvm) 有几个资料夹是一定要知道的 /lib: LLVM 最大的优点之一就是模组化:所有的功能与演算法都被包成个别 的函式库,使用者只需挑选他们需要的函式库就可以了。而这个资料夹底下放的就是所有 LLVM的演算法。从非常专门的编译器演算法(e.g. instruction selection),到非常通用 、可以给其他子专案用的的功能(e.g. FileSystem API)。等一下会就个别的子资料夹 进行介绍 /include: 所有的标头档都放在这儿。这底下还有两个资料夹、llvm和llvm-c ,分别是 C++ 和 C API。LLVM 的API介面稳定性以及相容性(compability)一直都是个 有点大的问题,主要是因为核心成员希望整个计画在开发上能够越灵活越好、必然的结果 就是API interface会变化的非常快,导致其他使用者(downstream user)苦不堪言。目前 一个暂时的解决办法就是不保证 C++ API 的稳定性、只维护 C API 的相容性,所以才会 有两套 API 系统。(其实LLVM不只API,ABI介面的稳定性也是个长年困扰大家的问题 ,但那又是另外一个故事了) /test 与 /unittests: 前者是 regression test,後者是 unit tests 的资 料夹。Regression test 又昵称 IR test,因为里面大部分的测试输入档都是 textual IR。仍会叫 regression test 是因为那些 test case 大多源自於 bug。 Regression test是用一套叫做 llvm-lit 的 test runner 来跑的(以及一些附注工具 像是 FileCheck)。llvm-lit 还有 FileCheck 个人认为神好用,而且非常容易用在一般 的专案里面,有机会可以写一篇专门的文章。笔者认为这两个资料夹很重要的原因在於 很多时候如果不知道某个元件的行为或用法(e.g. 不知道对应Pass的CLI option 怎麽下) 可以直接去查阅这些 test,还蛮实用的。 /tools: 只要是使用 LLVM libraries 的 command line tools 基本上都放 这边。例如大家所熟知的 opt 和 llc,虽然这些 tools 原始码量都不多、毕竟主要功能 都放在 library 里面,但有些时候特定的功能,例如某个 CLI option,其实是放在这里 。Clang 以前也是放在 tools 资料夹底下,但现在已经移到llvm-project最上层了 LLVM Libraries (llvm-project/llvm/lib) 这边也是挑几个重要的资料夹来讲。大部分元件的标头档都会放在 include/llvm 里 对应的资料夹、因此除非有特例要不然就不多赘述: /IR: 顾名思义这个资料夹放的就是所有的 IR 实作。但其实还不止那些, 其他重要的元件包括新的 PassManager(如大家所知,LLVM 目前已经快要完成迁移 到新的 PassManager,因此旧的 PassManager 现在已经改名为 IR/LegacyPassManager.cpp,而且将在不久之後完全移除),还有一些 "builder",例如 比较多人所熟知的 IRBuilder 以及 debug info builder (DIBuilder) /Passes: 承接上方关於新的PassManager的话题,这个资料夹放的是其他 有关(新版)Pass的元件,例如 PassBuilder 以及 PassRegistry.def。前者很重要是因为 很多时候你会想知道、例如 -O3 到底跑了哪些 Pass,这里就可以给你一些指引。後者 则是新 PassManager 特有的东西,基本上就是新版的Pass注册表。 /Transforms: 所有IR层级(也就是 target-independent)的优化演算法。 底下的资料夹简介如下: - /InstCombine: 就是LLVM的 peephole optimization。老实讲我还真的 不知到为啥最初不要命名成 peephole。 - /Vectorize: 顾名思义就是放所有关於 vectorize 的演算法。小弟在这 方面没有研究得很透彻,但基本上目前 LLVM 使用两大 vectorize 演算法:SLP 和 VPlan。SLP算是蛮经典的,没记错的话GCC也有,VPlan 则是比较新。 - /IPO: 所有的 inter-procedure 优化演算法。 - /Scalar: 基本上所有非前述类别的演算法都丢在这边XDD (包括loop相关) 所以要找某个演算法就先从这个资料夹开始找吧。 其他蛮重要的还有 /Utils,放了很多超级实用的小功能、像是切割 basic block、还有 把特定一群的 basic block 抓出来变成独立的函式。 ============= 本篇就先到这边吧,下一篇会涵盖剩下的 /lib 重要子资料夹(e.g. CodeGen, Analysis) 。还有其他实用的 utilities (e.g. include/llvm/ADT) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 169.234.228.195 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/CompilerDev/M.1593371133.A.EA4.html
1F:推 sonicyang: 好文推 06/29 18:36
2F:推 frank030310: 感谢分享 让我更了解llvm的架构 06/30 19:55
3F:推 jerry0715no1: 感谢大神分享好文 07/01 12:51
4F:推 Dracarys: 感谢分享 07/01 21:14
5F:推 kishow01: 推推分享 07/02 04:40
6F:推 SMMIT: 推分享 07/03 21:49
7F:推 poolongkong: 感谢分享 顺便勘误一下,InstCombine的不知"到" 07/09 21:31
8F:推 JameC: 推,受益良多 07/10 20:51
9F:推 unimaybe: 用心,推推!! 06/26 03:56
10F:推 eopXD: 推好文~~ 07/11 19:39







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP