mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-01 01:14:22 +00:00
Provide correct NEON encodings for vbsl.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117293 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
458f2dc5d1
commit
4110b4325d
@ -2934,20 +2934,20 @@ def : Pat<(v2i32 (vnotd DPR:$src)), (VMVNd DPR:$src)>;
|
||||
def : Pat<(v4i32 (vnotq QPR:$src)), (VMVNq QPR:$src)>;
|
||||
|
||||
// VBSL : Vector Bitwise Select
|
||||
def VBSLd : N3VX<1, 0, 0b01, 0b0001, 0, 1, (outs DPR:$dst),
|
||||
(ins DPR:$src1, DPR:$src2, DPR:$src3),
|
||||
def VBSLd : N3VX<1, 0, 0b01, 0b0001, 0, 1, (outs DPR:$Vd),
|
||||
(ins DPR:$src1, DPR:$Vn, DPR:$Vm),
|
||||
N3RegFrm, IIC_VCNTiD,
|
||||
"vbsl", "$dst, $src2, $src3", "$src1 = $dst",
|
||||
[(set DPR:$dst,
|
||||
(v2i32 (or (and DPR:$src2, DPR:$src1),
|
||||
(and DPR:$src3, (vnotd DPR:$src1)))))]>;
|
||||
def VBSLq : N3VX<1, 0, 0b01, 0b0001, 1, 1, (outs QPR:$dst),
|
||||
(ins QPR:$src1, QPR:$src2, QPR:$src3),
|
||||
"vbsl", "$Vd, $Vn, $Vm", "$src1 = $Vd",
|
||||
[(set DPR:$Vd,
|
||||
(v2i32 (or (and DPR:$Vn, DPR:$src1),
|
||||
(and DPR:$Vm, (vnotd DPR:$src1)))))]>;
|
||||
def VBSLq : N3VX<1, 0, 0b01, 0b0001, 1, 1, (outs QPR:$Vd),
|
||||
(ins QPR:$src1, QPR:$Vn, QPR:$Vm),
|
||||
N3RegFrm, IIC_VCNTiQ,
|
||||
"vbsl", "$dst, $src2, $src3", "$src1 = $dst",
|
||||
[(set QPR:$dst,
|
||||
(v4i32 (or (and QPR:$src2, QPR:$src1),
|
||||
(and QPR:$src3, (vnotq QPR:$src1)))))]>;
|
||||
"vbsl", "$Vd, $Vn, $Vm", "$src1 = $Vd",
|
||||
[(set QPR:$Vd,
|
||||
(v4i32 (or (and QPR:$Vn, QPR:$src1),
|
||||
(and QPR:$Vm, (vnotq QPR:$src1)))))]>;
|
||||
|
||||
// VBIF : Vector Bitwise Insert if False
|
||||
// like VBSL but with: "vbif $dst, $src3, $src1", "$src2 = $dst",
|
||||
|
@ -113,3 +113,29 @@ define <16 x i8> @vmvn_16xi8(<16 x i8>* %A) nounwind {
|
||||
%tmp2 = xor <16 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
|
||||
ret <16 x i8> %tmp2
|
||||
}
|
||||
|
||||
; CHECK: vbsl_8xi8
|
||||
define <8 x i8> @vbsl_8xi8(<8 x i8>* %A, <8 x i8>* %B, <8 x i8>* %C) nounwind {
|
||||
%tmp1 = load <8 x i8>* %A
|
||||
%tmp2 = load <8 x i8>* %B
|
||||
%tmp3 = load <8 x i8>* %C
|
||||
; CHECK: vbsl d18, d17, d16 @ encoding: [0xb0,0x21,0x51,0xf3]
|
||||
%tmp4 = and <8 x i8> %tmp1, %tmp2
|
||||
%tmp5 = xor <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
|
||||
%tmp6 = and <8 x i8> %tmp5, %tmp3
|
||||
%tmp7 = or <8 x i8> %tmp4, %tmp6
|
||||
ret <8 x i8> %tmp7
|
||||
}
|
||||
|
||||
; CHECK: vbsl_16xi8
|
||||
define <16 x i8> @vbsl_16xi8(<16 x i8>* %A, <16 x i8>* %B, <16 x i8>* %C) nounwind {
|
||||
%tmp1 = load <16 x i8>* %A
|
||||
%tmp2 = load <16 x i8>* %B
|
||||
%tmp3 = load <16 x i8>* %C
|
||||
; CHECK: vbsl q8, q10, q9 @ encoding: [0xf2,0x01,0x54,0xf3]
|
||||
%tmp4 = and <16 x i8> %tmp1, %tmp2
|
||||
%tmp5 = xor <16 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
|
||||
%tmp6 = and <16 x i8> %tmp5, %tmp3
|
||||
%tmp7 = or <16 x i8> %tmp4, %tmp6
|
||||
ret <16 x i8> %tmp7
|
||||
}
|
Loading…
Reference in New Issue
Block a user