llvm开发心得

server/2024/10/17 21:40:02/

llvm使用心得

常用llvm命令

# 将.c编译为bitcode
clang -emit-llvm -c test.c# 将bitcode反汇编为ir
llvm-dis test.bc# 将ir转成bitcode
llvm-as test.ll# 用lli执行bitcode或ir
lli test.bc
lli test.ll# llc将bitcode或ir转成目标汇编
llc test.bc
llc test.ll# as将汇编转成目标文件
as -o test.o test.s# ld将目标文件链接成可执行文件
ld test.o -lc -o test_exe

定义字符串

llvm里,字符串有个类似字符串常量池的东西,里面定义了代表字符串内容的global var:

@".str0" = private unnamed_addr constant [2 x i8] c"a\00", align 1

使用字符串的时候,用getelementptr命令引用:

define i8* @"run"()
{
entry:%"__t0" = getelementptr [2 x i8], [2 x i8]* @".str0", i32 0, i32 0ret i8* %"__t0"
}

注意后面2个indice=0的参数,第一个0表示,getelementptr从[2 x i8]*里取得第一个也是唯一一个元素(索引为0),其类型是[2 x i8],第二个0表示再取这个char array的第一个元素的地址,相当于C里的&arr[0],返回的自然是i8*。
可见,getelementptr是很强大的,它可以取得一个嵌套结构里的任意成员。

basic block

llvm ir的构建,基于的是basic block,指令是放在basic block里。basic block正是编译原理里的概念:除了最后一条指令外,不包含条件或无条件跳转的指令集合。

经验总结

  • 使用IR构建DSL的过程,就像用汇编开发程序的过程
  • 如果不清楚IR如何表达,可用C写一段简单代码,再用clang -emit-llvm -S转成ir后看一下人家怎么翻译的。

http://www.ppmy.cn/server/131726.html

相关文章

鸿蒙--下拉刷新+上拉加载

概述 Refresh组件支持下拉刷新,包裹list组件,下拉事件中更新列表 这里我们需要提前了解一下 @Builder装饰器 的基本用法 ArkUI提供了一种轻量的UI元素复用机制@Builder,该自定义组件内部UI结构固定,仅与使用方进行数据传递,开发者可以将重复使用的UI元素抽象成一个方法…

Android SELinux——安全策略(三)

SELinux 通过严格的访问控制机制增强了 Linux 系统的安全性。它通过标签和安全策略来控制进程和文件的访问权限,从而保护系统免受未经授权的访问和攻击。 一、策略介绍 1、主要组件 安全标签(Security Labels):每个文件、目录、进程等都有一个安全标签。标签包含类型(Ty…

使用激光跟踪仪提升码垛机器人精度

标题1.背景 码垛机器人是一种用于工业自动化的机器人,专门设计用来将物品按照一定的顺序和结构堆叠起来,通常用于仓库、物流中心和生产线上,它们可以自动执行重复的、高强度的搬运和堆垛任务。 图1 码垛机器人 传统调整码垛机器人的方法&a…

JavaEE: 深入解析HTTP协议的奥秘(2)

文章目录 HTTP认识 URLURL encode 介绍 认识 "方法"(method)GETPOST其他方法 HTTP JavaEE: 深入解析HTTP协议的奥秘(1) 书接上文~ 认识 URL 平时我们俗称的"网址"其实就是说的 URL .(唯一资源定位符) URL 不是 HTTP 专属的,很多协议都会用到. 其实除了 …

基于springboot+小程序的智慧物流管理系统(物流1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于springboot小程序的智慧物流管理系统实现了管理员、司机及用户。 1、管理员实现了司机管理、用户管理、车辆管理、商品管理、物流信息管理、基础数据管理、论坛管理、公告信息管理等。…

Ubuntu20.04,编译安装BCC

https://github.com/iovisor/bcc/blob/master/INSTALL.md 一、内核配置 In general, to use these features, a Linux kernel version 4.1 or newer is required. In addition, the kernel should have been compiled with the following flags set: CONFIG_BPFy CONFIG_BP…

机器学习_线性回归_岭回归算法预测波士顿房价代码实现(机器学习全流程)(附带数据集housingData下载链接, 长期有效)

# 1.导入外部数据集HousingData import pandas as pd boston_datapd.read_csv(r"C:\Users\鹰\Desktop\ML_Set\HousingData.csv")# 数据基本描述 print(boston_data.head()) print(boston_data.describe()) print(boston_data.shape)# 2.数据基本处理-缺失值处理,特征…

使用verilog设计实现的数字滤波器(低通、高通、带通)及其仿真

以下是一个简单的使用Verilog设计数字滤波器(以有限脉冲响应(FIR)滤波器为例,实现低通、高通、带通滤波器)的基本步骤和代码框架: 一、FIR滤波器原理 FIR滤波器的输出 y [ n ] y[n] y[n] 是输入信号