select error

 

fatal error: error in backend: Cannot select: xxx: v4i32 =any_extend xxx[ID=126]
  xxx: v4i16

 

解决步骤:

在 sourceinsight R里搜索 any_extend或者缩小搜索范围,在ISDOpcodes.h里搜索:

根据注释说明得到 了解这个any_extend是什么意思:

 /// ANY_EXTEND - Used for integer types.  The high bits are undefined.

接着在 TargetSelectionDAG.td  找到 DAG:
def anyext     : SDNode<"ISD::ANY_EXTEND" , SDTIntExtendOp>;
节点 anytxt 对应 指令 ISD::ANY_EXTEND.
现在是逆向通过 指令错误找到了,节点名称 是anyext。
 
下步是对该节点做处理,以通过。
 
 
我们知道,该指令是意思是int的扩展,
那么为什么没有select成功?是因为跟 目标平台 机器指令对不上。
那么我们看看目标平台实现对应功能的机器指令有没有,有的话是哪一个机器指令:
 
这需要 对应目标平台支持指令的spec文档:
pack 是 打包  对应 压缩类型
unpack是 对应 扩展。
 
[
unpack high 扩展高位  如 0x1000 -> 0x 00001000
实现细节:如是大端机器(arm), 对应把 寄存器低位  置0.       数据高位<=> 寄存器低位
 ]可能是错的。
key 1411
unpack u low => 对应 (type) 强制类型转,如 把 short 强制转成 int
结束时,pack low  也对应强制类型转换成 小的类型。
 
 
接下来,在td文件里,把对应的set 写上 set xxx   anyext 。。。xxx
 
 
 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值