- 博客(78)
- 收藏
- 关注
原创 【C/C++】VSCode 插件支持
https://blog.csdn.net/m0_38036750/article/details/138889172
2024-07-09 01:05:38 428
翻译 【LLVM学习系列】(三)llvm新手教程(Toby Ho)P12-P13
在这种设置中,我们不是在追求终极的优化体验,但我们也希望在可能的情况下尽早地捕获到简单和快速的东西。这意味着,给定一系列连续的 FunctionPass,它将在第一个函数上执行所有 FunctionPass,然后在第二个函数上执行所有 FunctionPasses,依此类推,直到整个程序通过了 passes。举个具体的例子,LLVM支持“整个模块”passes,它们尽可能地查看尽可能大的代码体(通常是整个文件,但如果在链接时运行,这可能是整个程序的一个实质性部分)。然而,遗憾的是,它并不能生成出色的代码。
2024-04-30 15:11:54 197
翻译 【LLVM学习系列】(二)llvm新手教程(Toby Ho)P7-P11
本章将向您展示如何将第二章构建的抽象语法树转换为 LLVM IR。这将为您介绍 LLVM 的一些工作原理,并演示其使用的简易性。构建词法分析器和解析器比生成 LLVM IR 代码要复杂得多。请注意:本章及以后的代码需要 LLVM 3.7 或更高版本。LLVM 3.6 及之前的版本不兼容。另外,请注意您需要使用与您的 LLVM 发行版匹配的本教程版本:如果您正在使用官方 LLVM 发行版,请使用与您的发行版或 llvm.org 发布页面上提供的文档版本相匹配的教程版本。本文仍然沿用主页的教程。
2024-04-28 23:31:40 156
原创 【vscode环境配置系列】vscode远程debug配置
launch.json: (注意,debug时可以选择gdb/lldb,lldb需要安装额外插件)安装C/C++, C/C++ Runner。
2024-04-28 23:27:12 809
翻译 【LLVM学习系列】(一)llvm新手教程 (Toby Ho)P1-P6
程序的抽象语法树(AST)以一种易于编译器的后续阶段(例如代码生成)解释的方式捕获了其行为。我们基本上希望语言中的每个结构都有一个对象,并且抽象语法树应该与语言密切相关。在Kaleidoscope中,我们有表达式、原型和函数对象。fill:#333;color:#333;color:#333;fill:none;
2024-03-28 17:44:27 252
翻译 [学习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 1455
原创 [学习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 812
原创 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 1077
原创 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 224
原创 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 801
原创 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 1734
原创 spec2017
spec2017spec2017是什么spec2017是什么SPEC CPU2017基准测试及其运行规则的目的是进一步促进公平和客观的CPU基准测试。这些规则有助于确保公布的结果具有意义,与其他结果相当,并且可重复。SPEC认为社区受益于客观的一系列测试,这些测试可作为共同参考.SPEC以源代码的形式提供CPU2017基准测试,除非在某些非常有限的情况下,测试人员不允许修改。SPEC CPU...
2018-10-12 14:59:46 11794 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 6813 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 275
原创 Kaleidoscope: Tutrial Introduction and the Lexer
Kaleidoscope: Tutorial Introduction and the LexerBasic LanguageKaleidoscopeThe Lexer 词法分析器Basic LanguageKaleidoscope使用Kaleidoscope作为玩具语言,我们可以定义函数,使用条件,数学等.唯一的数据类型是64位浮点类型(C语言中称为&quot;double&quot;),并且不需要类型声明...
2018-09-19 16:48:09 395
原创 知识点 pick
主要积累一些遇到的小知识点:svn是什么 SVN是近年来非常优秀的版本管理工具,与CSV管理工具一样,SVN是一个跨平台开元版本控制系统,但是SVN与众不同的是,SVN会备份并记录每个文件每一次的修改更新变动。这样我们可以把任意一个时间点档案恢复到想要的某一个旧版本,当然也可以直接浏览指定文件的更新历史记录。 SVN是一个集中式数据管理中心,存在一个中央版本库,所有开发人员所使用的代码都...
2018-08-13 19:42:09 269
原创 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 <stdio.h> ^~~~~~~~~1 error generated.查找发现,clang -cc1选项默认在自己的目...
2018-06-08 20:20:56 4897
原创 删除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 515
原创 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 2129
原创 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 6082
原创 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 360
原创 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 865
原创 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 1912
原创 大数对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 756
原创 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 1001
原创 特殊乘法
解决模数问题,除了一般数学方法外,可以直接以字符数组形式存储,省好多代码;/*#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 285
原创 二叉树的操作
已知二叉树的前序和中序遍历,求后序遍历。涉及到二叉树的一系列操作,当我输入EOF时程序没结束很郁闷,问了大神才知道,结束符要 control+Z 组合输出,get~第一次自己主动写注释,感觉自己是个超级不称职的程序员。跟接口老师啥都没学会,唯独知道了匈牙利命名法。以后要规范。不以规矩不成方圆。代码如下:#include#includeusing namespace std;s
2016-06-05 19:07:02 303
原创 哈夫曼树
今天才知道,哈夫曼树的权值就等于所有非叶子节点的和。求哈夫曼树要用小顶堆。代码实现:#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 403 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 257
原创 括号匹配问题
栈的小应用/*)(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 264
原创 贪心算法之活动安排电视节目收看等
使用贪心算法安排电视节目收看,求最大。它和以前学过的活动安排一样的。#include #includeusing namespace std;struct show{ int startTime; int endTime; bool operator <(const show &a)const{ return endTime<
2016-06-01 10:02:35 1055
原创 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 389
原创 循环代替递归
帮同学解决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 1337
原创 二分查找法降低时间复杂度
二分查找,将时间复杂度由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 557
原创 叠框之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 278
原创 数组下标偏移
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 614
原创 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 240
原创 struct在c与c++里的区别
以前好多问题都没有注意,c和c++混在一起用,出了问题解决了就不管了。所以一直忽略了这个问题。struct作为类的一种特例,是用来自定义数据结构的,在编程的过程中是很有用的。C和C++的主要区别是:一个结构标记声明后,C语言必须在结构标记前加上struct才能作为结构类型名,而C++语言中,结构标记可以直接作为结构类型名使用。此外,结构在C++中被作为类的一种特例,并且在结构中,数据成员和成员
2016-05-13 09:16:54 374
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人