添加 auto vector 支持

对 节点:v4f32 sint_to_fp v4i16  select的支持

(去掉xxx,xxx for anquaxieyi)

方法一:

 //def:Pat<(v4f32 (sintxxx_to_fp (v4i16 XDRegs:$src))),
   //              (vitof32xxx_s32_xqn_xqn (vlunpk_s16l_xqn_xdn XDRegs:$src))>;//byzlg
方法二:(最好)

def : Pat<(v4f32 (sint_to_fp (v4i16 XDRegs:$src3))),
          (vlitof32xxx_s16_xqn_xqn(INSERT_SUBREG(v4i32 (IMPLICIT_DEF)), XDRegs:$src3, xq_sub_odd))>;

或:  (vlitof32xxx_s16_xqn_xqn(INSERT_SUBREG(v8i16 (IMPLICIT_DEF)), XDRegs:$src3, xq_sub_odd))>; //实际指令实现是,操作的 i16,只不过,只取了v8的一半。

结果diff:

diff xxx_s16.s xxx_s16.s_zyk
43,45c43,44
<       ldp     xd0,(r0)
<       vlunpkxxx.s16l     xq0,xd0
<       vitof32xxx.s32     xq0,xq0
---
>       ldp     xd1,(r0)
>       vlitof32xxx.s16    xq0,xq0

可以看出,上面的方法一 比方法二的汇编多了一条指令。

 

 

 

你可能感兴趣的:(编译器)