CompilerDev 板


LINE

第二篇我们延续重要 LLVM Libraries (e.g. llvm/lib/*) 元件介绍: /Analysis: 这个大概是LLVM数一数二重要的元件之一。就如大家所知道的 compiler optimizations 往往需要大量的资讯:从最简单的 dominator tree 到复杂的 alias analysis。全部都放在这个资料夹里面。LLVM 的 Analysis 几乎跟一般 Pass 无异,最大的差别莫过於不能修改输入的 IR unit,同时也有着颇为复杂的invalidation 机制 (当某个 IR unit 被更动後,那些 analysis 不受影响,哪些又要重新计算) /Support 与 llvm/include/llvm/ADT: 两者为一堆极为实用的 utilities 集合。ADT 就如他们名字(Abstract Data Structure)所示,放的大多是资料结构, 尤其是针对少量资料优化的资料结构,例如大家最耳熟能详的 SmallVector,或是一些 非常针对 compiler 所设计的资料结构,例如 IntervalMap (用在 register allocation 上)。Support 就比较通用一点,包含像是跨平台的 thread 函式库、跨平台的 FileSystem,或是Graphviz DOT的小工具。个人强料推荐以下两种情况之前,先看看看 这两个地方有没有你想要用的东西: 1. 想使用 standard library 的资料结构之前 2. 想写自己的 helper library,甚至用外部的 utility library(像是 Boost)之前 关於第一点,并不是说 standard library 不好,而是就如前面所解释的,ADT有很多 针对特殊情况优化的资料结构。至於什麽时候该用 standard library 什麽时候要用 ADT ,官方网站的 Programmer Manual (http://llvm.org/docs/ProgrammersManual.html) 有非常详尽的解说与指引,我个人工作的时候基本上都把那个页面开在旁边。 /CodeGen: 这边放的就是所有真正 "backend" 做 code generation 的元件。 LLVM 将所有硬体特定实作全丢到 /Target,所以这边放的其实是 target-independent 、使用 /Target 传来的资讯来做 code generation。这边列出重要的子元件分别放在 哪儿: 1. Register Allocation: RegAlloc*.cpp 2. Instruction Scheduling: ScheduleDAG*.cpp, MachineScheduler.cpp 3. Instruction Selection 的故事就长了,因为这个部分也有新旧版本:旧的是基於 SelectionDAG 的实作(/SelectionDAG 资料夹),新的则是叫做 GlobalISel (/GlobalISel 资料夹)。新的 GlobalISel 目标是更快的速度以及提供更好的测试 环境 (SelectionDAG 在测试的时候只能整个当黑箱一起测,GlobalISel 可以切成 好几个部分分别测试) /Target: 每个硬体架构在这边都有专门的一个资料夹,描述的就是硬体专有的讯息。 除了大家大概都知道的指令集格式外,其实还有很多重要的讯息, 例如 Calling Convention, Stack Frame 长什麽样子, 或是 scheduling 的限制。 /MC: CodeGen 最後会生出目标架构的 assembly code。在古早以前,LLVM 接下来会呼叫外部的 assembler,例如 NASM 或者 GNU AS,将这些 assembly 组译成 object code,然後再呼叫外部的 linker,例如最经典的 BFD linker,把这些 object files 组合成最终想要的档案 (i.e. executable or libraries)。LLVM 现在都有自己的 assembler 和 linker 了,其中 assembler 部分就是这个 MC layer (linker 就是 LLD) 。笔者对 MC layer 没有很透彻的研究,但基本上他有很多资讯也是来自於各别硬体 於 /Target 底下的实作。 /ExecutionEngine: 这个资料夹放的包括最为人所知的 JIT Engine。目前 LLVM 已经从旧的 MCJIT (/MCJIT) 转换成新版的 OrcJIT (/Orc)。OrcJIT 有非常多的优点, 包括更小的编译单位以及更为模组化的设计,让客制化 JIT Engine 变得更简单也 更有弹性。 ==== 以上就是所有我个人认为重要的 LLVM 元件的简介 当然也欢迎大家补充!:) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 169.234.228.195 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/CompilerDev/M.1593929787.A.C95.html
1F:→ Lipraxde: 之前用 OrcJIT 的时候发现 SectionMemoryManager 在处 07/05 14:54
2F:→ Lipraxde: 理一堆小 Module 的时候会用蛮浪费的方式配置 Memory, 07/05 14:54
3F:→ Lipraxde: 一直不太知道为什麽QQ 07/05 14:54
4F:推 JameC: 推推,受益无穷 07/10 20:56
5F:推 jerry0715no1: 推 感谢说明 07/11 06:46
6F:推 ChampYen: 推! 07/12 20:22
7F:推 NCTUcs: 推 07/13 13:13
8F:推 Dracarys: 推 07/21 17:49
9F:推 unimaybe: 推推,感谢分享!!((是说中间的"强料建议"打错了XD 06/26 04:00







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灯, 水草

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

TOP