后端优化 指令合并
指令合并主要合并相邻的,use-def 链上 相邻的指令。
讲多条可以合并的指令合并成一条指令,去除多余指令。
1, 常量折叠和计算。
a = 100;
b = 100;
c = a + b;
d = f * c;
====>
d = f * 200;
2,去除无效move指令
a = b;
c = a;
=====>
c = b;
3, 去除相同的无效的load, 需要一个指示内存状态的memop
res1 = Ioad op1 {mem} op3 memop memstat1;
res2 = load op1 var op2 offset IMM op3 memop memstat1
4, 去除无效的memstore
memstat1 I_store Mem{ip} res1 memstat0 // INSN1
// rm INSNI when memstat1 only used by INSN2
memstat2 I_store Mem{ip} res2 memstat1 // INSN2