周一:struct.str_global_point_x 变量名字信息在debug的metadata中,较复杂没找到子变量名,暂放。构思构建树完成struct global拆解方案,存放str及其所有子变量,树类基本函数初步完成,明天将分解的global str存入,写好ppt总结,并完善struct类。
周二:继续完善struct类结构和函数调用,明天对getelementptr通过树node进行替换。
周三:构建树的struct global拆解基本完成,可以将局部变量和全局变量全部分解,在替换过程中,当offset为phi得来的value时,无法进行替换。
周四:汇报讨论,struct在构建树完毕后,方案变为一层一层去拆,查资料如何创建memcpy指令,memcpy的创建需通过callInst创建。
周五:(1)将global一次性分解完修改为一层层拆解;(2)跑个小case通过树节点创建出下一层memcpy指令,下一步规划memcpy拆解。
周日:将第一层的global的memcpy拆解为子变量的memcpy,通过global的tree去替换global所有相关指令。
周一:通过global的User替换其相关指令时报错,User中的value值需要删除,还需要把连接的边也删除,替换全局变量和局部变量成功。将所写的代码进行全篇注释和问题整理,计划假期后的下一步工作。
10-10:通过循环遍历IR进行处理,可将struct一层一层全部替换。测试部分case。写季度报告。
10-11:讨论将循环遍历IR转移为循环遍历有向无环图,将与struct相关的instruction全放于图中,构建有向无环图和拓扑排序。
10-14周一:确定利用DAG拓扑排序处理IR的算法流程,讨论具体流程细节,思考创建DAG class成员和成员函数。
周二:利用IR中的structType构建出DAG图,每个vertex包含structType和pre_vertex、next_vertex(表示vertex连接方向),编写DAG class成员和成员函数。
周三:完成TopologicalSort处理顺序,并验证处理vertex顺序正确,遍历IR,将Struct Value存入与其Type一致的vertex。
周四:通过DAG vertex间父子关系,找到入度为零的StructType中的values,分解为subValues,将分解出为subStructType的values,存入Type一致的vertex。
周五、周六:完成value的user为getelementptr,用分解出的subValues替换与values相关的getelementptr指令,开会讨论处理memcpy处理方法讨论,将vertex中所有value全部分解先,再替换。注意user list的连接关系。
end10-20