LLVM每日谈
文章平均质量分 61
作为一个越来越多的公司、产品(比如Google的Android,Apple的IOS)和个人选择的编译器,LLVM有很多优秀之处,它正在成为第二大的开源编译器。本专栏将以每次介绍一个知识点的方式,来介绍LLVM的方方面面,并且持续关注LLVM的最新动态。
snsn1984
专注技术,专注管理。
展开
-
LLVM libc++的RISCV支持
libc++的官方主页:http://libcxx.llvm.org/libc++文档主页:https://libcxx.llvm.org/docs/简介:libc++ is an implementation of the C++ standard library, targeting C++11, C++14 and above.All of the code in libc++ isdual licensedunder the MIT license and the UIUC...原创 2020-05-21 10:54:46 · 1081 阅读 · 0 评论 -
LLVM每日谈之五十七 TableGen
TableGen官方文档TableGen 后端官方文档TableGen是LLVM的一个工具,其可执行文件的名字为llvm-tblgen。通常在build目录下的bin目录里。TableGen主要是帮助开发者开发和维护特定领域的信息记录,方便开发者更好的构建这些信息记录,避免错误。尤其是在面对大量的信息记录的时候,用起来比较方便。TableGen的主要使用者是The LLVM Targe...原创 2020-05-03 23:48:20 · 873 阅读 · 0 评论 -
LLVM每日谈之五十六 从RegionPass看Region
RegionPass是Pass的一个子类,和其他Pass的子类(ModulePass、FunctionPass、LoopPass、BasicBlockPass)一样,都是同样的一个模式:运行在每一个XX之上。(注:这里的XX代表着这几个Pass的针对的对象,每个都不同。FunctionPass运行在每一个Function之上,RegionPass运行在每一个Region之上。其他同样)但是...原创 2019-06-15 23:49:18 · 812 阅读 · 1 评论 -
LLVM每日谈之五十五 浅谈对Pass的错误认知及其原因
Pass作为LLVM的一个重要的组成部分,在LLVM IR层面和LLVM Backend层面都发挥了重要的作用。很多LLVM的使用者容易将Pass理解为LLVM IR层面的analysis和transform,而忽略了Pass在LLVM Backend层面的作用。而实际上,Pass在LLVM Backend层面发挥的作用一点都不小。以后端的结构为例:Notes: 《Getting Star...原创 2019-06-15 21:58:35 · 2117 阅读 · 0 评论 -
LLVM每日谈之五十四 新建后端的第二步校正(register set)
新建后端的七大步骤,在前文《LLVM后端文档解析》中进行过介绍。我们在《创建一个LLVM新后端的第一步中文档与代码的差异》和《Target Registration的更正》中,已经列出了现有文档中第一步“Create a subclass of the TargetMachine class that describes characteristics of your target machine...原创 2019-06-15 21:57:33 · 1543 阅读 · 1 评论 -
LLVM每日谈之五十三 Target Registration的更正
前文:创建一个LLVM新后端的第一步中文档与代码的差异主要是为新后端实现了一个Target Machine,这是新建后端七个步骤的第一步。在这个步骤之后,还有一个隐含的内容,那就是将这个Target注册,好让其它的LLVM工具可以在运行时使用你新建的target。LLVM的官方文档中,以Sparc为例,做了举例:和实际上,代码变动已经很大了。目前的Target的注册的代...原创 2019-06-15 21:56:16 · 1456 阅读 · 0 评论 -
LLVM每日谈之五十二 创建LLVM后端的第一步校正(target machine)
根据LLVM文档《Writing an LLVM Backend》可知道,LLVM新建一个后端需要七大步骤。前文对七大步骤和文档中其他的结构的关系也做了简单的分析。后续会逐步分析新建后端的七大步骤,并以RISC-V为目标平台,结合RISC-V的LLVM后端代码进行分析。另外,由于《Writing an LLVM Backend》中有一部分内容已经和代码完全脱钩,所以我通常会列出文档的要求,然后...原创 2019-06-15 21:55:08 · 1334 阅读 · 0 评论 -
LLVM每日谈之五十一 TargetMachine
TargetMachine及其子类:前文介绍了TargetMachine类,我们这篇文章简单分析下TargetMachine类及其子类。TargetMachine类位于include/llvm/Target/TargetMachine.h文件之中。TargetMachine类作为获取目标机器相关信息的入口,作为目标机器类的父类,并不是直接被具体平台的TargetMachine类所继承的,...原创 2019-05-19 12:17:29 · 1180 阅读 · 0 评论 -
LLVM每日谈之五十 LLVM 后端文档解析3 —目标描述类
前文理清楚了六大部分、七大环节和七大步骤的对应关系。那么我们接下来要深入的去分析:Target description classes: abstract target description interfaces (代码地址:include/llvm/Target/)。Target description classes的特点主要有以下几点:1、Target description cl...原创 2019-05-19 12:16:24 · 641 阅读 · 0 评论 -
LLVM每日谈之四十九 LLVM后端文档解析2
前文讲了七大环节和六大部分之间的对应关系,简单来讲就是七大环节其实对应了六大部分的第四个部分:Target-independent code generation algorithms(代码地址:lib/CodeGen)。我们接下里再看看新建后端的时候,所做的七大步骤,对应的是LLVM后端的六大部分的哪一部分。我们首先对六大部分进行裁剪。后端的六大部分:Target descript...原创 2019-05-19 12:15:37 · 538 阅读 · 0 评论 -
LLVM每日谈之四十八 LLVM后端文档解析1
之前在LLVM每日谈之四十七 LLVM后端文档解析中,介绍了后端文档中提到关于后端的六大模块、七大环节和七个步骤。前文也提到过,它们是从不同的维度去解析LLVM的后端,不同维度之间是存在各种各样的交叉关系的。在这里,简单对于三者的关系进行解析。六大模块中第四个模块Target-independent code generation algorithms(代码地址:lib/CodeGen)...原创 2019-05-19 12:14:44 · 563 阅读 · 0 评论 -
LLVM每日谈之四十七 LLVM后端文档解析
去年在HelloLLVM杭州站的活动中,我做了一个分享:LLVM后端简介。主要是从LLVM后端的几大环节上展开,简单介绍了LLVM后端。在新的芯片和指令集大火的今天,为LLVM添加一个新的后端,也成了大家比较关注的热点。LLVM官方提供了两个关于后端的官方文档:1、The LLVM Target-Independent Code Generator2、Writing an LLVM...原创 2019-05-13 23:25:45 · 1100 阅读 · 0 评论 -
LLVM每日谈之四十六 MLIR
在2019 European LLVM developers' meeting上,Tatiana Shpeisman (Google), Chris Lattner (Google)一起做了《MLIR: Multi-Level Intermediate Representation for Compiler Infrastructure》的keynote,对于了解MLIR有很大的帮助。PPT...原创 2019-05-13 23:24:22 · 3483 阅读 · 0 评论 -
LLVM每日谈之四十五 LLVM IR TUTORIAL
今年的LLVM欧洲开发者会议上,在Tutorials环节,Vince Bridgers (Intel Corporation), Felipe de Azevedo Piovezan (Intel Corporation)做了名为《LLVM IR Tutorial - Phis, GEPs and other things, oh my!》的报告。这个报告面向没有LLVM IR基础的用户对LLVM...原创 2019-05-01 21:13:07 · 1048 阅读 · 0 评论 -
LLVM每日谈之四十四 LLVM的别名分析
别名分析是试图决定两个指针是否指向同一块内存的一类技术,这类技术有很多种不同的算法和方法。所以,别名分析也常常被称作是指针分析。别名分析通常会返回是别名、或许是别名和不是别名等几种情况。LLVM别名分析的核心是AliasAnalysis类。这个类提供了用户或者是LLVM系统内部使用别名分析所需要的接口。AliasAnalysis类的代码在llvm/lib/Analysis/目录下有AliasA...原创 2019-04-29 12:07:20 · 1161 阅读 · 0 评论 -
LLVM每日谈之四十三 LLVM的utility pass
LLVM的pass是LLVM优化的核心,除了我们经常谈到的analysis pass和transform pass,还有一类pass叫做utility pass(以LLVM8.0.0为例)。utility pass这一类pass主要是无法按照analysis pass和transform pass进行分类的pass。因为analysis pass和transform pass的界限很明显,前者...原创 2019-04-28 10:21:01 · 862 阅读 · 0 评论 -
LLVM每日谈之四十二 一个添加pass的实例
总会有LLVM的学习者问怎么添加一个pass实例。我之前写过的一个简单的文档,但是间隔时间太久,LLVM更新很大,已经不具有实际的指导作用。这次举一个新提交的patch为例子,可以清晰的看到如何在LLVM之中添加一个pass。rL358607reviews.llvm.org这个patch为LLVM添加了一个基本的loop融合pass。可以参照这个patch在最新的LLVM之中添加自己...原创 2019-04-26 17:38:04 · 1108 阅读 · 0 评论 -
LLVM每日谈之四十一 组装一个完整的工具链
写在前面的话:这是一篇LLVM的官方文档,英文文档地址:Assembling a Complete Toolchain之前读文档的时候,陆陆续续的翻译过一些,周末花了点时间把这个文章整理了出来。因为都是随手翻的,翻译完了之后,也不愿意再花时间去斟酌,所以有不少用词都不那么严谨。LLVM的官方文档很详细,有什么需要最好是直接读官方的英文文档。这个自己随便翻译的文档放出来,是希望能给有些不...翻译 2019-01-13 21:54:32 · 3355 阅读 · 2 评论 -
LLVM每日谈之四十 一门介绍LLVM的课程
最近看到了UFMG的DCC888课程。在这里分享给大家,有需要的可以自己看看,个人感觉非常不错。DCC888课程,主要是关于程序分析和优化的,其主要的内容如下图所示:本身这门课程的内容,就是编译器相关课程。这门课程在后半部分,有一个关于LLVM的子课程,非常适合入门的学习,其内容主要如下:基本上覆盖了LLVM刚入门会需要用到的几个方面。而且,因为是个小课程,相关的基础介绍以及连...原创 2019-01-11 11:45:06 · 1725 阅读 · 0 评论 -
LLVM每日谈之三十九 浅谈LLVM的异常处理(OSDT2018大会分享)
CSDN的ppt和图片上传很困难,放到知乎上了。https://zhuanlan.zhihu.com/p/51915789原创 2018-12-08 20:47:32 · 830 阅读 · 1 评论 -
LLVM每日谈之三十八 那些LLVM的博客和专栏
接触LLVM至今,已经6年多了,除了官方文档和邮件列表之外,陆陆续续的也读了一些博客和专栏,非常的不错,帮助很大。在此,将这些博客和专栏整理出来,希望对大家有帮助。1、llvm - 韋任的維基百科最初接触LLVM的时候,没有任何中文资料,唯一能找到的中文资料就是这个维基百科。对我帮助很大,和博主也有过简单的沟通。2、Eli Bendersky's websiteEli Bender...原创 2018-07-30 12:36:46 · 1954 阅读 · 2 评论 -
LLVM每日谈之三十七 Brief Intro to LLVM Backend (HelloLLVM杭州站分享PPT)
今天参加了HelloLLVM在杭州的线下聚会,做了一个关于LLVM 后端的分享。旨在给对LLVM感兴趣的同学和刚接触LLVM的同学一点引导,帮助他们快速理清LLVM的后端架构。PPT如下:...原创 2018-07-28 15:50:07 · 1006 阅读 · 1 评论 -
LLVM每日谈之三十六 LLVM后端的结构
最近在重读《Gettiing Started with LLVM Core Libraries》,后端方面感觉有新的认识。在这个过程中,发现这本书中关于后端结构的几个图非常的好,能说明很多问题,就将这几个图摘录下来,根据自己的理解,简单做个介绍。希望能对初学者有用。 ...原创 2018-07-24 10:40:56 · 4544 阅读 · 1 评论 -
LLVM每日谈之三十五 LLVM/Clang 6.0.0编译中遇到的问题
随着LLVM/Clang版本的不断升级,LLVM/Clang也在慢慢的变得庞大起来,这使得编译其源码的时间和空间的需求也在极速扩张。这两天在虚拟机Ubuntu18.04上编译LLVM/Clang 6.0.0的时候就遇到了这样的问题。首先,采用了传统的cmake 、make方式编译,没有添加任何参数。这种情况下,默认编译的是Debug模式,默认编译的目标平台是所有。编译时间长,这个无非是多等一下...原创 2018-07-19 19:45:54 · 2573 阅读 · 0 评论 -
LLVM每日谈之三十四 LLVM IR生成和转换的几条指令
本文将罗列几条关于LLVM IR生成和转换的几条指令,并没有技术含量可言,只是让刚接触LLVM IR的同学,有一个检索和参考作用。文中min.c作为输入。min.cint min(int a , int b) { if (a <b ) return a; return b:}1、从源码生成.bcclang min.c -emit-llvm -c -o min.bc2、从源...原创 2018-07-14 11:27:31 · 5007 阅读 · 4 评论 -
LLVM每日谈之三十三 LLVM的DEBUG宏改名了
根据rL332240提交的申请,LLVM的DEBUG宏将更名为LLVM_DEBUG,原因是为了避免其他工程出现问题。在转换期间,DEBUG宏作为别名依然可以使用。这个更改虽然谈不上什么有技术含量的更新,只是一个更名,但是这个更名却对我们日常的使用影响较大。毕竟,debug宏使用的频率还是很高的。具体修改内容见:rL332240...原创 2018-07-02 13:58:41 · 737 阅读 · 0 评论 -
LLVM每日谈之三十二 C++ Insights
C++ Insights是一个基于clang的工具,它主要提供代码到代码的转换。它的目标是让屏幕背后发生一些事情变得可见,让我们更好的理解编译器是怎么运作的。列举两个例子,大家就很明白的知道这个工具到底做了什么了。官方例子一:Source:#include <cstdio>#include <vector>int main(){const char arr[10]{2,4,...原创 2018-07-02 13:56:20 · 1471 阅读 · 0 评论 -
LLVM每日谈之三十一 如何读写LLVM的bitcode
LLVM的IR在整个LLVM工程中占据着核心地位,它是整个LLVM三个阶段的中间环节,起着承上启下的作用。如何读写LLVM的bitcode在LLVM的前端和后端都会涉及这个问题,在基于LLVM做一些定制化开发的时候,对LLVM的bitcode也是重中之重。 LLVM的官方文档在这个方面介绍很详细,但是随着LLVM的扩充,官方文档也越来越厚重,有的时候只是简单的想做某个事,可...原创 2018-05-14 20:56:52 · 3604 阅读 · 0 评论 -
LLVM邮件列表2018年4月内容选辑
缘起:LLVM的邮件列表关注了很久,最闲的时候每篇都读,也回过几篇邮件。忙的时候,可能好几个月不怎么读,积累一大堆未读,只能直接清理了。后来,有人做了llvmweekly,好了很多,每周花点时间看一看,就知道个大概,方便很多。转眼之间,llvmweekly已经做到了200多期,历时4年多了,我从中获益很多。一直在想,除了经常记录点自己学习的感受和零碎的知识点,我还能做点什么?最近忽然有想法,我能不...原创 2018-05-14 20:59:11 · 794 阅读 · 0 评论 -
LLVM每日谈之外篇 工具链到底能火多久
本篇不同于之前所有的篇章,与技术毫无关系,纯属扯淡。算是反思一下业态。中兴被制裁事件之后,忽然之间,花开一地。大大小小的公司都开始在芯片上发力,实干的、吹牛的、投机的、蹭热点的、套钱的等等,不一而足。真的是什么类型都有,似乎马上这个行业就繁荣起来了,至少是表面上繁荣了起来。给了很多非专业人士莫大的鼓励,似乎有了这个劲头,再有三五年,我们就永远不会像今天的中兴那样面对困局。事实什么样,明白人心里都有...原创 2018-07-02 14:04:47 · 1081 阅读 · 2 评论 -
LLVM每日谈之三十 在LLVM中定制Alias分析
Alias分析是一个决定两个指针是否指向同一个对象(alias)的过程。这在变量优化的过程中十分重要。近日,Simon Brand写了一篇博客介绍如何在LLVM中定制Alias分析,这篇博客非常简明,并且附上了示例代码,让人可以很快的掌握如何在LLVM中定制Alias分析。其最终目标,也是为了添加一个可以做定制化Alias分析的PASS。这篇博客的地址为:Custom Alias Analysis...原创 2018-05-12 20:58:34 · 1457 阅读 · 0 评论 -
LLVM每日谈之二十九 面向机器学习的编译器——Glow
当地时间五月三日,Glow开发者在LLVM开发者邮件列表中发布了Glow。邮件地址:[llvm-dev] Thank you from the Glow DevelopersGlow的开源地址:pytorch/glowGlow的论文地址:https://arxiv.org/pdf/1805.00907.pdf根据官方的描述,Glow基于LLVM项目进行了开发,所以在邮件列表里对LLVM的开发者表示...原创 2018-05-11 20:24:39 · 2728 阅读 · 0 评论 -
LLVM每日谈之二十八 I am leaving llvm
Rafael 于当地时间五月二日宣称离开LLVM社区,在网络引发了广泛的讨论。Rafael 作为LLVM贡献排名第五的资深贡献者,对LLVM社区贡献极大,他一共提交了4,344个节点,占LLVM提交节点总数的2.65%,共提交了157,679行代码。Rafael 离开的根本原因还是社区环境的变化,最终的触发事件是社区与Outreachy的合作。不管怎么说,Rafael 的离开让人觉得惋惜。感谢他一...原创 2018-05-08 13:28:55 · 1052 阅读 · 0 评论 -
LLVM每日谈之二十七 几个在线编译器资源
几个在线编译器资源:(来源于https://isocpp.org)平时会遇到有点小想法想验证一下,发现手头那台电脑环境不具备,还要折腾一下重新配置,很是烦人。无意间发现了这几个在线的资源,记录下来,留作后用。1、godbolt.org (Clang, GCC, Intel ICC, VC++)2、Wandbox (Clang, gcc -- includes Boost)3、Online Vis原创 2017-12-13 09:15:32 · 1594 阅读 · 0 评论 -
LLVM每日谈之二十六 riscv-llvm
说起riscv-llvm,可能一下子让人摸不到头脑,因为有些人没有关注RISC-V。如果从RISC说起,RISC-V, riscv-llvm都会变得更容易理解。RISC就是经常说的精简指令集,这在之前计算机行业的发展过程中起到的作用,怎么形容都不为过了。真正做过编译器相关和CPU相关工作的人,可能对这些有更深的感触。RISC-V简单点来说,就是一个开源版本的RISC,并且由于设计团队包含了很多之前原创 2017-11-28 09:58:20 · 4165 阅读 · 1 评论 -
LLVM每日谈之二十五 Clangd和LSP
1、ClangdClang的Extra Clang Tools中有一个ClangD。按照ClangD的定义,它是对Language Server Protocol的一个具体实现(当然是建立在Clang的基础之上的),目的是为了提供编程语言的一些智能化的特性,比如代码完成、引用查找等,主要面向的终端是C/C++的编辑器。Clangd的官方定义:Clangd is an implementation原创 2017-11-24 09:33:45 · 8123 阅读 · 0 评论 -
LLVM每日谈之二十四 Google的ClangMR
ClangMR的论文《Large-Scale Automated Refactoring Using ClangMR》:http://www.hyrumwright.org/papers/icsm2013.pdfClangMR是Goolge的一个工具,严格的说,并不属于Clang家族,是属于基于Clang所构建的一个工具。Google秉承他们一贯的原则,在构建该工具并投入使用之后,将该工具的情况发原创 2017-04-20 10:57:50 · 1973 阅读 · 0 评论 -
LLVM每日谈之二十三 LLVM/Clang编译Linux内核资料
作者:史宁宁(snsn1984)之前有朋友问到这个问题,是否有使用LLVM/Clang编译Linux内核的,随手找了一些相关资料,在这里贴出来,与大家共享。网址:http://llvm.linuxfoundation.org项目简介:LLVMLinux Project OverviewThis project aims to fully build the Linux kernel using C原创 2017-03-10 09:36:56 · 5498 阅读 · 0 评论 -
LLVM每日谈之二十二 llvm-config工具的使用
作者:史宁宁(snsn1984)llvm-config作为LLVM的一个工具,是非常有用的,官方文档(http://llvm.org/docs/CommandGuide/llvm-config.html)关于它的介绍如下:llvm-config makes it easier to build applications that use LLVM. It can print the compile原创 2014-11-25 10:18:52 · 12615 阅读 · 3 评论 -
LLVM每日谈之二十一 一些关于编译器和LLVM/Clang的代码
作者:史宁宁(snsn1984)自己收集了一些LLVM/Clang的代码,并且自己也在一点一点的写一些LLVM/Clang以及编译器的代码,在这里把这些代码库分享出来,欢迎大家交流探讨。1.crangehttps://github.com/shining1984/crange这是一个python写的调用libclang去定位和交叉检索C/C++源码的工具。这个工具不是我写的,我给fork过来了,方原创 2014-11-18 10:36:23 · 4656 阅读 · 0 评论