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 一些常用指令相关推荐

  1. 编译器 LLVM Clang原理与实战 制作自己的编译器 source-to-source 源代码转换 编译遍 compile pass 代码插桩

    编译器 LLVM Clang原理与实战 参考1 clang LLVM CMU 教案 深入剖析-iOS-编译-Clang-LLVM LLVM_proj LLVM编程索引 llvm源码浏览带跳转 llvm ...

  2. LLVM Clang前端编译与调试

    LLVM Clang前端编译与调试 iOS 关于编译 o 一.Objective-C 编译过程 o 为什么需要重新编译? o 编译步骤 o 二.编译步骤的详细说明 o 1.预处理 o 2.编译 o 词 ...

  3. 在windows下使用llvm+clang

    clang是FreeBSD和Mac下C/C++语言的默认编译器.如果你在苹果下做过开发,那么应该对它很熟悉. 这套工具链有很多优点: 代码很新,架构优良. 错误信息更友好. 静态检查功能更强大. 版权 ...

  4. 【转】ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍

    转自:ARM 之七 主流编译器(armcc.iar.gcc for arm.LLVM(clang))详细介绍_itexp-CSDN博客_armcc 必备   在讲解各编译器之前,必须先了解一下以下文件 ...

  5. Debug常用指令和DOSBox使用步骤

    Debug是Dos系统中著名的调试程序,也可以运行在Windows系统实模下. 优点: 使用Debug程序,可以查看CPU各种寄存器的内容,内存的情况,并且在机器指令级跟踪程序的运行. DosBox: ...

  6. 编译器 llvm clang 源码转换示例

    编译器 llvm clang 源码转换示例 从git获取llvm项目的源码方式: git clone https://github.com/llvm/llvm-project.git 下载源码后,进入 ...

  7. ubuntu中常用指令

    常用指令 清空命令行 Ctrl+L Conda 创建虚拟环境 conda create -n 虚拟环境名称 python=3.7.10 查看虚拟环境列表 conda info --envs 激活虚拟环 ...

  8. anaconda常用指令,更新查看添加下载源等

    记录一下anaconda命令行常用指令,方便查阅,会不定期更新~ 检查conda版本 conda --version Anaconda更新 # conda conda update conda # a ...

  9. 在Linux上编译LLVM/Clang 8.0.0等全部源代码

    2019独角兽企业重金招聘Python工程师标准>>> 本教程使用的操作系统是Ubuntu Linux 18.04.2 LTS版本,编译器是GCC 6.5.0(不用新版的原因是某些代 ...

最新文章

  1. C#.Net的常见面试试题 [转]
  2. 天下苦同行评审久矣,要不我们把它废除掉?
  3. springcloud分布式事务_Springcloud 分布式事务集成Naco Seata
  4. 如何固化预训练模型的参数
  5. WinCE文件目录定制
  6. 博士申请 | 宾州州立大学 (PSU) 招收机器学习/对抗学习方向全奖博士
  7. 计算机专业自然辩证法期末论文,清华大学自然辩证法-期末论文.docx
  8. 泛型那点儿事儿 泛型概述 简单样例代码
  9. 抗锯齿 文字_PS之使用文字工具
  10. Vue extend 学习
  11. 07树莓派下的浏览器
  12. javascript Control flow(控制语句)
  13. Python Tricks(二)—— 牛顿法求解平方根(最大整数)
  14. 【code vs】 2780 ZZWYYQWZHZ
  15. 计算机网络 | 无盘工作站的建立
  16. 基于STM32读取W25Q64(模拟SPI)
  17. 中南大学2021计算机专硕复试分数线,中南大学2021年硕士研究生复试基本分数线...
  18. 字蛛的用法以及遇到的问题
  19. s一般怎么称呼自己的m_“老公、老婆、亲爱的”?快来围观明星怎么称呼自己的另一半!...
  20. 更换SSD系统盘-PE重装系统

热门文章

  1. ξσ Dicky's GuestBook σξ
  2. Python爬虫实战四 | 盘搜搜1.2-网盘搜索神器开源
  3. MTBD 电影市场分析
  4. 苹果手机打字换行怎么换_苹果id怎么换
  5. C64+ cache资料集(更新中)
  6. 用户名片 2:Nginx 与图片深度解析
  7. 简述对linux系统的认识,对Linux的初步认识
  8. oracle ebs r12 nls,Oracle EBS R12 - 如何通过命令上传XML/BI Publisher数据定义文件和模板文件...
  9. 格斗机器人制造图纸_一种新型格斗机器人的制作方法
  10. python爬虫淘宝实例-python 淘宝爬虫示例源码(抓取天猫数据)