llvm
文章平均质量分 85
qiusi0225
这个作者很懒,什么都没留下…
展开
-
【LLVM学习系列】(三)llvm新手教程(Toby Ho)P12-P13
在这种设置中,我们不是在追求终极的优化体验,但我们也希望在可能的情况下尽早地捕获到简单和快速的东西。这意味着,给定一系列连续的 FunctionPass,它将在第一个函数上执行所有 FunctionPass,然后在第二个函数上执行所有 FunctionPasses,依此类推,直到整个程序通过了 passes。举个具体的例子,LLVM支持“整个模块”passes,它们尽可能地查看尽可能大的代码体(通常是整个文件,但如果在链接时运行,这可能是整个程序的一个实质性部分)。然而,遗憾的是,它并不能生成出色的代码。翻译 2024-04-30 15:11:54 · 157 阅读 · 0 评论 -
【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 · 126 阅读 · 0 评论 -
【LLVM学习系列】(一)llvm新手教程 (Toby Ho)P1-P6
程序的抽象语法树(AST)以一种易于编译器的后续阶段(例如代码生成)解释的方式捕获了其行为。我们基本上希望语言中的每个结构都有一个对象,并且抽象语法树应该与语言密切相关。在Kaleidoscope中,我们有表达式、原型和函数对象。fill:#333;color:#333;color:#333;fill:none;翻译 2024-03-28 17:44:27 · 225 阅读 · 0 评论 -
[学习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 · 1423 阅读 · 0 评论 -
[学习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 · 792 阅读 · 0 评论 -
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 · 259 阅读 · 0 评论 -
Kaleidoscope: Tutrial Introduction and the Lexer
Kaleidoscope: Tutorial Introduction and the LexerBasic LanguageKaleidoscopeThe Lexer 词法分析器Basic LanguageKaleidoscope使用Kaleidoscope作为玩具语言,我们可以定义函数,使用条件,数学等.唯一的数据类型是64位浮点类型(C语言中称为"double"),并且不需要类型声明...原创 2018-09-19 16:48:09 · 381 阅读 · 0 评论 -
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 · 4881 阅读 · 0 评论 -
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 · 1884 阅读 · 0 评论 -
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 · 346 阅读 · 0 评论 -
删除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 · 499 阅读 · 0 评论 -
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 · 2097 阅读 · 0 评论 -
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 · 6023 阅读 · 0 评论 -
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 · 844 阅读 · 0 评论 -
LLVM and Clang install from sources
llvm and clang install原创 2018-05-10 10:35:14 · 405 阅读 · 0 评论