自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SHINING的博客

不忘初心,方得始终。

原创 LLVM libc++的RISCV支持

libc++的官方主页:http://libcxx.llvm.org/ libc++文档主页:https://libcxx.llvm.org/docs/ 简介: libc++ is an implementation of the C++ standard library, target...

2020-05-21 10:54:46 106 0

原创 深入研究Clang(十九) Clang的RISCV支持2

前文Clang的RISCV支持1介绍了Clang中有关RISCV的代码主要集中在三个地方:Driver部分、Basic部分和CodeGen部分,并且对Basic部分和CodeGen部分的内容和关系进行了介绍,只有Driver部分因为涉及到了ToolChain、Tool和Command(job)等概...

2020-05-21 10:48:03 96 0

原创 LLVM每日谈之五十七 TableGen

TableGen官方文档 TableGen 后端官方文档 TableGen是LLVM的一个工具,其可执行文件的名字为llvm-tblgen。通常在build目录下的bin目录里。 TableGen主要是帮助开发者开发和维护特定领域的信息记录,方便开发者更好的构建这些信息记录,避免错误。尤其是...

2020-05-03 23:48:20 238 0

原创 关于编译器和静态分析的一些课程

陆陆续续收集了一些课程,主要是编译器和静态分析方面的,在这里分享给大家,也给自己做个资料存档。 国外的一些课程: 1、Stanford编译器课程系列 CS143:CS143: Compilers CS243:CS243 - Advanced Compilers CS343:CS 343 ...

2020-03-08 20:29:59 390 0

原创 写在36岁的生日

25 Feb 2020 今天是我36岁的生日。 回望过去,似乎是不知不觉就来到了这个有点尴尬的年纪,这个被年轻程序员认为要被淘汰的年纪。 但是真正到了这个年纪,却发现,现在更能静下心来做点东西,也更喜欢踏实的做点东西。 32岁的时候,做到了技术总监,真正脱离了第一线,终于不担心自己的中年危机了...

2020-03-04 11:11:50 304 1

原创 方舟编译器学习笔记分类与导读

方舟学习笔记系列,从方舟开源到现在,已经写了50多篇,保证了每天一篇的更新频率。篇数增加之后,文章的分类以及文章之间的关系,逐渐变得复杂起来。本文将对已发表的学习笔记系列进行分类和导读,方便读者更好的理解。 1、方舟动态 本类中主要是关于方舟编译器动态的消息,包括不限于方舟的变动、线下活动见闻...

2019-10-24 08:53:52 591 1

原创 深入研究Clang(十八) Clang Driver库的job

Clang的Tool最终会调用ConstructJob来为Compilation添加job。根据源码中的注释,Tool中保存的是一个特定编译工具的信息(Tool - Information on a specific compilation tool.,clang/include/clang/Dr...

2020-05-21 10:46:32 80 0

原创 深入研究Clang(十七) Clang Driver库的Tool

Tool也是Clang的Driver库里的一个类,它是具体编译工具的信息,代码注释中的原文是:Tool - Information on a specific compilation tool.(clang/include/clang/Driver/Tool.h)本文将对Tool的实现以及其相关调...

2020-05-21 10:44:28 106 0

原创 深入研究Clang(十六) Clang Driver库的ToolChain

ToolChain是Clang的Driver库里的一个类,它是用来获取具体某个平台的工具集合,代码注释中的原文是:ToolChain - Access to tools for a single platform.(clang/include/clang/Driver/ToolChain.h)这里...

2020-05-21 10:42:40 114 0

原创 深入研究Clang(十五) Clang的RISCV支持1

一、Clang/LLVM对RISCV的支持概况 目前已经有一系列的C类编译器和库开始支持RISCV,这其中包括了GCC和Clang/LLVM。从RISCV的官方网站,可以获取目前的支持状态。具体内容如下: 网址:https://riscv.org/software-status/#c-co...

2020-05-21 10:39:01 159 0

原创 方舟编译器学习笔记67 clang-tidy的检查规则解析

前段时间,我为方舟编译器提交了一些clang-tidy的检查规则,这些规则位于项目目录之下的.clang-tidy文件之中。本文将逐条解读一下这些规则。 1、readability-identifier-naming (规则2.1.1) 这条规则是用来检查名命名规则的。在这条总的规则之下,还有...

2020-03-14 11:29:53 317 0

原创 深入研究Clang(十四) clang-tidy的使用

前文对clang-tidy进行了简单的介绍,本文对clang-tidy使用中的一些点进行一下总结。 1、clang-tidy及其批量运行脚本run-clang-tidy.py在Clang/LLVM的预编译发布包中都有,但是位于不同的目录。其中,clang-tidy位于:发布包主目录/bin目录之...

2020-02-08 11:49:15 1203 0

原创 深入研究Clang(十三) clang-tidy简介

最近几天在关注clang-tidy,有一些体会,简单做一些笔记。分享给感兴趣的朋友们,也是给将来的自己看。 1、clang-tidy是基于AST的静态检查工具。因为它基于AST,所以要比基于正则表达式的静态检查工具更为精准,但是带来的缺点就是要比基于正则表达式的静态检查工具慢一点。也是因为它基于...

2020-01-11 12:03:21 1105 0

原创 LLVM每日谈之五十六 从RegionPass看Region

RegionPass是Pass的一个子类,和其他Pass的子类(ModulePass、FunctionPass、LoopPass、BasicBlockPass)一样,都是同样的一个模式:运行在每一个XX之上。(注:这里的XX代表着这几个Pass的针对的对象,每个都不同。FunctionPass运行...

2019-06-15 23:49:18 353 1

原创 LLVM每日谈之五十五 浅谈对Pass的错误认知及其原因

Pass作为LLVM的一个重要的组成部分,在LLVM IR层面和LLVM Backend层面都发挥了重要的作用。很多LLVM的使用者容易将Pass理解为LLVM IR层面的analysis和transform,而忽略了Pass在LLVM Backend层面的作用。而实际上,Pass在LLVM Ba...

2019-06-15 21:58:35 1294 0

原创 LLVM每日谈之五十四 新建后端的第二步校正(register set)

新建后端的七大步骤,在前文《LLVM后端文档解析》中进行过介绍。我们在《创建一个LLVM新后端的第一步中文档与代码的差异》和《Target Registration的更正》中,已经列出了现有文档中第一步“Create a subclass of the TargetMachine class th...

2019-06-15 21:57:33 881 0

原创 LLVM每日谈之五十三 Target Registration的更正

前文:创建一个LLVM新后端的第一步中文档与代码的差异主要是为新后端实现了一个Target Machine,这是新建后端七个步骤的第一步。在这个步骤之后,还有一个隐含的内容,那就是将这个Target注册,好让其它的LLVM工具可以在运行时使用你新建的target。 LLVM的官方文档中,以Spa...

2019-06-15 21:56:16 917 0

原创 LLVM每日谈之五十二 创建LLVM后端的第一步校正(target machine)

根据LLVM文档《Writing an LLVM Backend》可知道,LLVM新建一个后端需要七大步骤。前文对七大步骤和文档中其他的结构的关系也做了简单的分析。后续会逐步分析新建后端的七大步骤,并以RISC-V为目标平台,结合RISC-V的LLVM后端代码进行分析。另外,由于《Writing ...

2019-06-15 21:55:08 685 0

原创 LLVM每日谈之五十一 TargetMachine

TargetMachine及其子类: 前文介绍了TargetMachine类,我们这篇文章简单分析下TargetMachine类及其子类。TargetMachine类位于include/llvm/Target/TargetMachine.h文件之中。 TargetMachine类作为获取目标机...

2019-05-19 12:17:29 376 0

原创 LLVM每日谈之五十 LLVM 后端文档解析3 —目标描述类

前文理清楚了六大部分、七大环节和七大步骤的对应关系。那么我们接下来要深入的去分析:Target description classes: abstract target description interfaces (代码地址:include/llvm/Target/)。 Target desc...

2019-05-19 12:16:24 223 0

原创 LLVM每日谈之四十九 LLVM后端文档解析2

前文讲了七大环节和六大部分之间的对应关系,简单来讲就是七大环节其实对应了六大部分的第四个部分:Target-independent code generation algorithms(代码地址:lib/CodeGen)。 我们接下里再看看新建后端的时候,所做的七大步骤,对应的是LLVM后端的六...

2019-05-19 12:15:37 219 0

原创 LLVM每日谈之四十八 LLVM后端文档解析1

之前在LLVM每日谈之四十七 LLVM后端文档解析中,介绍了后端文档中提到关于后端的六大模块、七大环节和七个步骤。前文也提到过,它们是从不同的维度去解析LLVM的后端,不同维度之间是存在各种各样的交叉关系的。在这里,简单对于三者的关系进行解析。 六大模块中第四个模块Target-independ...

2019-05-19 12:14:44 206 0

原创 LLVM每日谈之四十七 LLVM后端文档解析

去年在HelloLLVM杭州站的活动中,我做了一个分享:LLVM后端简介。主要是从LLVM后端的几大环节上展开,简单介绍了LLVM后端。在新的芯片和指令集大火的今天,为LLVM添加一个新的后端,也成了大家比较关注的热点。 LLVM官方提供了两个关于后端的官方文档: 1、The LLVM Tar...

2019-05-13 23:25:45 473 0

原创 LLVM每日谈之四十六 MLIR

在2019 European LLVM developers' meeting上,Tatiana Shpeisman (Google), Chris Lattner (Google)一起做了《MLIR: Multi-Level Intermediate Representation fo...

2019-05-13 23:24:22 1635 0

原创 LLVM每日谈之四十五 LLVM IR TUTORIAL

今年的LLVM欧洲开发者会议上,在Tutorials环节,Vince Bridgers (Intel Corporation), Felipe de Azevedo Piovezan (Intel Corporation)做了名为《LLVM IR Tutorial - Phis, GEPs and...

2019-05-01 21:13:07 455 0

原创 LLVM每日谈之四十四 LLVM的别名分析

别名分析是试图决定两个指针是否指向同一块内存的一类技术,这类技术有很多种不同的算法和方法。所以,别名分析也常常被称作是指针分析。别名分析通常会返回是别名、或许是别名和不是别名等几种情况。 LLVM别名分析的核心是AliasAnalysis类。这个类提供了用户或者是LLVM系统内部使用别名分析所需...

2019-04-29 12:07:20 396 0

原创 LLVM每日谈之四十三 LLVM的utility pass

LLVM的pass是LLVM优化的核心,除了我们经常谈到的analysis pass和transform pass,还有一类pass叫做utility pass(以LLVM8.0.0为例)。 utility pass这一类pass主要是无法按照analysis pass和transform pa...

2019-04-28 10:21:01 465 0

原创 LLVM每日谈之四十二 一个添加pass的实例

总会有LLVM的学习者问怎么添加一个pass实例。我之前写过的一个简单的文档,但是间隔时间太久,LLVM更新很大,已经不具有实际的指导作用。 这次举一个新提交的patch为例子,可以清晰的看到如何在LLVM之中添加一个pass。 rL358607​reviews.llvm.org 这个pat...

2019-04-26 17:38:04 593 0

原创 LLVM每日谈之四十 一门介绍LLVM的课程

最近看到了UFMG的DCC888课程。在这里分享给大家,有需要的可以自己看看,个人感觉非常不错。 DCC888课程,主要是关于程序分析和优化的,其主要的内容如下图所示: 本身这门课程的内容,就是编译器相关课程。这门课程在后半部分,有一个关于LLVM的子课程,非常适合入门的学习,其内容主要如...

2019-01-11 11:45:06 928 0

原创 LLVM每日谈之三十九 浅谈LLVM的异常处理(OSDT2018大会分享)

CSDN的ppt和图片上传很困难,放到知乎上了。 https://zhuanlan.zhihu.com/p/51915789

2018-12-08 20:47:32 465 1

原创 LLVM每日谈之三十八 那些LLVM的博客和专栏

接触LLVM至今,已经6年多了,除了官方文档和邮件列表之外,陆陆续续的也读了一些博客和专栏,非常的不错,帮助很大。在此,将这些博客和专栏整理出来,希望对大家有帮助。 1、llvm - 韋任的維基百科 最初接触LLVM的时候,没有任何中文资料,唯一能找到的中文资料就是这个维基百科。对我帮助很大,...

2018-07-30 12:36:46 1477 2

原创 LLVM每日谈之三十七 Brief Intro to LLVM Backend (HelloLLVM杭州站分享PPT)

今天参加了HelloLLVM在杭州的线下聚会,做了一个关于LLVM 后端的分享。旨在给对LLVM感兴趣的同学和刚接触LLVM的同学一点引导,帮助他们快速理清LLVM的后端架构。PPT如下: ....

2018-07-28 15:50:07 748 1

原创 LLVM每日谈之三十六 LLVM后端的结构

最近在重读《Gettiing Started with LLVM Core Libraries》,后端方面感觉有新的认识。在这个过程中,发现这本书中关于后端结构的几个图非常的好,能说明很多问题,就将这几个图摘录下来,根据自己的理解,简单做个介绍。希望能对初学者有用。             ...

2018-07-24 10:40:56 2811 1

原创 LLVM每日谈之三十五 LLVM/Clang 6.0.0编译中遇到的问题

随着LLVM/Clang版本的不断升级,LLVM/Clang也在慢慢的变得庞大起来,这使得编译其源码的时间和空间的需求也在极速扩张。这两天在虚拟机Ubuntu18.04上编译LLVM/Clang 6.0.0的时候就遇到了这样的问题。 首先,采用了传统的cmake 、make方式编译,没有添加任何...

2018-07-19 19:45:54 1421 0

原创 LLVM每日谈之三十四 LLVM IR生成和转换的几条指令

本文将罗列几条关于LLVM IR生成和转换的几条指令,并没有技术含量可言,只是让刚接触LLVM IR的同学,有一个检索和参考作用。文中min.c作为输入。min.c int min(int a , int b) { if (a <b ) return a; retur...

2018-07-14 11:27:31 2898 3

原创 深入研究Clang(十二) 可以观察Clang前端分析阶段性产物的几个命令

Clang作为整个LLVM框架下关于C、C++和Object-C的前端。其大致环节分为词法分析、预处理、语法分析、语义分析、中间代码生成几个环节。我们在阅读和修改Clang的代码的过程中,需要经常的调试代码,观察改动所带来的各个阶段所发生的改变,这就需要时刻了解各个阶段的输出。要了解各个阶段的输出...

2018-07-12 13:56:13 1364 0

原创 LLVM每日谈之外篇 HelloLLVM上海活动之行

  昨天(7月1日)参加了HelloLLVM上海的活动,是HelloLLVM组织的第二次线下活动。第一次活动是6月初在北京举行的,我因故没能参加。这次能参加这个活动,还要特别感谢HelloLLVM的创始人吴伟先生。能让我有机会参与到HelloLLVM上海活动之中,并和大家做一个简单的分享。 ...

2018-07-02 15:18:02 617 2

原创 LLVM每日谈之外篇 工具链到底能火多久

本篇不同于之前所有的篇章,与技术毫无关系,纯属扯淡。算是反思一下业态。中兴被制裁事件之后,忽然之间,花开一地。大大小小的公司都开始在芯片上发力,实干的、吹牛的、投机的、蹭热点的、套钱的等等,不一而足。真的是什么类型都有,似乎马上这个行业就繁荣起来了,至少是表面上繁荣了起来。给了很多非专业人士莫大的...

2018-07-02 14:04:47 802 2

原创 LLVM每日谈之三十三 LLVM的DEBUG宏改名了

根据rL332240提交的申请,LLVM的DEBUG宏将更名为LLVM_DEBUG,原因是为了避免其他工程出现问题。在转换期间,DEBUG宏作为别名依然可以使用。这个更改虽然谈不上什么有技术含量的更新,只是一个更名,但是这个更名却对我们日常的使用影响较大。毕竟,debug宏使用的频率还是很高的。具...

2018-07-02 13:58:41 461 0

原创 LLVM每日谈之三十二 C++ Insights

C++ Insights是一个基于clang的工具,它主要提供代码到代码的转换。它的目标是让屏幕背后发生一些事情变得可见,让我们更好的理解编译器是怎么运作的。列举两个例子,大家就很明白的知道这个工具到底做了什么了。官方例子一:Source:#include <cstdio&g...

2018-07-02 13:56:20 667 0

提示
确定要删除当前文章?
取消 删除