编译
文章平均质量分 85
电影旅行敲代码
垃圾文章制造者
展开
-
论文阅读:ThinLTO: Scalable and Incremental LTO
ThinLTO: Scalable and Incremental LTO 论文阅读笔记A little bit of history.SYZYGY – A Framework for Scalable Cross-Module IPOielf,persistent intermediate representation (IR),基于 ELF 格式,存储自定义格式的 IR(以及 summary)。论文中表示 ielf 文件大小平均是原始 elf 文件的五倍,极端情况下有700倍。在 SYZY.原创 2022-03-14 10:22:30 · 1009 阅读 · 0 评论 -
[Computer Architecture读书笔记] H.2 Detecting and Enhancing Loop-Level Parallelism
H.1 Introduction: Exploiting Instruction-Level Parallelism Statically附录H对C3.2进行了更详细的介绍,首先提出了四个技术要点finding parallelismreducing controlreducing data dependencesusing speculation相比于runtime,cpu为了提升ILP所做的工作,they can take into account a wider range of th原创 2021-11-28 20:48:32 · 927 阅读 · 0 评论 -
[Computer Architecture读书笔记] 3.2 Basic Compiler Techniques for Exposing ILP
垃圾内容,读书笔记,勿看本书重在Computer Architecture,所以对compiler optimization没有做重点介绍,本章节算是对一些compiler optimization进行了科普。理解本章节,可以按照“计算机体系结构就是trade-off”这个主旨进行。囿于现实因素,存在很多限制,而编译优化就是在夹缝中就生存,在诸多条条框框中求得一个近优解。3.2 Basic Compiler Techniques for Exposing ILP类似于图灵机,由于现实的束缚,不可能存在原创 2021-11-28 13:42:56 · 355 阅读 · 0 评论 -
[loop optimization] loop versioning
无耻抄袭,业务民科,笔记勿看In code optimization, multi-versioning is a well-known approach to generate code that may adapt to a changing execution context: several versions of an original code snippet are generated at compile-time, each one being the result of some d原创 2021-11-27 15:10:34 · 597 阅读 · 0 评论 -
编译工具链相关招聘帖
字节跳动系统部-基础库与编译工具链研发实习生 (此贴长久有效)职责描述C/C++编译工具链维护,包括gcc/llvm,debugger,linker以及其它binutils工具参与公司软硬件协同优化方案的创新与落地公司内部基础库研发维护,包括glibc/libstdc++/libstdc++以及第三方基础库工作要求了解编译器原理,对工具链有一定的技术热情具备编译优化能力有性能优化经验者优先,例如Perf/Vtune/EMON等性能优化工具对计算体系结构与Linux内核有一定了解参与原创 2021-01-12 12:03:07 · 803 阅读 · 0 评论 -
GNU Toolchain源码阅读缩写速查
缩写缩写说明AVAIL_OUTThe AVAIL_OUT set, which represents which values are available in a given basic block.ANTIC_INThe ANTIC_IN set, which represents which values are anticipatable in a given basic block.GCSEGlobal common subexpression elimin原创 2020-08-03 13:53:16 · 383 阅读 · 0 评论 -
记一次gcc -O2大幅度增加binary size的问题
为什么-O2选项会增加binary的大小,是不是开启的inline flags引起,什么是function-level linking原创 2020-05-24 16:36:50 · 2210 阅读 · 2 评论 -
浅谈 language server & LSIF & SARIF & Babelfish & Semantic & Tree-sitter & Kythe & Glean等
注:本人做过静态代码分析,也算是做过code intelligence,两者互有交叉,所以这里将涉及到的有意思的东西记录下来,未来有精力再依次对这些项目进行介绍文章目录什么是language server protocolJSONRPCLSIF(Language Server Index Format)SARIF(Static Analysis Results Interchange Forma...原创 2019-12-30 14:14:37 · 3983 阅读 · 2 评论 -
如何给llvm添加一个pass
在PLCT之前必须完成原创 2019-12-27 19:44:17 · 1666 阅读 · 0 评论 -
#64 Abstract Interpretation: Introduction & #66 Galois Connections - 课程笔记
业余民科,阅读笔记,拾人牙慧前置知识Operational semanticsTAPLOpertional semantics specifies the behavior of a programming language by defining a simple abstract machine for it. This machine is “abstract” in the se...原创 2019-12-22 19:50:38 · 868 阅读 · 0 评论 -
再谈Dominator Tree的计算
文章目录Vertex-removal AlgorithmThe Iterative Algorithm RevisitDistributive Data-Flow FrameworkLengauer-Tarjan Algorithm Revisit具体实现DFS计算semidominatorseval & link计算idomidomidomThe SEMI-NCA Algorithm论文...原创 2019-12-10 19:58:15 · 3962 阅读 · 7 评论 -
构造SSA
业余民科,拾人牙慧,垃圾内容勿看在文章《SSA的优势》以接近于无的实操经验总结了SSA的优势。在文章《构造Dominator Tree以及Dominator Frontier》介绍了如何构造Dominator Tree和Dominator Frontier,为放置ϕ\phiϕ指令做准备。这篇文章介绍如何构造SSA的形式。构造DomTree这里我们就使用《Engineering a Com...原创 2019-12-01 14:03:22 · 2866 阅读 · 1 评论 -
PLP: 4.2/4.3 Attribute Gramma阅读笔记3
构造AST在compiler中是否是一个必不可少的步骤? 由于attribute grammar和one-pass compiler或者说语法制导翻译(syntax-directed translation,SDT)联系很紧密,所以attribute grammar和这个问题有存在间接的的关系。答案是否,构造AST并不是一个必要的步骤(可以思考构造AST的目的是什么),甚至在计算机资源极其有限的...原创 2019-11-15 17:20:28 · 678 阅读 · 0 评论 -
数据流分析(一)
引子编译器后端会对前端生成的中间代码做很多优化,也就是在保证程序语义不变的前提下,提高程序执行的效率或减少代码size等优化目标。优化需要依靠代码分析给出的“指导信息”来相应地改进代码,而代码分析中最重要的就是数据流分析。另外数据流分析是程序静态分析的基础。所以掌握数据流分析对编译后端极为重要。何为数据流分析数据流抽象数据流分析模式基本块上的数据流模式何为数据流分析 数据流分析指的是一原创 2016-02-21 17:25:12 · 20488 阅读 · 6 评论 -
GC(Garbage Collection)对应用性能的影响
正如我们所了解的,垃圾回收的性能并不是由垃圾对象的数量决定的,而是由可达对象的数量所决定。越多的对象变为垃圾,垃圾回收的速度越快。如果在堆上的对象都是待回收的垃圾对象,垃圾回收周期几乎可以说是瞬时完成的。另外垃圾回收器必须暂停应用程序的执行,以保证对象树的完整性。发现的可达对象数量越多,暂停的时间越长,这对响应时间和吞吐量会有直接影响。译者注:现在垃圾回收思想都是通过根集来推导可达对象,并将可达对象原创 2015-12-01 18:28:04 · 4530 阅读 · 0 评论 -
数据流分析(二)
引子我们在数据流分析(一)中简要介绍了数据流分析的基本概念,下面我们集中分析一些数据流分析的实例来阐述数据流分析的核心思想。到达定值活变量可用表达式到达定值什么是到达定值“到达定值”是最常见的和有用的数据流模式之一。编译器能够根据到达定值信息知道 x 在点 p 上的值是否为常量,而如果 x 在点 p 上被使用,则调试器可以指出x是否未经定值就被使用。 如果存在一条从紧随在定值 d 后面的原创 2016-02-23 16:07:01 · 10545 阅读 · 3 评论 -
LLVM全时优化
引子由于实验室项目原因,从本科开始接触Clang和LLVM开始到现在已经有2年时间了,期间都是针对Clang做一些边边角角的工作,没有潜下心来好好研读一下LLVM的paper。最近闲下来读了Chris Lattner那篇引用率高达2227的论文《LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation》,原创 2015-12-23 11:14:00 · 8898 阅读 · 7 评论 -
编译器或者链接器会优化掉虚表吗
引子前一段时间和实验室的同学讨论虚表和RTTI相关的问题,由于我是编译器论调的拥泵,所以我信誓旦旦的说如果编译器发现虚表或者虚函数无用的话,会自动优化掉这些虚表信息。但是查过资料才发现,其实编译器并不会这么做!ODR原则在C++中有一个很重要的概念就是ODR原则,总的来说,ODR分为3个方面:一个模板,类型,函数或者”对象”可以在多个编译单元中各存在一份拷贝。其中的一些可以有任意数量的声明。一个定原创 2015-12-13 15:41:55 · 1857 阅读 · 0 评论 -
数据流分析的局限性
引子前面我们介绍了很多关于数据流分析的知识,虽然说数据流分析是整个代码分析基础中的基础,但是数据流分析还是存在很大的局限性,一部分局限性来自于数据流分析所做的假设(例如假设所有路径可达),一部分局限性来自于分析语言的性质(例如C++语言中的异常处理或多态)。为了作出可靠的决定,所以编译器设计者必须了解数据流分析能做什么以及它不能做什么。 Nodes are required to hold in原创 2016-02-29 22:06:31 · 2464 阅读 · 0 评论 -
SSA的优势
由来前一段时间阿里云OS 编译器岗位内推面试,面试官问了SSA的优势,我答的很简洁,面试官后来对我说没有答好。所以索性就做一次知识的搬运工,收集一些资料。传统数据流分析(Data-flow analysis)劣势前面的提到过传统的数据流分析是 Dense 的分析,就是在分析过程中,要携带当前所有的分析信息经过每一个程序点,即使很多信息与当前程序点没有任何关系。(1)R大的解释 正是因为SSA形式原创 2016-08-12 14:03:29 · 5496 阅读 · 1 评论 -
基于栈的虚拟机 VS 基于寄存器的虚拟机
引子一直对虚拟机这个黑盒非常感兴趣,由于从前都是直接学习x86或者ARM这些实际的体系结构,什么寄存器、ALU、CPU、总线、乱序执行和Cache等相关的观念都已经烂熟于心。另外在学习C++或者C语言时,对函数调用栈帧非常熟悉,什么函数调用前压参、保存寄存器值、EBP、ESP或者函数返回值如何传递,更深层次的如对象的this指针如何传递,或者C++的RTTI以及C++内部的实现机制。但是对java里原创 2015-12-17 21:49:52 · 14317 阅读 · 13 评论 -
迭代数据流分析中的逆后序(Reverse Postorder)
—————————————-更新———————————-Eli Bendersky大神的博客有关于数据流分析各种ordering的分析,大神的 分析深入浅出,大家请移步Eli Bendersky’s website。当然也可以继续看下面的文章—————————————-更新———————————-迭代数据流分析中的三个要素点在使用迭代算法进行数据流分析的时候,需要考虑三个方面的问题。Termina原创 2016-08-09 16:54:32 · 6243 阅读 · 1 评论 -
gdb调试Clang2.6 (clang-cc)
文章介绍了如何通过源码编译Clang2.6并如何进行调试原创 2016-07-02 12:58:00 · 4676 阅读 · 4 评论 -
数据流分析(三)
引子在数据流分析(一)和数据流分析(二)中我们介绍了数据流分析的基本模式以及到达定值和活变量的分析。在这篇文章中我们简要介绍一下可用表达式和数据流分析中的格。可用表达式数据流分析中的格可用表达式 如果从流图入口结点到达程序点 p 的每条路径都对表达式 x + y 求值,且从最后一个这样的求值之后到p点的路径上没有再次对x或y赋值,那么 x + y 在 p 点上可用(available)。原创 2016-02-29 21:47:05 · 6481 阅读 · 2 评论 -
数据流分析中的Distributive Dataflow Problems
Distributive Data flow Problems一个数据流问题包括如下几部分:CFG数据流值的值域初始的数据流值交汇运算(用于将前驱或者后继节点的值进行“交汇”)传输函数 而Distributive Data flow(可分配数据流问题)问题就是关于交汇运算和传输函数的问题,可分配数据流问题有如下等式:也就是传输函数trans在交汇运算U上是可分配的。判断数据流问题是否可原创 2017-11-08 21:23:28 · 1103 阅读 · 3 评论 -
Anderson‘s pointer analysis
指针分析 指针分析是一类特殊的数据流问题,它是其它静态程序分析的基础,但指针使用的灵活性导致了指针分析的复杂性,实际上指针分析是一个不可判定问题,所以实际的指针分析算法都是近似且保守的,须在效率和精度之间进行折衷。 指针分析研究的内容主要集中在分析精度和时空开销之间的取舍,精度方面,主要指流敏感性(flow-sensitivity)和上下文敏感性(context-sensitivity...原创 2017-12-04 00:15:39 · 5644 阅读 · 2 评论 -
AOT JIT and Interpretation
在接触虚拟机的时候,首先遇到的三个概念就是AOT、JIT 和 Interpretation,那么这三个概念有什么区别呢?AOTAhead-of-time(AOT) 是一种编译方式,现在常见的高级语言都会采用这种方式,例如C/C++代码以及Java中间代码,它们都可以在程序执行前编译成可执行完文件。这里的 time 就是 runtime,例如编译C/C++代码到ELF或者PE格式的可执行文件然后运行。原创 2016-04-05 20:54:22 · 1207 阅读 · 0 评论 -
构造Dominator Tree以及Dominator Frontier
支配树(Dominator Tree)在生成SSA的时候,需要计算在何处插入正确的 Φ (phi-function) ,一种方法是在所有有多个前驱的Basic Block的开头插入 Φ-node,但是这种方法会插入很多的无用的 Φ-node ,有很多 Φ-node 的参数都是相同的一个定义。 The Φ-function is the most important SSA concept to...原创 2016-08-17 13:56:14 · 13866 阅读 · 6 评论 -
RTTI机制详解
引子以前我们探讨过,RTTI的访问和虚表相关,并且RTTI基本上是为了dynamic_cast<>和typeid以及异常而实现的。今天我们详细探讨下异常的实现机制。RTTI、虚表以及类的内存布局遵循的通常是Itanium C++ ABI,我不知道这个名字为什么会演化成现在这个样子,但是这个ABI标准是现今最流行的一个C++ABI标准。下面我们会精简地从中摘取出关于RTTI的相关内容。C++ABI中的原创 2015-12-14 19:10:08 · 2190 阅读 · 2 评论