当前位置: 首页 > news >正文

专业做学校网站的公司/腾讯云1元域名

专业做学校网站的公司,腾讯云1元域名,网站建设空间主机的选择,网站对联代码div文章目录一. 说明二. 重要命令2.1 C语言llvm clang命令2.2 rust 转IR的指令三.生成利用LLVM-IR转CFG图可视化四. LLVM-IR语言的标识符和解释一. 说明 二. 重要命令 2.1 C语言llvm clang命令 llvm基本命令 c到IR clang -emit-llvm -S multiply.c -o multiply.ll clang -cc1 …

文章目录

  • 一. 说明
  • 二. 重要命令
    • 2.1 C语言llvm clang命令
    • 2.2 rust 转IR的指令
  • 三.生成利用LLVM-IR转CFG图可视化
  • 四. LLVM-IR语言的标识符和解释

一. 说明

二. 重要命令

2.1 C语言llvm clang命令

llvm基本命令

  • c到IR
    clang -emit-llvm -S multiply.c -o multiply.ll
    clang -cc1 -emit-llvm testfile.c -o testfile.ll
  • IR到bitcode
    llvm-as test.ll –o test.bc
  • bitcode到汇编
    llc test.bc –o test.s
    clang -S test.bc -o test.s –fomit-frame-pointer
  • bitcode到IR
    llvm-dis test.bc –o test.ll
  • opt执行转换Pass
opt –passname input.ll –o output.ll
adce:入侵式无用代码消除。 
bb-vectorize:基本块向量化。 
constprop:简单常量传播。 
dce:无用代码消除。 
deadargelim:无用参数消除。 
globaldce:无用全局变量消除。 
globalopt:全局变量优化。 
gvn:全局变量编号。 
inline:函数内联。 
instcombine:冗余指令合并。 
licm:循环常量代码外提。 
loop-unswitch:循环外提。 
loweratomic:原子内建函数lowering。 
lowerinvoke:invode指令lowering,以支持不稳定的代码生成器。 
lowerswitch:switch指令lowering。 
mem2reg:内存访问优化。
memcpyopt:MemCpy优化。 
simplifycfg:简化CFG。 
sink:代码提升。 
tailcallelim:尾调用消除。
  • 链接两个bitcode
    llvm-link test1.bc test2.bc –o output.bc
  • 执行bitcode文件
    lli output.bc
  • C转bitcode
    clang -O3 -emit-llvm hello.c -c -o hello.bc

2.2 rust 转IR的指令

  • 利用cargo项目管理生成ir
    cargo rustc -- --emit=llvm-ir
  • 直接对rs文件生成对应的ir
    rustc 文件名 --emit=llvm-ir

三.生成利用LLVM-IR转CFG图可视化

这里 通过optllvm自带的passllvm-irll文件先转化为每一个函数对应的dot文件, 而这个dot文件其实就是一个图的格式, 然后再根据绘图工具graphvizopt生成的dot文件转化为可视化的图
LLVM基础(IR简介&CFG图生成&可视化)

# 生成cdfg图可视化 *表示文件名称
# sudo apt-get install graphviz # 需要安装的依赖
clang *.c -emit-llvm -S -o *.ll # 生成ll文件
opt -dot-cfg *.ll # 对ll文件解析成一个一个函数, 转为CDF
opt -dot-callgraph *.ll # 
# 画图命令 https://blog.csdn.net/qq_27885505/article/details/80366525
dot -Tpng -o 1.png *.dot # 将dot文件生成图
dot -Tpng -o 2.png *callgraph.dot

四. LLVM-IR语言的标识符和解释

Identifiers 标识符@ 全局% 局部后接字符串      命名量      @name %name无符号数字  未命名量    @42   %42类型系统void                                空类型<type> *                            指针类型<returntype> (<parameter list>)     函数类型< <# elements> x <elementtype> >    向量类型[<# elements> x <elementtype>]      数组类型{ <type list> }                     普通结构体类型<{ <type list> }>                   打包结构体类型metadata                            元数据类型label                               标签类型token                               词元类型类型系统(例子)void                   空i32 *                  指针i32 (i32)              函数<5 x i32>              向量[5 x i32]              数组{ i32, i32, i32 }      普通结构体<{ i32, i32, i32 }>    打包结构体元数据; 未命名元数据节点; 用于被命名元数据引用!0 = !{!"zero"}!1 = !{!"one"}!2 = !{!"two"}; 命名元数据!name = !{!0, !1, !2}!name --- !0|-- !1|-- !2模块层次内联汇编module asm "内联汇编代码"Target Tripletarget triple = "x86_64-amd64-freebsd"First Class Types 第一类型Single Value Types 单值类型只在寄存器里头有效Integer Type 整数类型iN ;N为比特数 (通用描述)i1 一个比特整数i32 32为整数Floating-Point Types 浮点类型half      - 16位浮点值float     - 32位浮点值double    - 64位浮点值fp128     - 128位浮点值x86_fp80  - 80位浮点值ppc_fp128 - 128位浮点值模块结构程序由模块组成,每个模块都是输入程序的翻译单元。Hello, world 模块; 定义字符串常量作为全局常量@.str = private unnamed_addr constant [13 x i8] c"hello world\0A\00"; 外部声明的 puts 函数declare i32 @puts(i8* nocapture) nounwind; main 函数的定义define i32 @main() {   ; i32()*; [13 x i8] 转换到 i8...%cast210 = getelementptr [13 x i8], [13 x i8]* @.str, i64 0, i64 0; 调用 puts 函数,将字符串写入 stdoutcall i32 @puts(i8* %cast210)ret i32 0}; 命名元信息!0 = !{i32 42, null, !"string"}!foo = !{!0}指令参考
=========Terminator Instructions指示当前块完成后,执行哪个块。终结指令典型的产生一个 void 值:他们影响控制流,而不是值。(invoke指令是一个例外)ret            返回br             二元条件分支/无条件转移switch         多条件分支indirectbr    invoke         普通/带异常调用resume         抛出异常?catchswitch    捕获异常catchret   cleanupret   unreachable    不可到达(无语义)Binary Operationsadd    加fadd   浮点加sub    减fsub   浮点减mul    乘fmul   浮点乘udiv   无符号整数除sdib   带符号整数除fdiv   浮点除urem   无符号整数求余srem   带符号整数求余frem   浮点数求余运算\类型    无符号整数   带符号整数   浮点数+               add             fadd-               sub             fsub*               mul             fmul/       udiv        sdiv        fdiv%       urem        srem        fremBitwise Binary Operationsshl    左移lshr   逻辑右移ashr   算数右移and    与or     或xor    异或Vector Operationsextractelement 取出元素insertelement  插入元素shufflevector Aggregate Operationsextractvalue  取出值insertvalue   插入值Memory Access and Addressing Operationsalloca           分配内存load             从内存加载store            储存到内存fencecmpxchgatomicrmw        自动修改内存getelementptr    获取 aggregate(集合) 数据结构的子成员地址Coversion Operations这个类型为转换指令(强制类型转换|铸造casting)都取一个单一运算对象和一个类型。对运算对象提供一系列位转换。trunc .. to            截断转换zext .. to             零扩展转换sext .. to             符号位扩展转换fptrunc .. to          浮点截断转换fpext .. to            浮点扩展fptoui .. to           浮点转无符号整数fptosi .. to           浮点转带符号整数uitofp .. to           无符号整数转浮点sitofp .. to           带符号整数转浮点ptrtoint .. to         指针转整数inttoptr .. to         整数转指针bitcast .. to          位模式转换(重新解释,不改变任何二进制位)addrepacecast .. to    地址空间转换Other Operationsicmp          整数比较fcmp          浮点数比较phi           φ 节点select        条件值选择call          简单函数调用va_arg        可变参数landingpadcatchpadcleanuppad
http://www.lbrq.cn/news/1244125.html

相关文章:

  • 容桂网站制作咨询/北京网站seo
  • 站酷网官网入口/厦门seo排名优化公司
  • 在线教育网站建设方案/北大青鸟培训机构靠谱吗
  • 南宁企业建站模板/百度怎么找人工客服
  • 宁波网站建设联系方法/深圳纯手工seo
  • 建筑证书兼职网站/南宁seo优化
  • 行唐县做网站电话/seo网络推广企业
  • 网站维护英文/seo是什么的缩写
  • 高校网站如何建设论文/南宁百度关键词推广
  • 宝安做棋牌网站建设/关键词优化案例
  • 国土资源网站建设方案/百度免费推广怎么操作
  • 开发网站监控推荐/手机如何制作自己的网站
  • 域名费用和网站服务器费用是同样的吗/广东: 确保科学精准高效推进疫情
  • 温州网站系统开发/网站建设平台哪家好
  • asp网站开发的实训报告/零基础学什么技术好
  • 哪些网站可以做公司制度/网站建设需要多少钱?
  • 贵州专业网站建设公司/优秀网站设计赏析
  • 一个人在线观看免费高清视频动漫/小红书seo排名帝搜软件
  • 帝国手机网站怎么做/软文发布系统
  • 河北永生建筑工程网站/百度网盘怎么提取别人资源
  • 福州做推广有哪些网站/网络软文怎么写
  • 老外做汉字网站/比较经典的营销案例
  • 深圳网站建设联系方式/谷歌搜索引擎
  • 手机网站特效/营销公司排行
  • 南宁网站建设公司seo优化/线上培训平台
  • dw做网站链接数据库/哪里有整站优化
  • 门户网站制作平台/广州营销课程培训班
  • 一起做英语作业网站/常州百度seo排名
  • 绍兴网站建设设计/建站服务
  • 杭州大型网站建设/公司网络营销策划书
  • Python 项目路径配置完全指南
  • golang的函数
  • spring boot + mybatis + mysql 只有一个实体类的demo
  • springcloud04——网关gateway、熔断器 sentinel
  • Text2SQL 智能问答系统开发-预定义模板(二)
  • android-PMS-创建新用户流程