2-16~3.13工作报告

2-17:梳理rm_struct流程框架理,将所有process函数仔细分析一遍,为函数添加注释,总结函数处理流程表。

2-18:当把一个struct变量store给另一个struct变量时,先将struct分解,对分解后的变量BitConcatenate处理。测试当函数参数分解为子变量x,y时,函数内部用BitConcatenate合并x、y变量跑通。下一步测试多个变量多次BitConcatenate和struct传值传指针参数变化情况。

2-19:函数参数struct分解ok,但函数体内部存在局部struct变量,当函数体中存在局部变量struct,对函数体进行copy时,该函数体局部变量未存入DAG中,需要处理完一遍bc,再进行第二次处理bc。debug函数嵌套,bitConcatenate语句插入报错。

2-20:1.debug函数嵌套,bitConcatenate语句插入报错。如图所示,插入位置错误:当%3放其第一个userInst之前,并不代表这个userInst是在IR第一个出现的,当前面还有使用%3时,bc输出不正无法生成IR,改为当插入指令放在函数的首个instruction位置,才不会报错。
2.FunctionProcess函数处理方式修改,将立即删除oldFunction改为与newFunction存放map中。
遇到一条callInst指令,查找其调用Function是否在map中,不在则New一个Function,在则直接new CallInst 与NewFunction建立连接关系,并replace old callInst。debuging仍需解决

2-21:1.周二处理函数嵌套中的未加入DAG的局部struct变量问题,通过二次调用rm_struct pass,优化将局部变量其加入DAG,不同二次调用pass处理,并将结果生成冗余alloca指令需删除。
2.face_detection这个例子rm_struct完毕,结果运行正确,但仍需对函数中struct处理过程是否有漏洞 做进一步确定,下周集中处理3d_rendering这个例子。

2-24:处理3d_rendering case,编写and、or、xor bit处理函数并调试,测试提取有效位正确性。处理case崩掉,中间部分instruction报错。debuging。
问题3d_rendering中getelementptr指令index不是constant integer,需添加该种处理情况code,待处理。

2-25:1、debug and、or、xor 等指令对应memory table,修改遇到逻辑运算立即打断,并用struct子变量替换。
2、经过clang O1的3d_rendering case bc中初中出现将struct变量的二级指针传递的语句,通过mem2reg opt优化无二级指解决问题。
3、bc中存在无调用的function,需code处理

2-26:1、处理bc中没有被调用的function,将其中的struct分解。
2、memcpy中出现内存拼接,如图所示,与函数参数为拼接的struct一样,memcpy(A,B)A={i8,i8,i8,i8,i8,i8,i8,i8,i8},B={i64,i8},整理memcpy处理算法,编写memcpy处理情况code,明天继续处理。

2-27:memcpy(A,B)算法整理,与万姐讨论memcpy处理方法,因为之前未考虑A或B为struct变量拼接成iN情况,memcpyprocess需要修改框架并添加该种处理情况。并仔细研究了memcpy资料,确保修改后函数处理的通用性。今明两天集中处理掉memcpy。

2-28:将memcpy(A,B)情况分类明确,补全内存拼接处理函数,周末测试保证memcp处理正确。

3-2:memcpy(dest,src)种类如图所示,目前已支持情况1~2.4,并在3d_rendering运行正确,剩余2.5和2.6还需半天处理,memcpy处理完继续debug。

3-3:1、开会
2、整理memcpy(A,B)处理方案,暂时不处理内存拼接情况
3、测试struct例子,查看顾正华新的case是否支持。
4、对整体代码不支持部分进行报错说明

3-4:完善getelementptr的处理函数:GetElementPtrInstProcess(Instruction *inst)
(1)inst的src和dest的structType类型一致时,仅保留getelementptr的list,不处理
(1.1)当inst的user为getelementptr inst2
(1.1.1)if(inst2的dest的structType != inst的srcstructType)加入(1)的list,分解inst的src的sub struct value,inst2的op_1assert为constant 0舍弃
(1.1.2)else assert(0),list just have a vector pointer,
(1.2)当接下来是callInst时,需要将array的信息传递下去
(2)当两者类型不一致时,则直接将其分解。

3-5:1、处理getelementptrInst为callInst参数的情况
2、修改BitcastProcess函数,优化函数处理结构,bug处理:遇到callInst指令,直接将oldF和为其创建的newF放入map中不对,需要比较此时的newF变化的struct与需要修改的位置对应,否则错误。
二是目前的创建的Function可能会有重复,需要后期删除重复Function,因为现在的处理方案是遇到一条callInst处理该条callInst,可能会最终造成重复创建Function,要想根本上解决Function重复问题,需要遇到一条callInst,修改其Function,在将Function对应的所有指令全部修改,但是放Function的参数为iN(拼接的struct),无法将每条callInst都处理,所有暂用目前方法。
val_struct1->call1(x,y,struct1,struct2)->call2(x,y,m,n,struct2)
->call3(x,y,m,n,p,q)

val_struct2->call1(x,y,struct1,struct2)->call4(x,y,struct1,p,q)
->call5(x,y,m,n,p,q)

3-6:1、将callInst对应Function函数重新整理,将argument为iN、struct、constantexpr共同函数进行合并
2、处理store A,*B指令,对A、B种类进行归类处理,完善函数
3、冗余函数结构进行优化替换

3.2—3.6:
1、主要对代码做修改,一对不支持的情况做说明,二对代码简洁化,有些分支过多,找些规律把精简code,getelementptr和bitcast提高可读性和健壮性。store,memcpy指令,全部归于同一个处理函数,将参数A、B边界情况尽可能完善。本周就是在公司多跑写例子debug,检测能否满足预期情况,最后对rm_struct做个文档功能说明,确定这个pass。

3-9:store A, * B 处理算法,考虑A、B所有可能情况并处理。

3-10:1.查阅opencv老版本资料,了解含有struct的程序。
2.针对目前rm_struct,罗列目前不支持的情况。
3.继续debug 3d_rendering,想尽量将它支持。

3-11:1、debug 3d_rendering完善memcpyprocess函数
2、将之前的所有的struct跑一遍,debug,完善callInst处理函数,对iN的argument先进行x、y处理,仍有拼接出现再生成concate语句,不是一开始直接生成concate语句。
3、对debug发现解决不了情况总结

3-12:1、3d_rendering无法支持,memcpy处理算法需仔细讨论。
2、验证15个struct例子,验正pass正确性并进行debug。

3-13:1、clang有优化bc的pass可以优化rm_struct,将其中冗余指令删除。删除冗余的global、alloca、Function参数和dead instruction。
2、继续跑struct case,并debug

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值