![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LLVM
文章平均质量分 60
清钟沁桐
for study
展开
-
llvm 编译器学习笔记之二 -- 调试篇
llvm 下构建配置小技巧1、使能-DLLVM_CCACHE_BUILD=ON ,需要本地ccache工具的支持llvm 下gdb的小技巧1、llvm编写了自己的一些实用的类stl库,没有配置过的gdb没法直观的显示这些数据结构的内容 在llvm仓下 ./utils/gdb-scripts/prettyprinters.py, 在~/.gdbinit中添加source ${path}/prettyprinters.py,就可以较为直观的显示了2、假如发现clang编译下的stl也无法显示,可..原创 2020-10-11 17:03:14 · 4034 阅读 · 1 评论 -
LLVM 编译器学习笔记之三十九-- 注释规则采用Doxygen语法
Doxygen: Doxygenis used generate documentation from source code, 对应的语法规则https://www.doxygen.nl/manual/commands.html#cmdp,常见应用1、给函数参数换一种字体显示格式,使用\p原创 2022-01-06 10:06:57 · 295 阅读 · 0 评论 -
LLVM 编译器学习笔记之三十八-- STL接口使用
1、set 底层结构是红黑树,有去重特点,参考C++ STL中set是如何判断两个结构体相等的? - 知乎 SetVector 同时维护Vector及Set来保证访问顺序的唯一性,比如对象是一个指针是,如果只是使用SmallPtrSet则因为对象分配的指针地址可能存在差异,导致对象的遍历不唯一。如果用SetVector,则因为插入时会同时往Vector及Set中插入,而Vector是有序的,因此迭代器遍历Vector能保证遍历顺序的一致性,参考LLVM: LLVM: llvm::SmallSet...原创 2021-12-27 09:41:55 · 783 阅读 · 0 评论 -
LLVM 编译器学习笔记之三十七-- 寄存器分配Register Allocator
1原创 2021-12-25 10:58:25 · 3321 阅读 · 0 评论 -
LLVM 编译器学习笔记之三十六-- 指令调度Instruction scheduling
1、参考Instruction scheduling in LLVM - 知乎,在中后端均存在指令调度指令调度模型2、在llvm12->llvm14 中Machine Instruction Scheduler有个patch增强了load/store指令的合并,也就是指令调度不仅仅只是改变指令的顺序,该优化类似gcc中的store-merge优化.....................................................................原创 2021-12-01 12:05:17 · 3629 阅读 · 0 评论 -
LLVM 编译器学习笔记之三十四-- SSA
1、llvm中有种特殊的lcssa (Loop Close SSa), 参考LLVM Loop Terminology (and Canonical Forms) — LLVM 13 documentation一个lcssa的形式是PHI中只有一个结点,因此是冗余的,只是方便循环的优化,%add673.lcssa = phi i32 [ %add673, %for.body639 ]...原创 2021-11-24 18:36:00 · 1004 阅读 · 0 评论 -
LLVM 编译器学习笔记之三十二-- 调试信息的维护
1、readelf -w *.o 可以看到类似的信息,对应的含义原创 2021-11-11 09:25:47 · 297 阅读 · 0 评论 -
LLVM 编译器学习笔记之三十 -- 基本快BasicBlock的操作
1、SplitBlock封装了splitBasciBlock,内部调用splitBasciBlock,但是他们的功能是不等价的 a)splitBasciBlock 纯粹的将一个BB,按照指定的iterator I拆分成两个BB(无条件跳转)原创 2021-10-09 11:33:24 · 918 阅读 · 0 评论 -
LLVM 编译器学习笔记之二十九 -- 控制流程CFG
1、查看控制流图的方法a) 对于中间表达的 *.ll 文件opt -dot-cfg before-indvars.lldot -Tpng .p.dot -o tmp.pngb) 在调试过程中,可以使用F.viewCFG()接口先获取相应的*.dot文件,之后雷同 参考:自动向量化调试过程查看CFG流图_CanaanLeeN的博客-CSDN博客...原创 2021-09-15 11:36:26 · 1171 阅读 · 0 评论 -
LLVM 编译器学习笔记之二十八 -- 经常被误解的GetElementPtr(GEP)指令
参考https://llvm.liuxfe.com/docs/get-element-ptr转载 2021-08-20 10:07:43 · 1535 阅读 · 0 评论 -
LLVM 编译器学习笔记之二十七 -- EarlyCSE, PRE, LICM, hoist, Sink
1、__attribute__((__aligned__)) 的正确使用方法,参考https://stackoverflow.com/questions/10951039/specifying-64-bit-alignment,注意并不是写在结构体定义的上一行struct foo { int a, b, c;} __attribute__((__aligned__(8))); // aligned to 8-byte (64-bit) boundary.........原创 2021-08-11 11:52:20 · 1414 阅读 · 1 评论 -
LLVM 编译器学习笔记之十三 -- Options
1、在原创 2021-04-12 15:16:04 · 318 阅读 · 0 评论 -
llvm 介绍有用的网站
LLVM笔记(7) - 指令的side effecthttps://www.cnblogs.com/Five100Miles/p/12081848.htmlLLVM每日谈之十八 GEP Instruction的几点总结https://www.cnblogs.com/ainima/p/6331942.html经常被误解的GetElementPtr(GEP)指令https://llvm.liuxfe.com/docs/get-element-ptr.html...原创 2021-04-08 11:15:18 · 390 阅读 · 0 评论 -
fortran 语法学习之三
1、classic flang中sub_types[0]的含义要结合date type 本身一起决定的(flang1是这样设计的,用链表的形式,能串其来很多东西,比如一个数组,里面还有元素,那么就可以用sub来指向)比如:[100*[10 Xi8]] * 的sub_types[0]就是[100*[10 Xi8]].........原创 2021-04-06 10:26:25 · 1062 阅读 · 1 评论 -
LLVM 编译器学习笔记之十二 -- pass manager
1、测试验证发现Unable to schedule pass问题的解决方法:将相应的依赖pass添加到后面即可,具体原因未知a) 重复添加时以第一个AU.addRequired为准b)AU.addPreserved是一个独立的属性,不能解决问题..................原创 2021-03-22 14:42:13 · 1145 阅读 · 0 评论 -
gdb 在c++中调试技巧,获取数据类型
1、使能指针类型显示特性 -- set p obj on使能后效果使能前效果2、使用接口getType()及getTypeID()原创 2021-03-17 09:03:24 · 622 阅读 · 0 评论 -
逆向工程-- 二进制文件转换为 LLVM IR llvm-mctoll
参考https://blog.csdn.net/dongjideyu/article/details/107951272?utm_medium=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.controlllvm-mctoll 是微软的静态 translator,可静态地(A转载 2021-02-02 19:19:53 · 973 阅读 · 0 评论 -
ffi 库使用demo--之二
相比https://mp.csdn.net/editor/html/112862401,这里模拟调用了llvm 中offload模块中__tgt_rtl_run_target_region接口(其中封装了ffi_call调用)1、文件/tmp/tmpfile_wxuHGp为设备侧offload代码片段对应的动态库,在offload流程中通过#include <cassert>#include <cstring>#include <stdio.h>#incl原创 2021-01-20 22:02:12 · 716 阅读 · 0 评论