死代码消除

在ssa上比较好实现,根据use-def chain传播
如果只是运算指令,且没有users,就是dead的指令。
其实就是一个use->def的传播

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

worklist = {}
for bb in func{
for inst in bb {
if (inst not in worklist)
worklist.push(inst)
}
}

while(!worklist.empty()) {
inst = worklist.pop()
if( inst is pure && inst.num_users()== 0 ){
// dead instruction
for(op in inst.operands()){
inst.remove(op)

if class(op) == instruction and isDead(op) {
worklist.insert(op)
}
}
}
}