自定义博客皮肤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的博客

不忘初心,方得始终。

  • 博客(266)
  • 资源 (7)
  • 收藏
  • 关注

原创 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 1103

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

前文Clang的RISCV支持1介绍了Clang中有关RISCV的代码主要集中在三个地方:Driver部分、Basic部分和CodeGen部分,并且对Basic部分和CodeGen部分的内容和关系进行了介绍,只有Driver部分因为涉及到了ToolChain、Tool和Command(job)等概念体系而未进行深入介绍。在介绍完ToolChain、Tool和Command(job)等概念和调用关系之后,我们在本文再对Clang的RISCV支持的Driver部分进行深入分析。一、Driver部分涉及到

2020-05-21 10:48:03 888

原创 LLVM每日谈之五十七 TableGen

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

2020-05-03 23:48:20 897

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

陆陆续续收集了一些课程,主要是编译器和静态分析方面的,在这里分享给大家,也给自己做个资料存档。国外的一些课程:1、Stanford编译器课程系列CS143:CS143: CompilersCS243:CS243 - Advanced CompilersCS343:CS 343这个系列课程,共有三门课。其中,CS143讲的是编译器的基础知识;CS142讲的是程序分析和优化技术...

2020-03-08 20:29:59 3182 3

原创 写在36岁的生日

25 Feb 2020今天是我36岁的生日。 回望过去,似乎是不知不觉就来到了这个有点尴尬的年纪,这个被年轻程序员认为要被淘汰的年纪。 但是真正到了这个年纪,却发现,现在更能静下心来做点东西,也更喜欢踏实的做点东西。32岁的时候,做到了技术总监,真正脱离了第一线,终于不担心自己的中年危机了。 每天就是开会、考察、写公文、谈合作,搞的自己疲惫不堪。 偶尔有时间的时候,自己读读代码,读读书,就...

2020-03-04 11:11:50 1275 3

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

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

2019-10-24 08:53:52 2395 2

原创 RV32I控制转移指令的偏移量计算问题

RV32I的控制转移指令可以分为无条件跳转(unconditional jumps)和条件分支(conditional branches)。其中,无条件跳转(unconditional jumps)包含JAL和JALR;条件分支(conditional branches)包含BEQ、BNE、BLT、BLTU、BGE和BGEU。这些控制转移指令会根据指令所带的立即数(imm)去计算跳转地址的偏移量,而这个偏移量的计算在这里有两种方式。第一种偏移量计算方式:实际偏移量 = 立即数(imm)* 2除了JA

2021-06-03 10:25:07 2239

原创 RV32G下lui/auipc和addi结合加载立即数时的补值问题

一、问题描述与解决思路在32位下,lui/auipc通常用来取一个32位数的高20位,并且是带符号操作,将最高位默认为符号位。那么,取完最高位20位之后,再取低12位的时候,会面临一个补值问题。假设这个32位内容为正数,lui/auipc取高20位的时候本身没问题,但是后续再对剩余的12位数字进行操作的时候,如果第11位是1,那么这一位会被当成是符号位,就将一个12位的正数变成了一个11位的负数。这种情况之下,lui/aupic和addi的合并操作的计算结果就不对了,就变成了高20位减去了一个低11

2021-06-03 10:23:10 1509

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

Clang的Tool最终会调用ConstructJob来为Compilation添加job。根据源码中的注释,Tool中保存的是一个特定编译工具的信息(Tool - Information on a specific compilation tool.,clang/include/clang/Driver/Tool.h)。而job则是通过Command类去进行具体实现,同时还有一个相关类JobList。本文将分析Command和JobList的实现,以及其相关的调用关系。一、Command和JobLis

2020-05-21 10:46:32 569

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

Tool也是Clang的Driver库里的一个类,它是具体编译工具的信息,代码注释中的原文是:Tool - Information on a specific compilation tool.(clang/include/clang/Driver/Tool.h)本文将对Tool的实现以及其相关调用关系做一个简单的分析。一、Tool的实现和继承关系1、Tool的定义和实现都位于clang/include/clang/Driver/Tool.h和clang/lib/Driver/Tool.cpp之中。

2020-05-21 10:44:28 671

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

ToolChain是Clang的Driver库里的一个类,它是用来获取具体某个平台的工具集合,代码注释中的原文是:ToolChain - Access to tools for a single platform.(clang/include/clang/Driver/ToolChain.h)这里涉及到的Tool也是Clang的Driver库里的一个类,它是具体编译工具的信息,代码注释中的原文是:Tool - Information on a specific compilation tool.(clang

2020-05-21 10:42:40 1090

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

一、Clang/LLVM对RISCV的支持概况目前已经有一系列的C类编译器和库开始支持RISCV,这其中包括了GCC和Clang/LLVM。从RISCV的官方网站,可以获取目前的支持状态。具体内容如下:网址:https://riscv.org/software-status/#c-compilers-and-libraries该列表中还包含了所支持的License和Maintainers。其中,Clang/LLVM的Maintainers是Alex Bradbury,这位大神是LLVMWEE

2020-05-21 10:39:01 1604 2

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

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

2020-03-14 11:29:53 4539

原创 深入研究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 7470 1

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

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

2020-01-11 12:03:21 4725

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

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

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

转载 [技术论坛]6月22日HelloLLVM上海线下聚会

HelloLLVM和HelloGCC社区将在 2019年6月22日(周六)在上海聚会。聚会内容包含(但不限于):MLIR 是什么,要学么? 近期的编译领域的八卦 TVM Stack 前景如何?现在入还来得及么? 如何吸引新人参与GCC开发? 闪电演讲(现场排队)时间暂定为6月22日周六下午3点到6点,地点暂定为张江高科地铁站旁的 vπ 咖啡。本次活动采取报名制,感兴趣的同学和...

2019-06-15 21:59:24 1283

原创 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 2129

原创 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 1550 1

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

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

2019-06-15 21:56:16 1463

原创 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 1351

转载 Modern source-to-source transformation with Clang and libTooling

原文地址:https://eli.thegreenplace.net/2014/05/01/modern-source-to-source-transformation-with-clang-and-libtooling/I couple of years ago I published a blog post namedBasic source-to-source transformati...

2019-05-19 18:06:04 432

转载 [技术论坛] 5月25日 HelloLLVM 北京线下:我们又双叒叕聚了

HelloLLVM 与 HelloGCC 社区计划于 2019年5月25日举办线下聚会。本次聚会的内容有:丰富的茶歇(感谢金牌赞助商重德智能。硬广:他们提供工具链外包服务,有需求的话可以到时候在聚会现场直接找他们聊) 话题讨论:「大神们又在搞事情系列」之 MLIR 是什么,要学么? 技术分享:深度学习中的注意力模型如何应用于漏洞挖掘 话题讨论:TVM Stack 前景如何?现在入还来得及...

2019-05-19 12:18:33 858

原创 LLVM每日谈之五十一 TargetMachine

TargetMachine及其子类:前文介绍了TargetMachine类,我们这篇文章简单分析下TargetMachine类及其子类。TargetMachine类位于include/llvm/Target/TargetMachine.h文件之中。TargetMachine类作为获取目标机器相关信息的入口,作为目标机器类的父类,并不是直接被具体平台的TargetMachine类所继承的,...

2019-05-19 12:17:29 1197

原创 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 653

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

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

2019-05-19 12:15:37 541

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

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

2019-05-19 12:14:44 565

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

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

2019-05-13 23:25:45 1114

原创 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 3494

原创 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 1057

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

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

2019-04-29 12:07:20 1178

原创 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 866

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

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

2019-04-26 17:38:04 1113

翻译 LLVM每日谈之四十一 组装一个完整的工具链

写在前面的话:这是一篇LLVM的官方文档,英文文档地址:Assembling a Complete Toolchain之前读文档的时候,陆陆续续的翻译过一些,周末花了点时间把这个文章整理了出来。因为都是随手翻的,翻译完了之后,也不愿意再花时间去斟酌,所以有不少用词都不那么严谨。LLVM的官方文档很详细,有什么需要最好是直接读官方的英文文档。这个自己随便翻译的文档放出来,是希望能给有些不...

2019-01-13 21:54:32 3382 2

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

最近看到了UFMG的DCC888课程。在这里分享给大家,有需要的可以自己看看,个人感觉非常不错。DCC888课程,主要是关于程序分析和优化的,其主要的内容如下图所示:本身这门课程的内容,就是编译器相关课程。这门课程在后半部分,有一个关于LLVM的子课程,非常适合入门的学习,其内容主要如下:基本上覆盖了LLVM刚入门会需要用到的几个方面。而且,因为是个小课程,相关的基础介绍以及连...

2019-01-11 11:45:06 1729

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

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

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

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

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

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

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

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

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

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

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

2018-07-24 10:40:56 4566 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 2584

优亿Android特刊】第二十三期:寻找“冰淇淋三明治”的痕迹

优亿Android特刊】第二十三期:寻找“冰淇淋三明治”的痕迹,介绍了冰激凌三明治的新增的一些特征。

2012-04-19

Android编程指引

《Android Programming Tutorials》第三版,英文版本,面向Android3.0.一个很不错的电子书,清晰度也高。虽然现在Android已经出到4.0了,但是基本的东西还都是一样的。

2012-04-17

eoe-15期 Android Multimedia

eoe的电子杂志,介绍了Android多媒体部分的内容。

2012-04-17

eoe-20期 Android 内存管理

eoe的电子杂志,介绍了Andorid的内存管理。

2012-04-17

eoe-13期 Android源码结构分析

eoe Android杂志第13期,介绍Android源码的结构。主要是2.X的版本。

2012-04-17

C语言深度解剖(很不错的小册子)

一本很不错的小册子,不适合C语言初学者,但是对C语言学习者提高很有帮助。

2010-01-31

absolute C++(EN)

经典书籍,英文原版,非常清晰。适合于学生的一本C++学习书籍。

2010-01-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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