感觉图片太多太麻烦了,想尽量在text格式下写。
web图形处理上面有几种解决方案:
用ascii绘制,有点太累了
markdown提供的mermaid和graphviz。mermaid简单但是功能有限,graphviz功能强大。
TikZ,更加专业,https://github.com/kisonecat/tikzjax https://github.com/jhuix-js/tikzjax
base64嵌入,体积会比较大。
关键是文本表示是在框架下已经生成为stati
...
2026.03.18
构建llvm
以win11+git bash为例
配置
1234567891011set -xexport COMPILER_DIR=D:/LLVM/bin/ # 替换为一个已有compiler的pathexport CC=$COMPILER_DIR/clang.exeexport CXX=$COMPILER_DIR/clang++.exeexport RC_COMPILER=$LLVM_DIR/llvm-rc.exemkdir -p buildmkdir -p inst
...
2026.03.15
LLVM 指令调度有作用在SelectionDAG和MachineInstr的指令调度。并将调度策略和调度框架分离。
结构
SDep代表一个依赖关系
SUnit代表一个基本单元。
ScheduleDAG,调度DAG的基类。https://llvm.org/doxygen/classllvm_1_1ScheduleDAG.htmluse-def
ScheduleDAGSDNodes作用在SelectionDAG上的。主要在SelectionDAGISel::CodeGenAn
...
2026.03.10
寄存器分配简介
前置技术 Liveness Analysis, Live Interval, reaching defineLiveness Analysis经典的数据流分析, 后向(倒序)分析.
1234live_out[b] = ⋃ (live_in[s] for s ∈ succ(b))live_in[b] = use[b] ∪ (live_out[b] − def[b])
live intervalllvm依赖这个,就是 def-use 分段.
reachin
...
2026.02.20
循环,重要性不必多说。
llvm与循环相关的优化有很多:
loop unroll and jam : 循环展开+ 合并
loop unroll
SCEV
loop invariant code motion
loop interchange
loop rotation
loop splitting
loop fusion
loop unswitching
loop vectorization….
从非结构化的CFG中识别loop:
识别循环迭代变量
Loop 定
...
2025.10.10
phinode的创建和消除
1. SSA构建算法
依赖:
dom tree
DF
llvm ir基础知识
对以下c代码
1234int foo(int a){ int b = a; return b;}
clang会生成类似这种IR
12345678define i32 @foo(i32 %a){ %pa = alloc i32 %pb = alloc i32 store %a, %pa store %a, %pb %b1 = load
...
2025.09.20
稀疏条件常量传播
核心是格,从def到use的传播。
有Top,Const,Bottom三类,Const其实有无穷个状态。状态转移就是从Top 到 Const/Bottom
然后定义状态转移函数meet:
meet(any, Top) = any
meet(any, Bottom) = Bottom
meet(Ci, Cj) = Ci if i==j
meet(Ci, Cj) = Bottom if i!
...
2025.09.20
Scalar Evolution, 标量演进,简单理解在循环中,随着循环迭代,其值是如何变化的。
定义例子:
12345for(int i=0;i<10;i++){ int a = i*10; int b = i*i + a;}
对这个循环来说,i = 0, 1, 2, …, 9a = 0, 10, 20, …, 90b = 0, 11, 24, …, 165
对于更复杂情况呢?所以需要一种代数来表
...
2025.09.20
0. 写这个文档的原因因为最近遇到几个问题
在llvm ir上,如何分析一个global variable有没有在程序中变化?
在llvm ir上,如何能分析出来指针的address space (stack, heap, global variable).?
前提条件简点,假设我们在full lto模式下,不考虑类,但有函数指针。
因为设计到指针+function call,所以我们需要一个全局分析。如果我想构建一个call graph,就遇到几个问题
递归函数的处理
...
2025.09.10
clangd+vscode在win11上经常崩溃,记录下可能的解决方案。
配置文件冲突
用户和工作区的clangd配置冲突了。用一个就行
inlay hints
可以尝试关掉( 不一定有用)
clangd配置
12345--log=verbose--background-index=0-j=1--clang-tidy--header-insertion=never
设置--query-driver详见https://github.com/clangd/cla
...
2025.08.01