自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 收藏
  • 关注

翻译 llvm新手教程 (Toby Ho)

程序的抽象语法树(AST)以一种易于编译器的后续阶段(例如代码生成)解释的方式捕获了其行为。我们基本上希望语言中的每个结构都有一个对象,并且抽象语法树应该与语言密切相关。在Kaleidoscope中,我们有表达式、原型和函数对象。fill:#333;color:#333;color:#333;fill:none;

2024-03-28 17:44:27 43

翻译 [学习cpu0](二) Cpu0后端初始化

前言该笔记学习自台湾的陳鍾樞编写的《Tutorial: Creating an LLVM Backend for the Cpu0 Architecture》,书中讲解地非常细致,没有涉及很复杂的功能,可以作为入门材料。同时参考了github上基于llvm8.0和9.0复现的版本,我基于9.0学习的代码也同步在gitee.1. Tablegen描述文件共五个td:Cpu0.td 包含了其他几个td文件,同时定义了一个基于Target类的子类Cpu0;def Cpu0 : Target { /

2022-03-01 11:13:10 1303

原创 [学习cpu0] (一) 编译llvm-cpu0

[学习cpu0] (一) 编译llvm-cpu0从github上下载好9.0的版本,参考P2Tree实现,将其替换9.0现有后端$LLVM_Project/llvm, 报错如下(可能c++标准不同,设置11未起效果):但是9.0原始版本可以编译过,因此diff两个LLVM_Project/llvm下的config, cmake, txt相关的内容,命令如下: find . -name "*make*" | xargs -I {} diff {} ../llvm-cpu0/{} find . -n

2022-02-27 22:23:51 734

原创 linux下安装ipython和pytorch

Linux下miniconda安装ipython1. 安装condaminiconda官网wget https://repo.anaconda.com/miniconda/Miniconda3-py39_4.10.3-Linux-x86_64.shbash Miniconda3-py39_4.10.3-Linux-x86_64.sh2. 添加环境变量vim ~/.bashrc//修改PATH export PATH=xxx/miniconda/bin/:$PATH添加后,重新打开一

2022-01-19 13:25:43 1013

转载 vscode 两次跳转远程

转载:https://www.jianshu.com/p/15be231faeb5

2021-12-31 10:49:44 496

原创 c语言里单链表的创建与增减

单链表的创建与元素的增减操作/** * Single Way List * print all list after do a operator. * task1: * create: create a List which data is: 1, 4, 6, 2, 10, 11, 2 * add: add 3, 4, 1 to head of list (-> 3, 4,...

2020-03-17 14:36:36 195

原创 gcc 8.2.0中新建一个pass

在gcc 8.2.0中新建一个pass参考的是GCC Resource Center,里面有对gcc的讲解slice。在/gcc8.2.0/gcc目录下添加一个文件test.c,然后创建一个主函数,这里主函数我暂时没加,只建了一个空pass。在test.c中创建一个pass的数据结构:这里有个问题是,gcc 8.2.0里已经不是结构体存储pass信息了,变成了类。比如tree-pass...

2020-01-15 15:09:31 673

原创 gcc 8.2.0 AST学习笔记

test.c:#include <stdlib.h>typedef struct node{ int size; float value; char a;}Node;int main(){ Node* n ; n =(Node *)malloc(sizeof(Node)); n->size = sizeof(Node); n->va...

2020-01-13 00:00:30 1606

原创 spec2017

spec2017spec2017是什么spec2017是什么SPEC CPU2017基准测试及其运行规则的目的是进一步促进公平和客观的CPU基准测试。这些规则有助于确保公布的结果具有意义,与其他结果相当,并且可重复。SPEC认为社区受益于客观的一系列测试,这些测试可作为共同参考.SPEC以源代码的形式提供CPU2017基准测试,除非在某些非常有限的情况下,测试人员不允许修改。SPEC CPU...

2018-10-12 14:59:46 11412 8

原创 Ubuntu下gcc 8.2.0源码安装

gcc 8.2.0 源码安装下载源码并解压:wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.2.0/gcc-8.2.0.tar.gztar xzvf gcc-8.2.0.tar.gzcd gcc-8.2.0/获取gcc的gmp、mpc、mpfr包, 相应最新版的wget http://ftp.tsukuba...

2018-10-11 21:55:06 6687 2

原创 Kaleidoscope: Implementing a Parser and AST

Implementing a Parser and ASTIntroductionASTIntroduction本章将使用上一章中的词法分析器喂Kaleidoscope构建完整的解析器, 然后定义并构建一个Abstract Syntax Tree (抽象语法树).解析器使用递归下降解析和操作符优先解析的组合来解析Kaleidoscope.我们先从解析器的输出,AST开始.AST程序的AS...

2018-09-21 21:48:20 232

原创 Kaleidoscope: Tutrial Introduction and the Lexer

Kaleidoscope: Tutorial Introduction and the LexerBasic LanguageKaleidoscopeThe Lexer 词法分析器Basic LanguageKaleidoscope使用Kaleidoscope作为玩具语言,我们可以定义函数,使用条件,数学等.唯一的数据类型是64位浮点类型(C语言中称为&amp;quot;double&amp;quot;),并且不需要类型声明...

2018-09-19 16:48:09 361

原创 知识点 pick

主要积累一些遇到的小知识点:svn是什么 SVN是近年来非常优秀的版本管理工具,与CSV管理工具一样,SVN是一个跨平台开元版本控制系统,但是SVN与众不同的是,SVN会备份并记录每个文件每一次的修改更新变动。这样我们可以把任意一个时间点档案恢复到想要的某一个旧版本,当然也可以直接浏览指定文件的更新历史记录。 SVN是一个集中式数据管理中心,存在一个中央版本库,所有开发人员所使用的代码都...

2018-08-13 19:42:09 233

原创 clang -cc1找不到头文件

$./clang -cc1 -emit-pth test/test.h -o test/test.h.pthtest/test.h:1:10: fatal error: 'stdio.h' file not found#include &lt;stdio.h&gt; ^~~~~~~~~1 error generated.查找发现,clang -cc1选项默认在自己的目...

2018-06-08 20:20:56 4834

原创 删除llvm backend中mips部分指令

some tricks1.1 grep search在当前目录下地柜查找grep -riln xxxinsert键可以直接粘贴1.2 cmake 使用LLVM_TRAGE_TO_BUILD cmake时,可以指定-DLLVM_TARGETS_TO_BUILD=”X86;Mips”只生成指定平台的后端1.3 在线的API接口LLVM classes MDNod...

2018-05-26 17:59:54 473

原创 clang cross compile for mips

安装libc交叉编译库 需要三种交叉编译的库: -libc指定平台的cpp标准库 -binutils指定平台的内置函数库 -gcc指定平台的gcc编译链接环境,用于生成目标平台的环境,这里用clang代替gcc,次库未用到sudo apt-get install libc6-dev-mips-cross libc6-mips-crosssudo apt-get install bin...

2018-05-25 14:12:55 1996

原创 qemu安装及与宿主机通信

qemu安装sudo apt-get install qemu qemu-useruser模式联网 默认IP为10.0.2.15,只能虚拟机连接宿主机,默认宿主机的地址位客户机所在网络的第2个IP地址,10.0.2.2不能直接连到外网,也不能宿主机连接虚拟机.root登录qemu,ping 10.0.2.2scp username@ip(宿主机ip):/home/usernam...

2018-05-25 10:20:53 5802

原创 LLVM Tools Usage

-emit-llvm -c : clang生成汇编文件 -emit-llvm -s : clang生成字节码文件clang -emit-llvm -c main.c -o main.bcclang -emit-llvm –S -c main.c -o main.ll //生成人类可读的汇编可以分别生成目标文件, 然后编译时链接:llc -filetype=obj mai...

2018-05-22 20:12:42 320

原创 Writing An LLVM Backend

Preliminaries在lib/Target/下创建你的目标,如lib/Target/MIps; 创建CMakeLIsts.txt;Target Machine继承LLVMTargetMachine实现MipsTargetMachine.h MipsTargetMachine.cpp,需要包含get*INfo的方法;Register定义一个寄存器类:// ...

2018-05-19 21:22:01 815

原创 LLVM Code Generator

LLVM Language Reference Manual网上有很多翻译的很好的博客,这里直接借鉴过来学习The LLVM Target-Independent Code Generatorllvm目标无关的代码生成包含6个部分: include/llvm/Target:抽象目标描述接口,机器的各个方面重要特性的描述 include/llvm/CodeGen:用来表示目标的...

2018-05-16 17:41:57 1840

原创 LLVM and Clang install from sources

llvm and clang install

2018-05-10 10:35:14 392

原创 大数对0-9求余

参加天津大学夏令营,遇到此题,没做出来。。。回来坤神给我科普,果然,冰冻三尺非一日之寒,需要日积月累下功夫。。#include#includeint main(){ int n; int tmp; while(scanf("%d",&n)!=EOF){ int i; for(i=0;i<n;i++){ scanf("%d",&tmp); int p=tmp;

2016-07-12 10:26:15 714

原创 long long 输入

long long,输入输出部分:在windows中用 "%I64d" 格式输入输出,而在linux中用 "%lld" 格式输入输出#includeint main(){ long long a,b; int m; while(scanf("%d",&m)!=EOF){ if(m==0) break; scanf("%I64d%I64d"

2016-06-28 13:12:37 756

原创 特殊乘法

解决模数问题,除了一般数学方法外,可以直接以字符数组形式存储,省好多代码;/*#includeint buf1[30],buf2[30];int sum;int size1,size2;int main(){ int a,b; while(scanf("%d%d",&a,&b)!=EOF){ while(a!=0){

2016-06-07 09:24:43 259

原创 二叉树的操作

已知二叉树的前序和中序遍历,求后序遍历。涉及到二叉树的一系列操作,当我输入EOF时程序没结束很郁闷,问了大神才知道,结束符要 control+Z 组合输出,get~第一次自己主动写注释,感觉自己是个超级不称职的程序员。跟接口老师啥都没学会,唯独知道了匈牙利命名法。以后要规范。不以规矩不成方圆。代码如下:#include#includeusing namespace std;s

2016-06-05 19:07:02 276

原创 哈夫曼树

今天才知道,哈夫曼树的权值就等于所有非叶子节点的和。求哈夫曼树要用小顶堆。代码实现:#include#includeusing namespace std;priority_queue,greater> Q;//定义小顶堆int main(){ int n; while(scanf("%d",&n)!=EOF){ while(!Q.empty())

2016-06-05 15:57:05 370 1

原创 简单计算器

感觉这个过程好长,估计如果真的机试这题,我可能做不出来。。。还有点小问题,也不想找了。。。。我这个不合格的程序员。。。#include#includeusing namespace std;char str[101];int mat[][5]={ 1,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,1,1,0,0, 1,1

2016-06-03 10:33:20 239

原创 括号匹配问题

栈的小应用/*)(rttyy())sss)(/*#include#include#include#includeusing namespace std;int main(){ int i; char str[101],Mark[101]; while(scanf("%s",str) != EOF){ stack S;

2016-06-02 09:47:35 246

原创 贪心算法之活动安排电视节目收看等

使用贪心算法安排电视节目收看,求最大。它和以前学过的活动安排一样的。#include #includeusing namespace std;struct show{ int startTime; int endTime; bool operator <(const show &a)const{ return endTime<

2016-06-01 10:02:35 1012

原创 FatMouse'trade

贪心算法小应用~代码:#include #includeusing namespace std;struct trade{ double javaBean; double catFood; double value; bool operator <(const trade &a)const{ r

2016-06-01 09:28:17 366

原创 循环代替递归

帮同学解决c小问题,本来以为非要用递归,结果发现循环就足够了。。。大概就是s=1+(1+2^0.5)+(1+2^0.5+3^0.5)...+(1+2^0.5+...+n……0.5).一个双重循环就搞定了。觉着c小程序还挺有意思。#include #includeint main(){ int n,i,j; float s=1,sum; printf("请输

2016-05-31 16:42:57 1298

原创 二分查找法降低时间复杂度

二分查找,将时间复杂度由O(n*m)降为O(n*logn+m*logn)。再次注意,字符串的输入输出,。。找了半天的bug。。。。#include #include#include using namespace std;struct student{ char no[5]; char name[20]; int age; bool operato

2016-05-31 09:52:36 536

原创 叠框之scanf空格

找了半天bug,才发现scanf里没有空格,输入的时候我却加了空格。觉着今天这个叠框循环控制有点难,还是没怎么看懂。继续看几遍。。#includeint main(){ int buf[82][82]; char a,b; int n; bool flag=true; while(scanf("%d %c %c",&n,&a,&b

2016-05-29 16:16:51 254

原创 数组下标偏移

Hash应用2#include#define OFFSET 500000int Hash[1000001];int main(){ int m,n; while(scanf("%d%d",&n,&m)!=EOF){ int i; for(i=-500000;i<=500000;i++) Hash

2016-05-28 11:45:23 575

原创 Hash小应用

对于图片中的题目,很自然想到了用数组来存取,但是hash表真的超好用!/*#include using namespace std;int s[1005];int main(){    int n,g,cnt;    while(cin>>n&&n!=0){                cnt=0;                for(int

2016-05-13 09:49:20 220

原创 struct在c与c++里的区别

以前好多问题都没有注意,c和c++混在一起用,出了问题解决了就不管了。所以一直忽略了这个问题。struct作为类的一种特例,是用来自定义数据结构的,在编程的过程中是很有用的。C和C++的主要区别是:一个结构标记声明后,C语言必须在结构标记前加上struct才能作为结构类型名,而C++语言中,结构标记可以直接作为结构类型名使用。此外,结构在C++中被作为类的一种特例,并且在结构中,数据成员和成员

2016-05-13 09:16:54 347

原创 最长字段和

所以多刷题才能多见识,慢慢积累,冰冻三尺非一日之寒,真的是这样。还是要多注意细节。#include #include int main(){ long a; long long max,t; int n; while(scanf("%d",&n)!=EOF){ t=0; max = LL

2016-05-07 09:57:41 776

原创 斐波那契图形

interesting~~#include int F(int n){ int s; if(n==0||n==1) s=n; else s=F(n-2)+F(n-1); return s;}int main(){ int n; while(scanf("%d",&n)!=EOF){ in

2016-05-05 10:34:06 1456

原创 Coincidence

虽然做过这一题,简直崩溃,交大的题目可真难。。。这次是算长度,还简单些。。。#include#includechar a[105];char b[105];int c[105][105];void lcs_len();int main(){     while(scanf("%s%s",&a,&b)!=EOF){   lcs_len(

2016-05-05 09:46:46 517

原创 old bill

英文题目只要仔细读题,并不是很难。自己还是要多做题,代码可以优化很多。#include #include int main(){    int n,x,y,z,sum,a,b;    while(scanf("%d",&n)!=EOF){                int i,j;                int max=0;       

2016-05-03 09:19:06 690

空空如也

空空如也

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

TA关注的人

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