CompilerHIT / SysYRust

move project to
https://gitlab.eduxiji.net/202318123201313/compiler2023/-/tree/master/
2 stars 0 forks source link

dead-code-elimination #2

Open Sakura1609 opened 1 year ago

Sakura1609 commented 1 year ago

死代码消除样例实际上完成了一次(0+ ... + loopCount)%134209537的计算 image 内层循环完成了i * 60。外层循环对i/60后再累加,取模,取模运算也可以提取到循环之外

jzLooning commented 1 year ago

死代码消除样例实际上完成了一次(0+ ... + loopCount)%134209537的计算 image 内层循环完成了i * 60。外层循环对i/60后再累加,取模,取模运算也可以提取到循环之外

对于这个问题,其实我会尝试将这个内层循环展开,然后经过函数内联再死代码消除和冗余的store删除的话,是可以做到很好的效果的

jzLooning commented 1 year ago

func里有意义的内容就是对global的赋值,在内联之后就会变成一串的这样的代码:

global = i;
tmp = tmp + global;
global = i;
tmp = tmp + global;
global = i;
tmp = tmp + global;
........

然后就需要在删除冗余的store的时候识别到这样的冗余

jzLooning commented 1 year ago

最好的优化效果就会把这个内层循环变成一条全局变量的赋值和60条加法指令

answerer2930 commented 1 year ago

func里有意义的内容就是对global的赋值,在内联之后就会变成一串的这样的代码:

global = i;
tmp = tmp + global;
global = i;
tmp = tmp + global;
global = i;
tmp = tmp + global;
........

然后就需要在删除冗余的store的时候识别到这样的冗余

已经做了