rm_struct pass question!

(1)结构体type含有结构体指针不支持。

%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
%struct.item_details = type { [30 x i8], i32, float, float }
 %1 = load %struct._IO_FILE*, %struct._IO_FILE** @stdin, align 8, !tbaa !6
 %2 = call i32 @_IO_getc(%struct._IO_FILE* %1) #5

(2)结构体内存拼接种类繁多,memcpy(A,B)不支持,部分情况支持。
(3)external结构体变量 不支持
(4)未初始化的globalvariable需要分解,processGlobalVar暂未支持。

1、LoadiNAsFunctionArg()中,将函数参数改完的MidF,内部进行修改时,
(1)先看看iN的user是不是为StoreInst指令,有的话,直接将x,y给它,不用拼接
(2)再看看iN的user是不是CallInst的参数,是的话,调用callInst对应的process函数处理
(3)看还有其他情况否?

2、结论:C++ map中key不要使用指针,请直接使用对象。为什么我一直以指针作为key值,我在oldF和newF匹配时用的map,比较指针值

3、memcpy类型讨论,当参数为内存拼接的iN。
memcpy(A,B) A,B可能为alloca、global、argument

4、函数参数返回值为struct未处理

5、当传递struct 传值和传指针不同时。参数怎样变化。
(Student *s)应该修改了值
(Student s)值不变

6、当前的function_map_根据以下例子可见不支持,只支持函数中存在一个struct例子。

容易出错的地方:
1、利用oldF创建NewF,oldF有其余指令调用,不能删,假设没有,想删除,里面的alloca指令需要从vertex删除。放在所有处理结尾再删除OldF,如果OldF还有指令调用,出错。

2、llvm::PointerType::get(llvm::Type*, unsigned int)
getelementptrInst创建出错,可能因为list的参数不对

3、对IR先进行pretreatment处理,想把所有的ConstantExpr转化为instruction处理,把转化后的ConstantExpr再删除,但是删除ConstantExpr会报错,不知原因,可能会破坏user之间连接关系。所以一旦出问题,可能是ConstantExpr删除的问题,目前只删除user为0的ConstantExpr。

4、processVertexValue()中的val可能是一个ConstantExpr。在某个instruction,没有处理,应该不可能,注意一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值