llvm clang esl 一些常用指令
1、clang -emit-llvm -c test.c
2、llvm-link x.bc y.bc z.bc … -o final.bc
3、llvm-dis x.bc && gvim x.bc 多级指针、STL、类
lli hw.ll
gdb /home/zhgu/workspace/llvm-6.0.0/build-debug/bin/clang-6.0
clang -O -emit-llvm -c struct.c -o struct.bc
clang -S -fobjc-arc struct.bc -o struct.s
clang -c struct.s -o struct.o
llc -stop-before=machine-cp struct.ll -o struct.mir
llc llvm编译器,将.bc编译成.o clang a.o.bc -o struct
llc a.o.bc -o hello.s gcc hello.s -o hello
Optimizer opt;
opt.reset();
opt.setOutputFileName(“before_replace_double_gep.bc”);
opt.setNoOutput(false);
opt.optimize(*module_);
opt.reset();
opt.setOutputFileName(“after_replace_double_gep.bc”);
opt.setNoOutput(false);
opt.optimize(*module_);
esl 编译
workspace/esl_0.1_2019/esl_0.1/
./build/make_pro
make -j12
gdb …/bin/Linux_64/esl-debug
1、 全局标识符(函数,全局变量)以“@”字符开头。 本地标识符(注册名称,类型)以’%'字符开头。
2、'getelementptr’指令用于获取聚合数据结构的子元素的地址。 它仅执行地址计算,不访问内存。
= getelementptr inbounds , * {, [inrange] }*
3、LLVM-IR的变量有三种,通过前缀@或者%的形式区分,其中@表示全局变量,%表示局部变量:
%或者@接数字,表示的是临时变量,在一个函数中,从0开始编号使用。比如%0,%1,。。
%或者@接字符串,表示有名字的变量,可以任意使用;
第三类就是立即数
4\Add nsw是有符号的相加
5\Getelementptr inbounds即使获得数组对应元素的指针
6\align : align 的意思是“对齐”
“对齐”的意义是:若一个结构中含有一个int,一个char,一个int则他应该占用4*3=12字节,虽然char本身只占用一个字节的空间,但由于要向4“对齐”所以其占用内存空间仍为4(根据大端小端分别存储)
7\Metadata 在 IR 文件中是以“记录”的形式的组织的。每一条 Metadata 记录都单独占有一行。Metadata 记录可以看成“结构体变量”。它可以包含整形数据、字符串数据或者其他 Metada 数据。
8\LLVM的函数分为declare和definition两种。如上所示,declare指的是实现在当前翻译单元外的函数,definition反之
p *(static_castllvm::PointerType*(constExpr->getType())->getElementType())
Type * val_op_type = cast(val_op->getType())->getElementType();
val_op->getType()->getPointerElementType()->getTypeID()
llvm-as a.ll (a.ll->a.bc)
gdb …/bin/Linux_64/esl-debug
llvm clang esl 一些常用指令相关推荐
- 编译器 LLVM Clang原理与实战 制作自己的编译器 source-to-source 源代码转换 编译遍 compile pass 代码插桩
编译器 LLVM Clang原理与实战 参考1 clang LLVM CMU 教案 深入剖析-iOS-编译-Clang-LLVM LLVM_proj LLVM编程索引 llvm源码浏览带跳转 llvm ...
- LLVM Clang前端编译与调试
LLVM Clang前端编译与调试 iOS 关于编译 o 一.Objective-C 编译过程 o 为什么需要重新编译? o 编译步骤 o 二.编译步骤的详细说明 o 1.预处理 o 2.编译 o 词 ...
- 在windows下使用llvm+clang
clang是FreeBSD和Mac下C/C++语言的默认编译器.如果你在苹果下做过开发,那么应该对它很熟悉. 这套工具链有很多优点: 代码很新,架构优良. 错误信息更友好. 静态检查功能更强大. 版权 ...
- 【转】ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍
转自:ARM 之七 主流编译器(armcc.iar.gcc for arm.LLVM(clang))详细介绍_itexp-CSDN博客_armcc 必备 在讲解各编译器之前,必须先了解一下以下文件 ...
- Debug常用指令和DOSBox使用步骤
Debug是Dos系统中著名的调试程序,也可以运行在Windows系统实模下. 优点: 使用Debug程序,可以查看CPU各种寄存器的内容,内存的情况,并且在机器指令级跟踪程序的运行. DosBox: ...
- 编译器 llvm clang 源码转换示例
编译器 llvm clang 源码转换示例 从git获取llvm项目的源码方式: git clone https://github.com/llvm/llvm-project.git 下载源码后,进入 ...
- ubuntu中常用指令
常用指令 清空命令行 Ctrl+L Conda 创建虚拟环境 conda create -n 虚拟环境名称 python=3.7.10 查看虚拟环境列表 conda info --envs 激活虚拟环 ...
- anaconda常用指令,更新查看添加下载源等
记录一下anaconda命令行常用指令,方便查阅,会不定期更新~ 检查conda版本 conda --version Anaconda更新 # conda conda update conda # a ...
- 在Linux上编译LLVM/Clang 8.0.0等全部源代码
2019独角兽企业重金招聘Python工程师标准>>> 本教程使用的操作系统是Ubuntu Linux 18.04.2 LTS版本,编译器是GCC 6.5.0(不用新版的原因是某些代 ...
最新文章
- C#.Net的常见面试试题 [转]
- 天下苦同行评审久矣,要不我们把它废除掉?
- springcloud分布式事务_Springcloud 分布式事务集成Naco Seata
- 如何固化预训练模型的参数
- WinCE文件目录定制
- 博士申请 | 宾州州立大学 (PSU) 招收机器学习/对抗学习方向全奖博士
- 计算机专业自然辩证法期末论文,清华大学自然辩证法-期末论文.docx
- 泛型那点儿事儿 泛型概述 简单样例代码
- 抗锯齿 文字_PS之使用文字工具
- Vue extend 学习
- 07树莓派下的浏览器
- javascript Control flow(控制语句)
- Python Tricks(二)—— 牛顿法求解平方根(最大整数)
- 【code vs】 2780 ZZWYYQWZHZ
- 计算机网络 | 无盘工作站的建立
- 基于STM32读取W25Q64(模拟SPI)
- 中南大学2021计算机专硕复试分数线,中南大学2021年硕士研究生复试基本分数线...
- 字蛛的用法以及遇到的问题
- s一般怎么称呼自己的m_“老公、老婆、亲爱的”?快来围观明星怎么称呼自己的另一半!...
- 更换SSD系统盘-PE重装系统
热门文章
- ξσ Dicky's GuestBook σξ
- Python爬虫实战四 | 盘搜搜1.2-网盘搜索神器开源
- MTBD 电影市场分析
- 苹果手机打字换行怎么换_苹果id怎么换
- C64+ cache资料集(更新中)
- 用户名片 2:Nginx 与图片深度解析
- 简述对linux系统的认识,对Linux的初步认识
- oracle ebs r12 nls,Oracle EBS R12 - 如何通过命令上传XML/BI Publisher数据定义文件和模板文件...
- 格斗机器人制造图纸_一种新型格斗机器人的制作方法
- python爬虫淘宝实例-python 淘宝爬虫示例源码(抓取天猫数据)