llvm SDNode 介绍
指令选择 1. 数据结构与内存布局问题是指针指向关系是前向还是后向?后向,其实是双向。operands指向def。但是SDUse其实是个双向链表。 2. SelectionDAG 结构介绍 作用域:block level 以这段IR为例:(参考^1) 1234then: %y = add i32 %a, 5 %z = mul i32 %y, 3 br label %join 内存占用有点过于大了。。。[[llvm_SDNode_draw.excalidraw]] ...
2025.05.10
llvm Value Use User内存布局
起源:工作里用c搓了个ir库,ssa形式,但在实现方面遇到了问题(replaceAllUsesWith) 。所以看看工业级的llvm怎么处理的 参考llvm18版本源码 我的设计: 12345678910111213141516171819202122enum ClassID{ BasicBlock, Instruction, ...};struct Value{ char* name; ClassID id; ...
2025.05.09
dead code elimination介绍
死代码消除在ssa上比较好实现,根据use-def chain传播如果只是运算指令,且没有users,就是dead的指令。其实就是一个use->def的传播 1234567891011121314151617181920212223worklist = {}for bb in func{ for inst in bb { if (inst not in worklist) worklist ...
2025.03.22
dom tree算法介绍
domtree构建算法 1. domtree概念介绍 Dom(b): A node n in the CFG dominates b if n lies on every path from the entry node of the CFG to b.即Dom(b)是一个集合,根据定义 b in Dom(b) immediate dominator: b’s immediate dominator is the node n in Dom(b) which is clo ...
2025.03.22
1234