
编译技术及LLVM
文章平均质量分 60
snsn1984
专注技术,专注管理。
展开
-
方舟编译器学习笔记67 clang-tidy的检查规则解析
前段时间,我为方舟编译器提交了一些clang-tidy的检查规则,这些规则位于项目目录之下的.clang-tidy文件之中。本文将逐条解读一下这些规则。1、readability-identifier-naming (规则2.1.1)这条规则是用来检查名命名规则的。在这条总的规则之下,还有关于具体要检查项的key和value。比如: - key: reada...原创 2020-03-14 11:29:53 · 5048 阅读 · 0 评论 -
关于编译器和静态分析的一些课程
陆陆续续收集了一些课程,主要是编译器和静态分析方面的,在这里分享给大家,也给自己做个资料存档。国外的一些课程:1、Stanford编译器课程系列CS143:CS143: CompilersCS243:CS243 - Advanced CompilersCS343:CS 343这个系列课程,共有三门课。其中,CS143讲的是编译器的基础知识;CS142讲的是程序分析和优化技术...原创 2020-03-08 20:29:59 · 3387 阅读 · 3 评论 -
深入研究Clang(十四) clang-tidy的使用
前文对clang-tidy进行了简单的介绍,本文对clang-tidy使用中的一些点进行一下总结。1、clang-tidy及其批量运行脚本run-clang-tidy.py在Clang/LLVM的预编译发布包中都有,但是位于不同的目录。其中,clang-tidy位于:发布包主目录/bin目录之下;run-clang-tidy.py位于:发布包主目录/shared/clang/目录之下。例如...原创 2020-02-08 11:49:15 · 8083 阅读 · 1 评论 -
深入研究Clang(十三) clang-tidy简介
最近几天在关注clang-tidy,有一些体会,简单做一些笔记。分享给感兴趣的朋友们,也是给将来的自己看。1、clang-tidy是基于AST的静态检查工具。因为它基于AST,所以要比基于正则表达式的静态检查工具更为精准,但是带来的缺点就是要比基于正则表达式的静态检查工具慢一点。也是因为它基于AST,所以clang-tidy运行的时候需要知道编译命令。2、clang-tidy不仅仅可以做静...原创 2020-01-11 12:03:21 · 4942 阅读 · 0 评论 -
方舟编译器学习笔记分类与导读
方舟学习笔记系列,从方舟开源到现在,已经写了50多篇,保证了每天一篇的更新频率。篇数增加之后,文章的分类以及文章之间的关系,逐渐变得复杂起来。本文将对已发表的学习笔记系列进行分类和导读,方便读者更好的理解。1、方舟动态本类中主要是关于方舟编译器动态的消息,包括不限于方舟的变动、线下活动见闻等,以与此相关的评论和思考内容。方舟编译器学习笔记5 方舟开始接受代码合并请求 [方舟动态]方舟...原创 2019-10-24 08:53:52 · 2489 阅读 · 2 评论 -
LLVM Language Reference Manual---阅读笔记
文档地址:http://llvm.org/docs/LangRef.htmlLLVM IR的标示符有两种基本类型,全局的和局部的。全局标示符以@开头,局部标示符以%开头。LLVM IR的标示符有三种形式:命名的,未命名的,常量。每一个Moudule都是由函数、全局变量和符号表组成的。全局变量表现为指向为一块内存的指针。全局变量和函数都会有一个linkage type, 就像:p原创 2012-10-15 21:09:28 · 4142 阅读 · 0 评论 -
LLVM Programmer's Mannual---阅读笔记
文档地址:http://llvm.org/docs/ProgrammersManual.html 该文档的主要目的:该文档主要介绍了LLVM源码的一些重要的类和接口,并不打算解释LLVM是什么,LLVM怎么工作,LLVM代码是什么样的。这个文档主要是面对那些已经了解了LLVM基础,并且对转化、分析和控制LLVM代码有兴趣的人。重要的和使用的APIThe is原创 2012-10-17 23:15:02 · 3996 阅读 · 0 评论 -
LLVM每日谈之十一 编译器相关学习资料推荐
作者:snsn1984近来碰到一些想学习LLVM但是已经把编译原理的知识还给老师的朋友,让帮忙推荐一些学习资料,我就把手头有的一些资料,大都是自己读过的一些资料整理一下,列出来,希望对大家有所帮助。1、《Compilers---Principles,Techniques, and Tools》没错,这就是传说中的龙书,虽然无数次被人推荐,也无数人说能不能换点别的推荐,但是它还是当之无愧原创 2013-03-08 14:53:27 · 6239 阅读 · 3 评论 -
LLVM每日谈之二 LLVM IR
作者:snsn1984在介绍LLVM IR之前,我们需要先了解下LLVM的结构。传统的静态编译器分为三个阶段:前端、优化和后端。LLVM的三阶段设计是这样的:这样做的优点是如果需要支持一种新的编程语言,那么我们只需要实现一种新的前端。如果我们需要支持一种新的硬件设备,那我们只需要实现一个新的后端。而优化阶段因为是针对了统一的LLVM IR,所以它是一个通用的阶段,不论是支持原创 2012-10-02 23:06:30 · 25924 阅读 · 5 评论 -
LLVM每日谈之八 PASS例子分析
作者:snsn1984之前已经 简单的介绍过怎么样去运行PASS(地址: http://blog.csdn.net/snsn1984/article/details/8160696),并且以hello PASS为例进行了运行,可以输出hello 和函数的名字。下面咱们继续进一步的分析一下这个PASS的具体内容:http://llvm.org/docs/doxygen/html/He原创 2013-02-04 14:48:37 · 7797 阅读 · 0 评论 -
七天LLVM零基础入门(Linux版本)------第三天
作者:snsn1984 第二天的任务中的LLVM IR的文档(http://llvm.org/docs/LangRef.html)对于初学者来说,看起来一定很费劲,内容繁杂,找不到头绪,看了后边的忘记了前面的,这些都是很正常的。但是,这里需要注意的是,不管多烦躁,一定要硬着头皮先把这个文档通读一遍,在读的同时,可以自己写一个小程序,根据前面学习的使用clang的命原创 2013-02-22 09:46:59 · 14589 阅读 · 0 评论 -
LLVM每日谈之五 LLVM文档介绍
作者:snsn1984LLVM的文档挺多,而且都是官方的文档,刚开始接触的时候很容易让人摸不着头脑,这里就简单的介绍下这些文档。希望能给学习LLVM的人提供一些帮助。当前版本和发布版本的文档:首先,因为LLVM分发布版本和当前版本,发布版本是正式的对外发布的版本,当前版本是不断更新的最新版本。目前最新的发布版本是3.1.而LLVM的文档也分发布版本和当前版本。每个发原创 2012-11-09 11:07:35 · 12559 阅读 · 0 评论 -
LLVM每日谈之四 Pass初探
作者:snsn1984LLVM 的Pass框架是LLVM系统的一个很重要的部分。每个Pass都是做优化或者转变的工作,LLVM的优化和转换工作就是由很多个Pass来一起完成的。所以按照我的理解,Pass就是LLVM系统转化和优化的工作的一个节点,每个节点做一些工作,这些工作加起来就构成了LLVM整个系统的优化和转化。Pass架构这么做的话,可重用性非常好,你可以选择已有的一些Pass,原创 2012-11-08 09:29:22 · 14497 阅读 · 9 评论 -
LLVM每日谈之三 如何创建一个LLVM工程
作者:snsn1984阅读了文档《Creating an LLVM Project》(地址:http://llvm.org/docs/Projects.html)之后,自己照着做了一遍,记录一下自己的过程。实际做的时候跟文档上还是有不同的。1.首先我系统上的llvm3.1是之前已经下好,并且make过的。我打开llvm-3.1/projects目录,看到下面有一个我之前放的comp原创 2012-10-22 15:53:03 · 8552 阅读 · 4 评论 -
七天LLVM零基础入门(Linux版本)------第六天
作者:snsn1984第一步:对优化代码的pass继续进行深入的分析首先检查一下第五天中的Pass练习,什么情况下可以进行优化,什么情况下不可以进行优化。可以参照系统自带的Pass: http://llvm.org/docs/doxygen/html/DCE_8cpp_source.html需要将判断是否需要优化的主要函数isInstructionTriviallyDe原创 2013-02-27 09:43:52 · 6617 阅读 · 3 评论 -
七天LLVM零基础入门(Linux版本)------第五天
作者:snsn1984第一步:复习文档 Write an LLVM passhttp://llvm.org/docs/WritingAnLLVMPass.html第二步:阅读LLVM编程规范http://llvm.org/docs/CodingStandards.html编程规范是编程中需要注意的基础点,代码风格符合不符合规范,将会直接影响整个代码的可读性和代码质量。所原创 2013-02-26 09:38:32 · 7061 阅读 · 3 评论 -
LLVM每日谈之六 LLVM的源码结构
作者:snsn1984这里简单介绍下LLVM的源码结构,让大家知道LLVM的每个文件夹都放的是什么内容。参考文档: http://llvm.org/docs/GettingStarted.html#getting-startedllvm/examples这个目录主要是一些简单例子,演示如何使用LLVM IR 和 JIT。还有建立一个简单的编译器的例子的代码。建立简单编译器的文档原创 2012-11-11 09:07:44 · 9739 阅读 · 0 评论 -
七天LLVM零基础入门(Linux版本)------第四天
作者:snsn1984第一步:复习第三天的时候,我们学习了LLVM的编程指引。在开始第四天的学习之前,需要复习之前学习过的两篇文档:LLVM IR的文档(http://llvm.org/docs/LangRef.html)编程指引文档 (http://llvm.org/docs/ProgrammersManual.html)这两篇文档是LLVM的重中之重,希望学习的原创 2013-02-25 09:31:35 · 9744 阅读 · 0 评论 -
七天LLVM零基础入门(Linux版本)------第二天
作者:snsn1984在第一天的时候,我们简单了解了llvm和clang。今天我们继续对LLVM进行学习。第一步:学会如何查找LLVM的文档LLVM的文档很多,也很全面,是开源软件中文档比较全面并且比较细致的,这是很难得的一个事情。所以只要和LLVM打交道,就一定要学会并且善于去使用这些LLVM的文档。因为LLVM文档比较多,初学者可能不太容易搞清楚,我之前写过一个关于LLVM原创 2013-02-21 09:15:49 · 18774 阅读 · 1 评论 -
LLVM每日谈之十 LLVM Test简介
作者:snsn1984就像很多优秀的软件都有自己的测试框架一样,LLVM也有自己的测试框架。LLVM的测试主要分为两部分:regression tests 和 whole programs。其中,regression tests主要位于LLVM源码/test目录下,主要是用来测试LLVM的一些特性或者是用来测试一些bug的。我们在平时的工作中,一般使用的就是这个类型的test。原创 2013-02-27 11:55:04 · 6996 阅读 · 3 评论 -
如何创建本地的LLVM SVN镜像库
作者:snsn1984创建本地的LLVM SVN镜像,有一些好处,但是需要花费很多的时间,但是一旦建立好了,后面用起来就方便了很多。可以随意的在没有网络或者网络状态不好的时候去使用LLVM的代码。1.首先,需要创建一个空的库,使用命令:$> svnadmin create /home/...../llvm '/home/...../' 是想存放该库的路径,此处注意使原创 2013-02-27 10:40:27 · 2995 阅读 · 0 评论 -
LLVM每日谈之七 Clang
作者:snsn1984 官方介绍Clang是LLVM native的一个面向C/C++/Objective-C的编译器,目标是要提供一个编译非常快的编译器。他们宣称在Debug模式下编译Objective-C比GCC快3倍。至于是否能比GCC快这么多,总有人去做对比,大家可以搜索下,好像确实快了些。Clang一般被说是LLVM的一个前端。关于前端的定义,大家可以从LLVM原创 2012-11-28 09:33:59 · 22319 阅读 · 11 评论 -
LLVM每日谈之九 谈LLVM的学习
作者:snsn1984从接触LLVM编译器到现在,也有多半年时间了,在这多半年的时间里,也花了不少精力在上面。现在回过头来总结一下在LLVM的学习过程中的一些感悟。(注:这里对LLVM的学习,不是指的是学习LLVM的使用,而是主要针对基于LLVM实现编译功能。)1、在开始学习LLVM之前,要有一个心里准备。因为在接下来的学习过程中,会是比较艰难的一个过程,也是一个长期的过程,而且随着学原创 2013-02-23 13:43:58 · 9605 阅读 · 4 评论 -
七天LLVM零基础入门(Linux版本)------第一天
作者:snsn1984开篇语:学习LLVM的过程是一个漫长而艰巨的过程,需要大量的时间和精力。不仅仅如此,开始的过程也不轻松。一个好的开始就是成功的一半。我结合了自己学习的过程,以及给别人推荐学习的过程,整理出了这个七天LLVM零基础入门的系列博客。主要的目标是让没有LLVM基础的人,经过这一系列的学习,可以完成一些Pass的工作,并且可以成功的自己去自主学习,知道自己该怎么学习,知道原创 2013-02-20 10:22:22 · 44141 阅读 · 21 评论 -
七天LLVM零基础入门(Linux版本)------第七天
作者:snsn1984这是这一次零基础入门的最后一天,这次的主要任务是实战一个Pass。任务描述:实现一个Pass,该Pass可以读取一个程序中所有的for循环的循环头的名字并输出。同时,实现一个测试用例去测试输出的结果是否正确。该Pass的输入应该包含嵌套循环。在这个任务完成之后,应该已经达到可以达到可以分析和实现LLVM的Pass,查找和分析LL原创 2013-02-28 10:04:19 · 6245 阅读 · 3 评论 -
LLVM每日谈之十三 使用LLVM自带的PASS
作者:snsn1984PS:最近一段时间,投入在LLVM上的时间有些减少。差点把对它的研究断掉,今天开始继续。对LLVM的研究需要很长一段时间的坚持不懈才可以彻底搞明白。前面已经介绍过如何写自己的PASS,并且也针对一个简单的PASS进行了分析和介绍。相信大家也可以从LLVM源码中找到很多的PASS,这些PASS太多,他们每个到底是做什么用?如何去调用这些系统已经有的PASS?这就是这原创 2013-05-07 11:12:05 · 4923 阅读 · 0 评论 -
LLVM每日谈之十四 如何给Clang添加一个属性
每次内容主要出自文档: “Clang” CFE Internals Manual地址: http://clang.llvm.org/docs/InternalsManual.html在这个文档中,以简明的的一个例子说明了如何按照这个方式在Clang中添加一个属性。讲的很清楚,我在这里不再累述,只是将例子中的部分代码和文档结合起来,一起展现给大家。How to a原创 2013-06-04 15:33:06 · 4553 阅读 · 0 评论 -
LLVM每日谈之十五 LLVM自带的examples
作者:snsn1984 在LLVM源码的目录下,有一个目录叫做examples,这个目录下边有几个LLVM的例子,初学者一般不会太关注这些例子,但是这些例子确实是精华中的精华,在LLVM的学习过程中不可避免的要对这些例子所涉及内容要精通。所以希望大家一定要对这些例子重视起来,它们都是经典中的经典。从我个人而言,从这些例子中学到了很多,文档说了很多都没能让人明白的东西,原创 2013-07-08 09:10:43 · 6238 阅读 · 3 评论 -
LLVM每日谈之十六 LLVM的学习感悟
这些总结并非我自己写的,而是摘自LLVM的版本比较老的文档中。因为老版本的文档已经鲜有人关注了,而这篇总结的非常好,到现在也很有用处,所以就把这部分内容贴出来了。这只是原文档的一部分。原文档地址:http://llvm.org/releases/1.1/docs/Stacker.html正文内容:Lessons I Learned About LLVMEverything'原创 2013-07-18 10:30:57 · 5967 阅读 · 0 评论 -
PNaCl:Google通过LLVM增强对Chrome中原生应用的支持
作者 Abel Avram ,译者 臧秀涛 发布于 五月 20, 2013通过支持运行LLVM位码(bitcode),Google增强了对Chrome中原生应用的支持。在Google I/O 2013大会上,Google宣布了预期加入的PNaCl(Portable NaCl,读作“pinnacle”),继续推进对Chrome中原生应用的支持。PNaCl修改了原来的工转载 2013-12-08 15:56:48 · 2143 阅读 · 0 评论 -
LLVM提议向C语言中加入模块机制
作者 Alex Blewitt ,译者 臧秀涛 发布于 十二月 05, 2012在今年11月的LLVM开发者大会上,来自Apple的Doug Gregor做了一场讲座,主题是向C语言中加入模块(Module)机制。讲座中提到:长期以来,C的预处理器就是程序员和工具的问题之源。写得不好的头文件致使宏污染和包含顺序等问题大量存在,程序员必须不断地与之斗争。为了缓解这些问转载 2013-12-08 16:06:06 · 1882 阅读 · 0 评论 -
Design: cpp11-migrate
Design: cpp11-migrateThis document describes the design of the tool cpp11-migrate used to automatically migrate legacy C++ code to use features of the new C++11 standard. The tool is to be based o转载 2013-12-08 19:20:59 · 1557 阅读 · 0 评论 -
LLVM 3.3完全兼容C++11
作者 Jeff Martin ,译者 臧秀涛 发布于 七月 01, 2013最近发布的LLVM 3.3带来了大量新特性,其中包括通过Clang子项目实现的完全兼容C++11的编译器。最重要的新特性是支持一些新的CPU架构,包括AArch64(64位ARM)、AMD的R600 GPU和IBM的z/Architecture(s390x),再就是改进了对MIPS和PowerPC的转载 2013-12-08 15:46:16 · 2132 阅读 · 0 评论 -
Status of the C++11 Migrator----Monday, April 15, 2013
Since the design document for cpp11-migrate, the C++11 migrator tool, was first proposed in early December 2012 development has been making steady progress. In this article I'll talk about what's转载 2013-12-08 16:34:59 · 1311 阅读 · 0 评论 -
Google Summer of Code: C++ Modernizer Improvements----Monday, November 18, 2013
原文地址:http://blog.llvm.org/2013/11/google-summer-of-code-c-modernizer.htmlGoogle Summer of Code (GSoC) offers students stipends to participate in open source projects during the summer. This year,转载 2013-12-09 13:54:53 · 1588 阅读 · 0 评论 -
LLVM每日谈之十七 LLVM/Clang的学习的思考
关于LLVM/Clang学习过程中的一些思考,不见得对,但是是学习过程中的思考。原创 2013-12-11 17:50:08 · 4165 阅读 · 3 评论 -
Mapping High-Level Constructs to LLVM IR
原文地址:http://llvm.lyngvig.org/Articles/Mapping-High-Level-Constructs-to-LLVM-IRMapping High-Level Constructs to LLVM IRTable of ContentsIntroductionA Quick PrimerSome Useful LLVM ToolsMap转载 2013-12-31 09:50:42 · 3553 阅读 · 1 评论 -
深入研究Clang(一)Clang和LLVM的关系及整体架构
Clang是LLVM框架中的重要前端,深入理解Clang,首先要搞清楚的是它和LLVM的关系,之后要搞清楚的是它的架构。只有这两个问题搞清楚了,才可以真正的深入下去。原创 2013-12-31 15:53:19 · 41982 阅读 · 4 评论 -
LLVM每日谈之十八 GEP Instruction的几点总结
Getelementptr指令是LLVM中常会用到的一个指令,也是不太容易理解的一个指令,经常会让人很迷惑。这里将文档中总结的关于GEP的几条总结信息按照自己的理解做了一个翻译。原创 2013-12-31 17:39:12 · 5904 阅读 · 3 评论 -
“Clang” CFE Internals Manual---中文版---"Clang"C语言前端内部手册
Clang内部手册,是介绍Clang内部的设计和主要内容的最重要的文档,是hacking Clang所必不可缺少的一个文档。翻译 2013-12-13 10:46:07 · 8056 阅读 · 2 评论