xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-vabs.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @sabdl8h(<8 x i8>* %A, <8 x i8>* %B) nounwind {
5*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabdl8h:
6*9880d681SAndroid Build Coastguard Worker;CHECK: sabdl.8h
7*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i8>, <8 x i8>* %A
8*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <8 x i8>, <8 x i8>* %B
9*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i8> @llvm.aarch64.neon.sabd.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
10*9880d681SAndroid Build Coastguard Worker        %tmp4 = zext <8 x i8> %tmp3 to <8 x i16>
11*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp4
12*9880d681SAndroid Build Coastguard Worker}
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @sabdl4s(<4 x i16>* %A, <4 x i16>* %B) nounwind {
15*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabdl4s:
16*9880d681SAndroid Build Coastguard Worker;CHECK: sabdl.4s
17*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i16>, <4 x i16>* %A
18*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <4 x i16>, <4 x i16>* %B
19*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i16> @llvm.aarch64.neon.sabd.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
20*9880d681SAndroid Build Coastguard Worker        %tmp4 = zext <4 x i16> %tmp3 to <4 x i32>
21*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp4
22*9880d681SAndroid Build Coastguard Worker}
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @sabdl2d(<2 x i32>* %A, <2 x i32>* %B) nounwind {
25*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabdl2d:
26*9880d681SAndroid Build Coastguard Worker;CHECK: sabdl.2d
27*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <2 x i32>, <2 x i32>* %A
28*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <2 x i32>, <2 x i32>* %B
29*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <2 x i32> @llvm.aarch64.neon.sabd.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
30*9880d681SAndroid Build Coastguard Worker        %tmp4 = zext <2 x i32> %tmp3 to <2 x i64>
31*9880d681SAndroid Build Coastguard Worker        ret <2 x i64> %tmp4
32*9880d681SAndroid Build Coastguard Worker}
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @sabdl2_8h(<16 x i8>* %A, <16 x i8>* %B) nounwind {
35*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabdl2_8h:
36*9880d681SAndroid Build Coastguard Worker;CHECK: sabdl2.8h
37*9880d681SAndroid Build Coastguard Worker        %load1 = load <16 x i8>, <16 x i8>* %A
38*9880d681SAndroid Build Coastguard Worker        %load2 = load <16 x i8>, <16 x i8>* %B
39*9880d681SAndroid Build Coastguard Worker        %tmp1 = shufflevector <16 x i8> %load1, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
40*9880d681SAndroid Build Coastguard Worker        %tmp2 = shufflevector <16 x i8> %load2, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
41*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i8> @llvm.aarch64.neon.sabd.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
42*9880d681SAndroid Build Coastguard Worker        %tmp4 = zext <8 x i8> %tmp3 to <8 x i16>
43*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp4
44*9880d681SAndroid Build Coastguard Worker}
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @sabdl2_4s(<8 x i16>* %A, <8 x i16>* %B) nounwind {
47*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabdl2_4s:
48*9880d681SAndroid Build Coastguard Worker;CHECK: sabdl2.4s
49*9880d681SAndroid Build Coastguard Worker        %load1 = load <8 x i16>, <8 x i16>* %A
50*9880d681SAndroid Build Coastguard Worker        %load2 = load <8 x i16>, <8 x i16>* %B
51*9880d681SAndroid Build Coastguard Worker        %tmp1 = shufflevector <8 x i16> %load1, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
52*9880d681SAndroid Build Coastguard Worker        %tmp2 = shufflevector <8 x i16> %load2, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
53*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i16> @llvm.aarch64.neon.sabd.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
54*9880d681SAndroid Build Coastguard Worker        %tmp4 = zext <4 x i16> %tmp3 to <4 x i32>
55*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp4
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @sabdl2_2d(<4 x i32>* %A, <4 x i32>* %B) nounwind {
59*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabdl2_2d:
60*9880d681SAndroid Build Coastguard Worker;CHECK: sabdl2.2d
61*9880d681SAndroid Build Coastguard Worker        %load1 = load <4 x i32>, <4 x i32>* %A
62*9880d681SAndroid Build Coastguard Worker        %load2 = load <4 x i32>, <4 x i32>* %B
63*9880d681SAndroid Build Coastguard Worker        %tmp1 = shufflevector <4 x i32> %load1, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
64*9880d681SAndroid Build Coastguard Worker        %tmp2 = shufflevector <4 x i32> %load2, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
65*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <2 x i32> @llvm.aarch64.neon.sabd.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
66*9880d681SAndroid Build Coastguard Worker        %tmp4 = zext <2 x i32> %tmp3 to <2 x i64>
67*9880d681SAndroid Build Coastguard Worker        ret <2 x i64> %tmp4
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @uabdl8h(<8 x i8>* %A, <8 x i8>* %B) nounwind {
71*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabdl8h:
72*9880d681SAndroid Build Coastguard Worker;CHECK: uabdl.8h
73*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <8 x i8>, <8 x i8>* %A
74*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <8 x i8>, <8 x i8>* %B
75*9880d681SAndroid Build Coastguard Worker  %tmp3 = call <8 x i8> @llvm.aarch64.neon.uabd.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
76*9880d681SAndroid Build Coastguard Worker  %tmp4 = zext <8 x i8> %tmp3 to <8 x i16>
77*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %tmp4
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @uabdl4s(<4 x i16>* %A, <4 x i16>* %B) nounwind {
81*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabdl4s:
82*9880d681SAndroid Build Coastguard Worker;CHECK: uabdl.4s
83*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <4 x i16>, <4 x i16>* %A
84*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <4 x i16>, <4 x i16>* %B
85*9880d681SAndroid Build Coastguard Worker  %tmp3 = call <4 x i16> @llvm.aarch64.neon.uabd.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
86*9880d681SAndroid Build Coastguard Worker  %tmp4 = zext <4 x i16> %tmp3 to <4 x i32>
87*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %tmp4
88*9880d681SAndroid Build Coastguard Worker}
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @uabdl2d(<2 x i32>* %A, <2 x i32>* %B) nounwind {
91*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabdl2d:
92*9880d681SAndroid Build Coastguard Worker;CHECK: uabdl.2d
93*9880d681SAndroid Build Coastguard Worker  %tmp1 = load <2 x i32>, <2 x i32>* %A
94*9880d681SAndroid Build Coastguard Worker  %tmp2 = load <2 x i32>, <2 x i32>* %B
95*9880d681SAndroid Build Coastguard Worker  %tmp3 = call <2 x i32> @llvm.aarch64.neon.uabd.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
96*9880d681SAndroid Build Coastguard Worker  %tmp4 = zext <2 x i32> %tmp3 to <2 x i64>
97*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %tmp4
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @uabdl2_8h(<16 x i8>* %A, <16 x i8>* %B) nounwind {
101*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabdl2_8h:
102*9880d681SAndroid Build Coastguard Worker;CHECK: uabdl2.8h
103*9880d681SAndroid Build Coastguard Worker  %load1 = load <16 x i8>, <16 x i8>* %A
104*9880d681SAndroid Build Coastguard Worker  %load2 = load <16 x i8>, <16 x i8>* %B
105*9880d681SAndroid Build Coastguard Worker  %tmp1 = shufflevector <16 x i8> %load1, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
106*9880d681SAndroid Build Coastguard Worker  %tmp2 = shufflevector <16 x i8> %load2, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Worker  %tmp3 = call <8 x i8> @llvm.aarch64.neon.uabd.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
109*9880d681SAndroid Build Coastguard Worker  %tmp4 = zext <8 x i8> %tmp3 to <8 x i16>
110*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %tmp4
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @uabdl2_4s(<8 x i16>* %A, <8 x i16>* %B) nounwind {
114*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabdl2_4s:
115*9880d681SAndroid Build Coastguard Worker;CHECK: uabdl2.4s
116*9880d681SAndroid Build Coastguard Worker  %load1 = load <8 x i16>, <8 x i16>* %A
117*9880d681SAndroid Build Coastguard Worker  %load2 = load <8 x i16>, <8 x i16>* %B
118*9880d681SAndroid Build Coastguard Worker  %tmp1 = shufflevector <8 x i16> %load1, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
119*9880d681SAndroid Build Coastguard Worker  %tmp2 = shufflevector <8 x i16> %load2, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
120*9880d681SAndroid Build Coastguard Worker  %tmp3 = call <4 x i16> @llvm.aarch64.neon.uabd.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
121*9880d681SAndroid Build Coastguard Worker  %tmp4 = zext <4 x i16> %tmp3 to <4 x i32>
122*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %tmp4
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @uabdl2_2d(<4 x i32>* %A, <4 x i32>* %B) nounwind {
126*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabdl2_2d:
127*9880d681SAndroid Build Coastguard Worker;CHECK: uabdl2.2d
128*9880d681SAndroid Build Coastguard Worker  %load1 = load <4 x i32>, <4 x i32>* %A
129*9880d681SAndroid Build Coastguard Worker  %load2 = load <4 x i32>, <4 x i32>* %B
130*9880d681SAndroid Build Coastguard Worker  %tmp1 = shufflevector <4 x i32> %load1, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
131*9880d681SAndroid Build Coastguard Worker  %tmp2 = shufflevector <4 x i32> %load2, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
132*9880d681SAndroid Build Coastguard Worker  %tmp3 = call <2 x i32> @llvm.aarch64.neon.uabd.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
133*9880d681SAndroid Build Coastguard Worker  %tmp4 = zext <2 x i32> %tmp3 to <2 x i64>
134*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %tmp4
135*9880d681SAndroid Build Coastguard Worker}
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Workerdefine i16 @uabdl8h_log2_shuffle(<16 x i8>* %a, <16 x i8>* %b) {
138*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: uabdl8h_log2_shuffle
139*9880d681SAndroid Build Coastguard Worker; CHECK: uabdl2.8h
140*9880d681SAndroid Build Coastguard Worker; CHECK: uabdl.8h
141*9880d681SAndroid Build Coastguard Worker  %aload = load <16 x i8>, <16 x i8>* %a, align 1
142*9880d681SAndroid Build Coastguard Worker  %bload = load <16 x i8>, <16 x i8>* %b, align 1
143*9880d681SAndroid Build Coastguard Worker  %aext = zext <16 x i8> %aload to <16 x i16>
144*9880d681SAndroid Build Coastguard Worker  %bext = zext <16 x i8> %bload to <16 x i16>
145*9880d681SAndroid Build Coastguard Worker  %abdiff = sub nsw <16 x i16> %aext, %bext
146*9880d681SAndroid Build Coastguard Worker  %abcmp = icmp slt <16 x i16> %abdiff, zeroinitializer
147*9880d681SAndroid Build Coastguard Worker  %ababs = sub nsw <16 x i16> zeroinitializer, %abdiff
148*9880d681SAndroid Build Coastguard Worker  %absel = select <16 x i1> %abcmp, <16 x i16> %ababs, <16 x i16> %abdiff
149*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <16 x i16> %absel, <16 x i16> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
150*9880d681SAndroid Build Coastguard Worker  %bin1.rdx = add <16 x i16> %absel, %rdx.shuf
151*9880d681SAndroid Build Coastguard Worker  %rdx.shufx = shufflevector <16 x i16> %bin1.rdx, <16 x i16> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
152*9880d681SAndroid Build Coastguard Worker  %bin.rdx = add <16 x i16> %bin1.rdx, %rdx.shufx
153*9880d681SAndroid Build Coastguard Worker  %rdx.shuf136 = shufflevector <16 x i16> %bin.rdx, <16 x i16> undef, <16 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
154*9880d681SAndroid Build Coastguard Worker  %bin.rdx137 = add <16 x i16> %bin.rdx, %rdx.shuf136
155*9880d681SAndroid Build Coastguard Worker  %rdx.shuf138 = shufflevector <16 x i16> %bin.rdx137, <16 x i16> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
156*9880d681SAndroid Build Coastguard Worker  %bin.rdx139 = add <16 x i16> %bin.rdx137, %rdx.shuf138
157*9880d681SAndroid Build Coastguard Worker  %reduced_v = extractelement <16 x i16> %bin.rdx139, i16 0
158*9880d681SAndroid Build Coastguard Worker  ret i16 %reduced_v
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Workerdefine i32 @uabdl4s_log2_shuffle(<8 x i16>* %a, <8 x i16>* %b) {
162*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: uabdl4s_log2_shuffle
163*9880d681SAndroid Build Coastguard Worker; CHECK: uabdl2.4s
164*9880d681SAndroid Build Coastguard Worker; CHECK: uabdl.4s
165*9880d681SAndroid Build Coastguard Worker  %aload = load <8 x i16>, <8 x i16>* %a, align 1
166*9880d681SAndroid Build Coastguard Worker  %bload = load <8 x i16>, <8 x i16>* %b, align 1
167*9880d681SAndroid Build Coastguard Worker  %aext = zext <8 x i16> %aload to <8 x i32>
168*9880d681SAndroid Build Coastguard Worker  %bext = zext <8 x i16> %bload to <8 x i32>
169*9880d681SAndroid Build Coastguard Worker  %abdiff = sub nsw <8 x i32> %aext, %bext
170*9880d681SAndroid Build Coastguard Worker  %abcmp = icmp slt <8 x i32> %abdiff, zeroinitializer
171*9880d681SAndroid Build Coastguard Worker  %ababs = sub nsw <8 x i32> zeroinitializer, %abdiff
172*9880d681SAndroid Build Coastguard Worker  %absel = select <8 x i1> %abcmp, <8 x i32> %ababs, <8 x i32> %abdiff
173*9880d681SAndroid Build Coastguard Worker  %rdx.shuf = shufflevector <8 x i32> %absel, <8 x i32> undef, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef>
174*9880d681SAndroid Build Coastguard Worker  %bin.rdx = add <8 x i32> %absel, %rdx.shuf
175*9880d681SAndroid Build Coastguard Worker  %rdx.shuf136 = shufflevector <8 x i32> %bin.rdx, <8 x i32> undef, <8 x i32> <i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
176*9880d681SAndroid Build Coastguard Worker  %bin.rdx137 = add <8 x i32> %bin.rdx, %rdx.shuf136
177*9880d681SAndroid Build Coastguard Worker  %rdx.shuf138 = shufflevector <8 x i32> %bin.rdx137, <8 x i32> undef, <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
178*9880d681SAndroid Build Coastguard Worker  %bin.rdx139 = add <8 x i32> %bin.rdx137, %rdx.shuf138
179*9880d681SAndroid Build Coastguard Worker  %reduced_v = extractelement <8 x i32> %bin.rdx139, i32 0
180*9880d681SAndroid Build Coastguard Worker  ret i32 %reduced_v
181*9880d681SAndroid Build Coastguard Worker}
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Workerdefine i64 @uabdl2d_log2_shuffle(<4 x i32>* %a, <4 x i32>* %b, i32 %h) {
184*9880d681SAndroid Build Coastguard Worker; CHECK: uabdl2d_log2_shuffle
185*9880d681SAndroid Build Coastguard Worker; CHECK: uabdl2.2d
186*9880d681SAndroid Build Coastguard Worker; CHECK: uabdl.2d
187*9880d681SAndroid Build Coastguard Worker  %aload = load <4 x i32>, <4 x i32>* %a, align 1
188*9880d681SAndroid Build Coastguard Worker  %bload = load <4 x i32>, <4 x i32>* %b, align 1
189*9880d681SAndroid Build Coastguard Worker  %aext = zext <4 x i32> %aload to <4 x i64>
190*9880d681SAndroid Build Coastguard Worker  %bext = zext <4 x i32> %bload to <4 x i64>
191*9880d681SAndroid Build Coastguard Worker  %abdiff = sub nsw <4 x i64> %aext, %bext
192*9880d681SAndroid Build Coastguard Worker  %abcmp = icmp slt <4 x i64> %abdiff, zeroinitializer
193*9880d681SAndroid Build Coastguard Worker  %ababs = sub nsw <4 x i64> zeroinitializer, %abdiff
194*9880d681SAndroid Build Coastguard Worker  %absel = select <4 x i1> %abcmp, <4 x i64> %ababs, <4 x i64> %abdiff
195*9880d681SAndroid Build Coastguard Worker  %rdx.shuf136 = shufflevector <4 x i64> %absel, <4 x i64> undef, <4 x i32> <i32 2, i32 3, i32 undef, i32 undef>
196*9880d681SAndroid Build Coastguard Worker  %bin.rdx137 = add <4 x i64> %absel, %rdx.shuf136
197*9880d681SAndroid Build Coastguard Worker  %rdx.shuf138 = shufflevector <4 x i64> %bin.rdx137, <4 x i64> undef, <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
198*9880d681SAndroid Build Coastguard Worker  %bin.rdx139 = add <4 x i64> %bin.rdx137, %rdx.shuf138
199*9880d681SAndroid Build Coastguard Worker  %reduced_v = extractelement <4 x i64> %bin.rdx139, i16 0
200*9880d681SAndroid Build Coastguard Worker  ret i64 %reduced_v
201*9880d681SAndroid Build Coastguard Worker}
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @fabd_2s(<2 x float>* %A, <2 x float>* %B) nounwind {
204*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: fabd_2s:
205*9880d681SAndroid Build Coastguard Worker;CHECK: fabd.2s
206*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <2 x float>, <2 x float>* %A
207*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <2 x float>, <2 x float>* %B
208*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <2 x float> @llvm.aarch64.neon.fabd.v2f32(<2 x float> %tmp1, <2 x float> %tmp2)
209*9880d681SAndroid Build Coastguard Worker        ret <2 x float> %tmp3
210*9880d681SAndroid Build Coastguard Worker}
211*9880d681SAndroid Build Coastguard Worker
212*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @fabd_4s(<4 x float>* %A, <4 x float>* %B) nounwind {
213*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: fabd_4s:
214*9880d681SAndroid Build Coastguard Worker;CHECK: fabd.4s
215*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x float>, <4 x float>* %A
216*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <4 x float>, <4 x float>* %B
217*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x float> @llvm.aarch64.neon.fabd.v4f32(<4 x float> %tmp1, <4 x float> %tmp2)
218*9880d681SAndroid Build Coastguard Worker        ret <4 x float> %tmp3
219*9880d681SAndroid Build Coastguard Worker}
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @fabd_2d(<2 x double>* %A, <2 x double>* %B) nounwind {
222*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: fabd_2d:
223*9880d681SAndroid Build Coastguard Worker;CHECK: fabd.2d
224*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <2 x double>, <2 x double>* %A
225*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <2 x double>, <2 x double>* %B
226*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <2 x double> @llvm.aarch64.neon.fabd.v2f64(<2 x double> %tmp1, <2 x double> %tmp2)
227*9880d681SAndroid Build Coastguard Worker        ret <2 x double> %tmp3
228*9880d681SAndroid Build Coastguard Worker}
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.fabd.v2f32(<2 x float>, <2 x float>) nounwind readnone
231*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.fabd.v4f32(<4 x float>, <4 x float>) nounwind readnone
232*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.aarch64.neon.fabd.v2f64(<2 x double>, <2 x double>) nounwind readnone
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @sabd_8b(<8 x i8>* %A, <8 x i8>* %B) nounwind {
235*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabd_8b:
236*9880d681SAndroid Build Coastguard Worker;CHECK: sabd.8b
237*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i8>, <8 x i8>* %A
238*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <8 x i8>, <8 x i8>* %B
239*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i8> @llvm.aarch64.neon.sabd.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
240*9880d681SAndroid Build Coastguard Worker        ret <8 x i8> %tmp3
241*9880d681SAndroid Build Coastguard Worker}
242*9880d681SAndroid Build Coastguard Worker
243*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @sabd_16b(<16 x i8>* %A, <16 x i8>* %B) nounwind {
244*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabd_16b:
245*9880d681SAndroid Build Coastguard Worker;CHECK: sabd.16b
246*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <16 x i8>, <16 x i8>* %A
247*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <16 x i8>, <16 x i8>* %B
248*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <16 x i8> @llvm.aarch64.neon.sabd.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
249*9880d681SAndroid Build Coastguard Worker        ret <16 x i8> %tmp3
250*9880d681SAndroid Build Coastguard Worker}
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @sabd_4h(<4 x i16>* %A, <4 x i16>* %B) nounwind {
253*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabd_4h:
254*9880d681SAndroid Build Coastguard Worker;CHECK: sabd.4h
255*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i16>, <4 x i16>* %A
256*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <4 x i16>, <4 x i16>* %B
257*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i16> @llvm.aarch64.neon.sabd.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
258*9880d681SAndroid Build Coastguard Worker        ret <4 x i16> %tmp3
259*9880d681SAndroid Build Coastguard Worker}
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @sabd_8h(<8 x i16>* %A, <8 x i16>* %B) nounwind {
262*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabd_8h:
263*9880d681SAndroid Build Coastguard Worker;CHECK: sabd.8h
264*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i16>, <8 x i16>* %A
265*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <8 x i16>, <8 x i16>* %B
266*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i16> @llvm.aarch64.neon.sabd.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
267*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp3
268*9880d681SAndroid Build Coastguard Worker}
269*9880d681SAndroid Build Coastguard Worker
270*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @sabd_2s(<2 x i32>* %A, <2 x i32>* %B) nounwind {
271*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabd_2s:
272*9880d681SAndroid Build Coastguard Worker;CHECK: sabd.2s
273*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <2 x i32>, <2 x i32>* %A
274*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <2 x i32>, <2 x i32>* %B
275*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <2 x i32> @llvm.aarch64.neon.sabd.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
276*9880d681SAndroid Build Coastguard Worker        ret <2 x i32> %tmp3
277*9880d681SAndroid Build Coastguard Worker}
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @sabd_4s(<4 x i32>* %A, <4 x i32>* %B) nounwind {
280*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabd_4s:
281*9880d681SAndroid Build Coastguard Worker;CHECK: sabd.4s
282*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i32>, <4 x i32>* %A
283*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <4 x i32>, <4 x i32>* %B
284*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i32> @llvm.aarch64.neon.sabd.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
285*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp3
286*9880d681SAndroid Build Coastguard Worker}
287*9880d681SAndroid Build Coastguard Worker
288*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.sabd.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
289*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.aarch64.neon.sabd.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
290*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sabd.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
291*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.aarch64.neon.sabd.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
292*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sabd.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
293*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sabd.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @uabd_8b(<8 x i8>* %A, <8 x i8>* %B) nounwind {
296*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabd_8b:
297*9880d681SAndroid Build Coastguard Worker;CHECK: uabd.8b
298*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i8>, <8 x i8>* %A
299*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <8 x i8>, <8 x i8>* %B
300*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i8> @llvm.aarch64.neon.uabd.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
301*9880d681SAndroid Build Coastguard Worker        ret <8 x i8> %tmp3
302*9880d681SAndroid Build Coastguard Worker}
303*9880d681SAndroid Build Coastguard Worker
304*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @uabd_16b(<16 x i8>* %A, <16 x i8>* %B) nounwind {
305*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabd_16b:
306*9880d681SAndroid Build Coastguard Worker;CHECK: uabd.16b
307*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <16 x i8>, <16 x i8>* %A
308*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <16 x i8>, <16 x i8>* %B
309*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <16 x i8> @llvm.aarch64.neon.uabd.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
310*9880d681SAndroid Build Coastguard Worker        ret <16 x i8> %tmp3
311*9880d681SAndroid Build Coastguard Worker}
312*9880d681SAndroid Build Coastguard Worker
313*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @uabd_4h(<4 x i16>* %A, <4 x i16>* %B) nounwind {
314*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabd_4h:
315*9880d681SAndroid Build Coastguard Worker;CHECK: uabd.4h
316*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i16>, <4 x i16>* %A
317*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <4 x i16>, <4 x i16>* %B
318*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i16> @llvm.aarch64.neon.uabd.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
319*9880d681SAndroid Build Coastguard Worker        ret <4 x i16> %tmp3
320*9880d681SAndroid Build Coastguard Worker}
321*9880d681SAndroid Build Coastguard Worker
322*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @uabd_8h(<8 x i16>* %A, <8 x i16>* %B) nounwind {
323*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabd_8h:
324*9880d681SAndroid Build Coastguard Worker;CHECK: uabd.8h
325*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i16>, <8 x i16>* %A
326*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <8 x i16>, <8 x i16>* %B
327*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i16> @llvm.aarch64.neon.uabd.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
328*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp3
329*9880d681SAndroid Build Coastguard Worker}
330*9880d681SAndroid Build Coastguard Worker
331*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @uabd_2s(<2 x i32>* %A, <2 x i32>* %B) nounwind {
332*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabd_2s:
333*9880d681SAndroid Build Coastguard Worker;CHECK: uabd.2s
334*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <2 x i32>, <2 x i32>* %A
335*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <2 x i32>, <2 x i32>* %B
336*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <2 x i32> @llvm.aarch64.neon.uabd.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
337*9880d681SAndroid Build Coastguard Worker        ret <2 x i32> %tmp3
338*9880d681SAndroid Build Coastguard Worker}
339*9880d681SAndroid Build Coastguard Worker
340*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @uabd_4s(<4 x i32>* %A, <4 x i32>* %B) nounwind {
341*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabd_4s:
342*9880d681SAndroid Build Coastguard Worker;CHECK: uabd.4s
343*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i32>, <4 x i32>* %A
344*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <4 x i32>, <4 x i32>* %B
345*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i32> @llvm.aarch64.neon.uabd.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
346*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp3
347*9880d681SAndroid Build Coastguard Worker}
348*9880d681SAndroid Build Coastguard Worker
349*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.uabd.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
350*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.aarch64.neon.uabd.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
351*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.uabd.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
352*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.aarch64.neon.uabd.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
353*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.uabd.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
354*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.uabd.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
355*9880d681SAndroid Build Coastguard Worker
356*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @sqabs_8b(<8 x i8>* %A) nounwind {
357*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sqabs_8b:
358*9880d681SAndroid Build Coastguard Worker;CHECK: sqabs.8b
359*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i8>, <8 x i8>* %A
360*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqabs.v8i8(<8 x i8> %tmp1)
361*9880d681SAndroid Build Coastguard Worker        ret <8 x i8> %tmp3
362*9880d681SAndroid Build Coastguard Worker}
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @sqabs_16b(<16 x i8>* %A) nounwind {
365*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sqabs_16b:
366*9880d681SAndroid Build Coastguard Worker;CHECK: sqabs.16b
367*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <16 x i8>, <16 x i8>* %A
368*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <16 x i8> @llvm.aarch64.neon.sqabs.v16i8(<16 x i8> %tmp1)
369*9880d681SAndroid Build Coastguard Worker        ret <16 x i8> %tmp3
370*9880d681SAndroid Build Coastguard Worker}
371*9880d681SAndroid Build Coastguard Worker
372*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @sqabs_4h(<4 x i16>* %A) nounwind {
373*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sqabs_4h:
374*9880d681SAndroid Build Coastguard Worker;CHECK: sqabs.4h
375*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i16>, <4 x i16>* %A
376*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqabs.v4i16(<4 x i16> %tmp1)
377*9880d681SAndroid Build Coastguard Worker        ret <4 x i16> %tmp3
378*9880d681SAndroid Build Coastguard Worker}
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @sqabs_8h(<8 x i16>* %A) nounwind {
381*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sqabs_8h:
382*9880d681SAndroid Build Coastguard Worker;CHECK: sqabs.8h
383*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i16>, <8 x i16>* %A
384*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i16> @llvm.aarch64.neon.sqabs.v8i16(<8 x i16> %tmp1)
385*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp3
386*9880d681SAndroid Build Coastguard Worker}
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @sqabs_2s(<2 x i32>* %A) nounwind {
389*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sqabs_2s:
390*9880d681SAndroid Build Coastguard Worker;CHECK: sqabs.2s
391*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <2 x i32>, <2 x i32>* %A
392*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqabs.v2i32(<2 x i32> %tmp1)
393*9880d681SAndroid Build Coastguard Worker        ret <2 x i32> %tmp3
394*9880d681SAndroid Build Coastguard Worker}
395*9880d681SAndroid Build Coastguard Worker
396*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @sqabs_4s(<4 x i32>* %A) nounwind {
397*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sqabs_4s:
398*9880d681SAndroid Build Coastguard Worker;CHECK: sqabs.4s
399*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i32>, <4 x i32>* %A
400*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i32> @llvm.aarch64.neon.sqabs.v4i32(<4 x i32> %tmp1)
401*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp3
402*9880d681SAndroid Build Coastguard Worker}
403*9880d681SAndroid Build Coastguard Worker
404*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.sqabs.v8i8(<8 x i8>) nounwind readnone
405*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.aarch64.neon.sqabs.v16i8(<16 x i8>) nounwind readnone
406*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sqabs.v4i16(<4 x i16>) nounwind readnone
407*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.aarch64.neon.sqabs.v8i16(<8 x i16>) nounwind readnone
408*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqabs.v2i32(<2 x i32>) nounwind readnone
409*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqabs.v4i32(<4 x i32>) nounwind readnone
410*9880d681SAndroid Build Coastguard Worker
411*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @sqneg_8b(<8 x i8>* %A) nounwind {
412*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sqneg_8b:
413*9880d681SAndroid Build Coastguard Worker;CHECK: sqneg.8b
414*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i8>, <8 x i8>* %A
415*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqneg.v8i8(<8 x i8> %tmp1)
416*9880d681SAndroid Build Coastguard Worker        ret <8 x i8> %tmp3
417*9880d681SAndroid Build Coastguard Worker}
418*9880d681SAndroid Build Coastguard Worker
419*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @sqneg_16b(<16 x i8>* %A) nounwind {
420*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sqneg_16b:
421*9880d681SAndroid Build Coastguard Worker;CHECK: sqneg.16b
422*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <16 x i8>, <16 x i8>* %A
423*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <16 x i8> @llvm.aarch64.neon.sqneg.v16i8(<16 x i8> %tmp1)
424*9880d681SAndroid Build Coastguard Worker        ret <16 x i8> %tmp3
425*9880d681SAndroid Build Coastguard Worker}
426*9880d681SAndroid Build Coastguard Worker
427*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @sqneg_4h(<4 x i16>* %A) nounwind {
428*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sqneg_4h:
429*9880d681SAndroid Build Coastguard Worker;CHECK: sqneg.4h
430*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i16>, <4 x i16>* %A
431*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqneg.v4i16(<4 x i16> %tmp1)
432*9880d681SAndroid Build Coastguard Worker        ret <4 x i16> %tmp3
433*9880d681SAndroid Build Coastguard Worker}
434*9880d681SAndroid Build Coastguard Worker
435*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @sqneg_8h(<8 x i16>* %A) nounwind {
436*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sqneg_8h:
437*9880d681SAndroid Build Coastguard Worker;CHECK: sqneg.8h
438*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i16>, <8 x i16>* %A
439*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i16> @llvm.aarch64.neon.sqneg.v8i16(<8 x i16> %tmp1)
440*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp3
441*9880d681SAndroid Build Coastguard Worker}
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @sqneg_2s(<2 x i32>* %A) nounwind {
444*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sqneg_2s:
445*9880d681SAndroid Build Coastguard Worker;CHECK: sqneg.2s
446*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <2 x i32>, <2 x i32>* %A
447*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqneg.v2i32(<2 x i32> %tmp1)
448*9880d681SAndroid Build Coastguard Worker        ret <2 x i32> %tmp3
449*9880d681SAndroid Build Coastguard Worker}
450*9880d681SAndroid Build Coastguard Worker
451*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @sqneg_4s(<4 x i32>* %A) nounwind {
452*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sqneg_4s:
453*9880d681SAndroid Build Coastguard Worker;CHECK: sqneg.4s
454*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i32>, <4 x i32>* %A
455*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i32> @llvm.aarch64.neon.sqneg.v4i32(<4 x i32> %tmp1)
456*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp3
457*9880d681SAndroid Build Coastguard Worker}
458*9880d681SAndroid Build Coastguard Worker
459*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.sqneg.v8i8(<8 x i8>) nounwind readnone
460*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.aarch64.neon.sqneg.v16i8(<16 x i8>) nounwind readnone
461*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sqneg.v4i16(<4 x i16>) nounwind readnone
462*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.aarch64.neon.sqneg.v8i16(<8 x i16>) nounwind readnone
463*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqneg.v2i32(<2 x i32>) nounwind readnone
464*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.sqneg.v4i32(<4 x i32>) nounwind readnone
465*9880d681SAndroid Build Coastguard Worker
466*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @abs_8b(<8 x i8>* %A) nounwind {
467*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: abs_8b:
468*9880d681SAndroid Build Coastguard Worker;CHECK: abs.8b
469*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i8>, <8 x i8>* %A
470*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i8> @llvm.aarch64.neon.abs.v8i8(<8 x i8> %tmp1)
471*9880d681SAndroid Build Coastguard Worker        ret <8 x i8> %tmp3
472*9880d681SAndroid Build Coastguard Worker}
473*9880d681SAndroid Build Coastguard Worker
474*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @abs_16b(<16 x i8>* %A) nounwind {
475*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: abs_16b:
476*9880d681SAndroid Build Coastguard Worker;CHECK: abs.16b
477*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <16 x i8>, <16 x i8>* %A
478*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <16 x i8> @llvm.aarch64.neon.abs.v16i8(<16 x i8> %tmp1)
479*9880d681SAndroid Build Coastguard Worker        ret <16 x i8> %tmp3
480*9880d681SAndroid Build Coastguard Worker}
481*9880d681SAndroid Build Coastguard Worker
482*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @abs_4h(<4 x i16>* %A) nounwind {
483*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: abs_4h:
484*9880d681SAndroid Build Coastguard Worker;CHECK: abs.4h
485*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i16>, <4 x i16>* %A
486*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i16> @llvm.aarch64.neon.abs.v4i16(<4 x i16> %tmp1)
487*9880d681SAndroid Build Coastguard Worker        ret <4 x i16> %tmp3
488*9880d681SAndroid Build Coastguard Worker}
489*9880d681SAndroid Build Coastguard Worker
490*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @abs_8h(<8 x i16>* %A) nounwind {
491*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: abs_8h:
492*9880d681SAndroid Build Coastguard Worker;CHECK: abs.8h
493*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i16>, <8 x i16>* %A
494*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i16> @llvm.aarch64.neon.abs.v8i16(<8 x i16> %tmp1)
495*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp3
496*9880d681SAndroid Build Coastguard Worker}
497*9880d681SAndroid Build Coastguard Worker
498*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @abs_2s(<2 x i32>* %A) nounwind {
499*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: abs_2s:
500*9880d681SAndroid Build Coastguard Worker;CHECK: abs.2s
501*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <2 x i32>, <2 x i32>* %A
502*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <2 x i32> @llvm.aarch64.neon.abs.v2i32(<2 x i32> %tmp1)
503*9880d681SAndroid Build Coastguard Worker        ret <2 x i32> %tmp3
504*9880d681SAndroid Build Coastguard Worker}
505*9880d681SAndroid Build Coastguard Worker
506*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @abs_4s(<4 x i32>* %A) nounwind {
507*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: abs_4s:
508*9880d681SAndroid Build Coastguard Worker;CHECK: abs.4s
509*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i32>, <4 x i32>* %A
510*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i32> @llvm.aarch64.neon.abs.v4i32(<4 x i32> %tmp1)
511*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp3
512*9880d681SAndroid Build Coastguard Worker}
513*9880d681SAndroid Build Coastguard Worker
514*9880d681SAndroid Build Coastguard Workerdefine <1 x i64> @abs_1d(<1 x i64> %A) nounwind {
515*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: abs_1d:
516*9880d681SAndroid Build Coastguard Worker; CHECK: abs d0, d0
517*9880d681SAndroid Build Coastguard Worker  %abs = call <1 x i64> @llvm.aarch64.neon.abs.v1i64(<1 x i64> %A)
518*9880d681SAndroid Build Coastguard Worker  ret <1 x i64> %abs
519*9880d681SAndroid Build Coastguard Worker}
520*9880d681SAndroid Build Coastguard Worker
521*9880d681SAndroid Build Coastguard Workerdefine i64 @abs_1d_honestly(i64 %A) nounwind {
522*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: abs_1d_honestly:
523*9880d681SAndroid Build Coastguard Worker; CHECK: abs d0, d0
524*9880d681SAndroid Build Coastguard Worker  %abs = call i64 @llvm.aarch64.neon.abs.i64(i64 %A)
525*9880d681SAndroid Build Coastguard Worker  ret i64 %abs
526*9880d681SAndroid Build Coastguard Worker}
527*9880d681SAndroid Build Coastguard Worker
528*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.abs.v8i8(<8 x i8>) nounwind readnone
529*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.aarch64.neon.abs.v16i8(<16 x i8>) nounwind readnone
530*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.abs.v4i16(<4 x i16>) nounwind readnone
531*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.aarch64.neon.abs.v8i16(<8 x i16>) nounwind readnone
532*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.abs.v2i32(<2 x i32>) nounwind readnone
533*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.abs.v4i32(<4 x i32>) nounwind readnone
534*9880d681SAndroid Build Coastguard Workerdeclare <1 x i64> @llvm.aarch64.neon.abs.v1i64(<1 x i64>) nounwind readnone
535*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.neon.abs.i64(i64) nounwind readnone
536*9880d681SAndroid Build Coastguard Worker
537*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @sabal8h(<8 x i8>* %A, <8 x i8>* %B,  <8 x i16>* %C) nounwind {
538*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabal8h:
539*9880d681SAndroid Build Coastguard Worker;CHECK: sabal.8h
540*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i8>, <8 x i8>* %A
541*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <8 x i8>, <8 x i8>* %B
542*9880d681SAndroid Build Coastguard Worker        %tmp3 = load <8 x i16>, <8 x i16>* %C
543*9880d681SAndroid Build Coastguard Worker        %tmp4 = call <8 x i8> @llvm.aarch64.neon.sabd.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
544*9880d681SAndroid Build Coastguard Worker        %tmp4.1 = zext <8 x i8> %tmp4 to <8 x i16>
545*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <8 x i16> %tmp3, %tmp4.1
546*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp5
547*9880d681SAndroid Build Coastguard Worker}
548*9880d681SAndroid Build Coastguard Worker
549*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @sabal4s(<4 x i16>* %A, <4 x i16>* %B, <4 x i32>* %C) nounwind {
550*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabal4s:
551*9880d681SAndroid Build Coastguard Worker;CHECK: sabal.4s
552*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i16>, <4 x i16>* %A
553*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <4 x i16>, <4 x i16>* %B
554*9880d681SAndroid Build Coastguard Worker        %tmp3 = load <4 x i32>, <4 x i32>* %C
555*9880d681SAndroid Build Coastguard Worker        %tmp4 = call <4 x i16> @llvm.aarch64.neon.sabd.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
556*9880d681SAndroid Build Coastguard Worker        %tmp4.1 = zext <4 x i16> %tmp4 to <4 x i32>
557*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <4 x i32> %tmp3, %tmp4.1
558*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp5
559*9880d681SAndroid Build Coastguard Worker}
560*9880d681SAndroid Build Coastguard Worker
561*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @sabal2d(<2 x i32>* %A, <2 x i32>* %B, <2 x i64>* %C) nounwind {
562*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabal2d:
563*9880d681SAndroid Build Coastguard Worker;CHECK: sabal.2d
564*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <2 x i32>, <2 x i32>* %A
565*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <2 x i32>, <2 x i32>* %B
566*9880d681SAndroid Build Coastguard Worker        %tmp3 = load <2 x i64>, <2 x i64>* %C
567*9880d681SAndroid Build Coastguard Worker        %tmp4 = call <2 x i32> @llvm.aarch64.neon.sabd.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
568*9880d681SAndroid Build Coastguard Worker        %tmp4.1 = zext <2 x i32> %tmp4 to <2 x i64>
569*9880d681SAndroid Build Coastguard Worker        %tmp4.1.1 = zext <2 x i32> %tmp4 to <2 x i64>
570*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <2 x i64> %tmp3, %tmp4.1
571*9880d681SAndroid Build Coastguard Worker        ret <2 x i64> %tmp5
572*9880d681SAndroid Build Coastguard Worker}
573*9880d681SAndroid Build Coastguard Worker
574*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @sabal2_8h(<16 x i8>* %A, <16 x i8>* %B, <8 x i16>* %C) nounwind {
575*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabal2_8h:
576*9880d681SAndroid Build Coastguard Worker;CHECK: sabal2.8h
577*9880d681SAndroid Build Coastguard Worker        %load1 = load <16 x i8>, <16 x i8>* %A
578*9880d681SAndroid Build Coastguard Worker        %load2 = load <16 x i8>, <16 x i8>* %B
579*9880d681SAndroid Build Coastguard Worker        %tmp3 = load <8 x i16>, <8 x i16>* %C
580*9880d681SAndroid Build Coastguard Worker        %tmp1 = shufflevector <16 x i8> %load1, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
581*9880d681SAndroid Build Coastguard Worker        %tmp2 = shufflevector <16 x i8> %load2, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
582*9880d681SAndroid Build Coastguard Worker        %tmp4 = call <8 x i8> @llvm.aarch64.neon.sabd.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
583*9880d681SAndroid Build Coastguard Worker        %tmp4.1 = zext <8 x i8> %tmp4 to <8 x i16>
584*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <8 x i16> %tmp3, %tmp4.1
585*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp5
586*9880d681SAndroid Build Coastguard Worker}
587*9880d681SAndroid Build Coastguard Worker
588*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @sabal2_4s(<8 x i16>* %A, <8 x i16>* %B, <4 x i32>* %C) nounwind {
589*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabal2_4s:
590*9880d681SAndroid Build Coastguard Worker;CHECK: sabal2.4s
591*9880d681SAndroid Build Coastguard Worker        %load1 = load <8 x i16>, <8 x i16>* %A
592*9880d681SAndroid Build Coastguard Worker        %load2 = load <8 x i16>, <8 x i16>* %B
593*9880d681SAndroid Build Coastguard Worker        %tmp3 = load <4 x i32>, <4 x i32>* %C
594*9880d681SAndroid Build Coastguard Worker        %tmp1 = shufflevector <8 x i16> %load1, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
595*9880d681SAndroid Build Coastguard Worker        %tmp2 = shufflevector <8 x i16> %load2, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
596*9880d681SAndroid Build Coastguard Worker        %tmp4 = call <4 x i16> @llvm.aarch64.neon.sabd.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
597*9880d681SAndroid Build Coastguard Worker        %tmp4.1 = zext <4 x i16> %tmp4 to <4 x i32>
598*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <4 x i32> %tmp3, %tmp4.1
599*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp5
600*9880d681SAndroid Build Coastguard Worker}
601*9880d681SAndroid Build Coastguard Worker
602*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @sabal2_2d(<4 x i32>* %A, <4 x i32>* %B, <2 x i64>* %C) nounwind {
603*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: sabal2_2d:
604*9880d681SAndroid Build Coastguard Worker;CHECK: sabal2.2d
605*9880d681SAndroid Build Coastguard Worker        %load1 = load <4 x i32>, <4 x i32>* %A
606*9880d681SAndroid Build Coastguard Worker        %load2 = load <4 x i32>, <4 x i32>* %B
607*9880d681SAndroid Build Coastguard Worker        %tmp3 = load <2 x i64>, <2 x i64>* %C
608*9880d681SAndroid Build Coastguard Worker        %tmp1 = shufflevector <4 x i32> %load1, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
609*9880d681SAndroid Build Coastguard Worker        %tmp2 = shufflevector <4 x i32> %load2, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
610*9880d681SAndroid Build Coastguard Worker        %tmp4 = call <2 x i32> @llvm.aarch64.neon.sabd.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
611*9880d681SAndroid Build Coastguard Worker        %tmp4.1 = zext <2 x i32> %tmp4 to <2 x i64>
612*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <2 x i64> %tmp3, %tmp4.1
613*9880d681SAndroid Build Coastguard Worker        ret <2 x i64> %tmp5
614*9880d681SAndroid Build Coastguard Worker}
615*9880d681SAndroid Build Coastguard Worker
616*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @uabal8h(<8 x i8>* %A, <8 x i8>* %B,  <8 x i16>* %C) nounwind {
617*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabal8h:
618*9880d681SAndroid Build Coastguard Worker;CHECK: uabal.8h
619*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i8>, <8 x i8>* %A
620*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <8 x i8>, <8 x i8>* %B
621*9880d681SAndroid Build Coastguard Worker        %tmp3 = load <8 x i16>, <8 x i16>* %C
622*9880d681SAndroid Build Coastguard Worker        %tmp4 = call <8 x i8> @llvm.aarch64.neon.uabd.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
623*9880d681SAndroid Build Coastguard Worker        %tmp4.1 = zext <8 x i8> %tmp4 to <8 x i16>
624*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <8 x i16> %tmp3, %tmp4.1
625*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp5
626*9880d681SAndroid Build Coastguard Worker}
627*9880d681SAndroid Build Coastguard Worker
628*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @uabal4s(<4 x i16>* %A, <4 x i16>* %B, <4 x i32>* %C) nounwind {
629*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabal4s:
630*9880d681SAndroid Build Coastguard Worker;CHECK: uabal.4s
631*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i16>, <4 x i16>* %A
632*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <4 x i16>, <4 x i16>* %B
633*9880d681SAndroid Build Coastguard Worker        %tmp3 = load <4 x i32>, <4 x i32>* %C
634*9880d681SAndroid Build Coastguard Worker        %tmp4 = call <4 x i16> @llvm.aarch64.neon.uabd.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
635*9880d681SAndroid Build Coastguard Worker        %tmp4.1 = zext <4 x i16> %tmp4 to <4 x i32>
636*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <4 x i32> %tmp3, %tmp4.1
637*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp5
638*9880d681SAndroid Build Coastguard Worker}
639*9880d681SAndroid Build Coastguard Worker
640*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @uabal2d(<2 x i32>* %A, <2 x i32>* %B, <2 x i64>* %C) nounwind {
641*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabal2d:
642*9880d681SAndroid Build Coastguard Worker;CHECK: uabal.2d
643*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <2 x i32>, <2 x i32>* %A
644*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <2 x i32>, <2 x i32>* %B
645*9880d681SAndroid Build Coastguard Worker        %tmp3 = load <2 x i64>, <2 x i64>* %C
646*9880d681SAndroid Build Coastguard Worker        %tmp4 = call <2 x i32> @llvm.aarch64.neon.uabd.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
647*9880d681SAndroid Build Coastguard Worker        %tmp4.1 = zext <2 x i32> %tmp4 to <2 x i64>
648*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <2 x i64> %tmp3, %tmp4.1
649*9880d681SAndroid Build Coastguard Worker        ret <2 x i64> %tmp5
650*9880d681SAndroid Build Coastguard Worker}
651*9880d681SAndroid Build Coastguard Worker
652*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @uabal2_8h(<16 x i8>* %A, <16 x i8>* %B, <8 x i16>* %C) nounwind {
653*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabal2_8h:
654*9880d681SAndroid Build Coastguard Worker;CHECK: uabal2.8h
655*9880d681SAndroid Build Coastguard Worker        %load1 = load <16 x i8>, <16 x i8>* %A
656*9880d681SAndroid Build Coastguard Worker        %load2 = load <16 x i8>, <16 x i8>* %B
657*9880d681SAndroid Build Coastguard Worker        %tmp3 = load <8 x i16>, <8 x i16>* %C
658*9880d681SAndroid Build Coastguard Worker        %tmp1 = shufflevector <16 x i8> %load1, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
659*9880d681SAndroid Build Coastguard Worker        %tmp2 = shufflevector <16 x i8> %load2, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
660*9880d681SAndroid Build Coastguard Worker        %tmp4 = call <8 x i8> @llvm.aarch64.neon.uabd.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
661*9880d681SAndroid Build Coastguard Worker        %tmp4.1 = zext <8 x i8> %tmp4 to <8 x i16>
662*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <8 x i16> %tmp3, %tmp4.1
663*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp5
664*9880d681SAndroid Build Coastguard Worker}
665*9880d681SAndroid Build Coastguard Worker
666*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @uabal2_4s(<8 x i16>* %A, <8 x i16>* %B, <4 x i32>* %C) nounwind {
667*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabal2_4s:
668*9880d681SAndroid Build Coastguard Worker;CHECK: uabal2.4s
669*9880d681SAndroid Build Coastguard Worker        %load1 = load <8 x i16>, <8 x i16>* %A
670*9880d681SAndroid Build Coastguard Worker        %load2 = load <8 x i16>, <8 x i16>* %B
671*9880d681SAndroid Build Coastguard Worker        %tmp3 = load <4 x i32>, <4 x i32>* %C
672*9880d681SAndroid Build Coastguard Worker        %tmp1 = shufflevector <8 x i16> %load1, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
673*9880d681SAndroid Build Coastguard Worker        %tmp2 = shufflevector <8 x i16> %load2, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
674*9880d681SAndroid Build Coastguard Worker        %tmp4 = call <4 x i16> @llvm.aarch64.neon.uabd.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
675*9880d681SAndroid Build Coastguard Worker        %tmp4.1 = zext <4 x i16> %tmp4 to <4 x i32>
676*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <4 x i32> %tmp3, %tmp4.1
677*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp5
678*9880d681SAndroid Build Coastguard Worker}
679*9880d681SAndroid Build Coastguard Worker
680*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @uabal2_2d(<4 x i32>* %A, <4 x i32>* %B, <2 x i64>* %C) nounwind {
681*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uabal2_2d:
682*9880d681SAndroid Build Coastguard Worker;CHECK: uabal2.2d
683*9880d681SAndroid Build Coastguard Worker        %load1 = load <4 x i32>, <4 x i32>* %A
684*9880d681SAndroid Build Coastguard Worker        %load2 = load <4 x i32>, <4 x i32>* %B
685*9880d681SAndroid Build Coastguard Worker        %tmp3 = load <2 x i64>, <2 x i64>* %C
686*9880d681SAndroid Build Coastguard Worker        %tmp1 = shufflevector <4 x i32> %load1, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
687*9880d681SAndroid Build Coastguard Worker        %tmp2 = shufflevector <4 x i32> %load2, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
688*9880d681SAndroid Build Coastguard Worker        %tmp4 = call <2 x i32> @llvm.aarch64.neon.uabd.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
689*9880d681SAndroid Build Coastguard Worker        %tmp4.1 = zext <2 x i32> %tmp4 to <2 x i64>
690*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <2 x i64> %tmp3, %tmp4.1
691*9880d681SAndroid Build Coastguard Worker        ret <2 x i64> %tmp5
692*9880d681SAndroid Build Coastguard Worker}
693*9880d681SAndroid Build Coastguard Worker
694*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @saba_8b(<8 x i8>* %A, <8 x i8>* %B, <8 x i8>* %C) nounwind {
695*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: saba_8b:
696*9880d681SAndroid Build Coastguard Worker;CHECK: saba.8b
697*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i8>, <8 x i8>* %A
698*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <8 x i8>, <8 x i8>* %B
699*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i8> @llvm.aarch64.neon.sabd.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
700*9880d681SAndroid Build Coastguard Worker        %tmp4 = load <8 x i8>, <8 x i8>* %C
701*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <8 x i8> %tmp3, %tmp4
702*9880d681SAndroid Build Coastguard Worker        ret <8 x i8> %tmp5
703*9880d681SAndroid Build Coastguard Worker}
704*9880d681SAndroid Build Coastguard Worker
705*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @saba_16b(<16 x i8>* %A, <16 x i8>* %B, <16 x i8>* %C) nounwind {
706*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: saba_16b:
707*9880d681SAndroid Build Coastguard Worker;CHECK: saba.16b
708*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <16 x i8>, <16 x i8>* %A
709*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <16 x i8>, <16 x i8>* %B
710*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <16 x i8> @llvm.aarch64.neon.sabd.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
711*9880d681SAndroid Build Coastguard Worker        %tmp4 = load <16 x i8>, <16 x i8>* %C
712*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <16 x i8> %tmp3, %tmp4
713*9880d681SAndroid Build Coastguard Worker        ret <16 x i8> %tmp5
714*9880d681SAndroid Build Coastguard Worker}
715*9880d681SAndroid Build Coastguard Worker
716*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @saba_4h(<4 x i16>* %A, <4 x i16>* %B, <4 x i16>* %C) nounwind {
717*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: saba_4h:
718*9880d681SAndroid Build Coastguard Worker;CHECK: saba.4h
719*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i16>, <4 x i16>* %A
720*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <4 x i16>, <4 x i16>* %B
721*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i16> @llvm.aarch64.neon.sabd.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
722*9880d681SAndroid Build Coastguard Worker        %tmp4 = load <4 x i16>, <4 x i16>* %C
723*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <4 x i16> %tmp3, %tmp4
724*9880d681SAndroid Build Coastguard Worker        ret <4 x i16> %tmp5
725*9880d681SAndroid Build Coastguard Worker}
726*9880d681SAndroid Build Coastguard Worker
727*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @saba_8h(<8 x i16>* %A, <8 x i16>* %B, <8 x i16>* %C) nounwind {
728*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: saba_8h:
729*9880d681SAndroid Build Coastguard Worker;CHECK: saba.8h
730*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i16>, <8 x i16>* %A
731*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <8 x i16>, <8 x i16>* %B
732*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i16> @llvm.aarch64.neon.sabd.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
733*9880d681SAndroid Build Coastguard Worker        %tmp4 = load <8 x i16>, <8 x i16>* %C
734*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <8 x i16> %tmp3, %tmp4
735*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp5
736*9880d681SAndroid Build Coastguard Worker}
737*9880d681SAndroid Build Coastguard Worker
738*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @saba_2s(<2 x i32>* %A, <2 x i32>* %B, <2 x i32>* %C) nounwind {
739*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: saba_2s:
740*9880d681SAndroid Build Coastguard Worker;CHECK: saba.2s
741*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <2 x i32>, <2 x i32>* %A
742*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <2 x i32>, <2 x i32>* %B
743*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <2 x i32> @llvm.aarch64.neon.sabd.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
744*9880d681SAndroid Build Coastguard Worker        %tmp4 = load <2 x i32>, <2 x i32>* %C
745*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <2 x i32> %tmp3, %tmp4
746*9880d681SAndroid Build Coastguard Worker        ret <2 x i32> %tmp5
747*9880d681SAndroid Build Coastguard Worker}
748*9880d681SAndroid Build Coastguard Worker
749*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @saba_4s(<4 x i32>* %A, <4 x i32>* %B, <4 x i32>* %C) nounwind {
750*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: saba_4s:
751*9880d681SAndroid Build Coastguard Worker;CHECK: saba.4s
752*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i32>, <4 x i32>* %A
753*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <4 x i32>, <4 x i32>* %B
754*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i32> @llvm.aarch64.neon.sabd.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
755*9880d681SAndroid Build Coastguard Worker        %tmp4 = load <4 x i32>, <4 x i32>* %C
756*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <4 x i32> %tmp3, %tmp4
757*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp5
758*9880d681SAndroid Build Coastguard Worker}
759*9880d681SAndroid Build Coastguard Worker
760*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @uaba_8b(<8 x i8>* %A, <8 x i8>* %B, <8 x i8>* %C) nounwind {
761*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uaba_8b:
762*9880d681SAndroid Build Coastguard Worker;CHECK: uaba.8b
763*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i8>, <8 x i8>* %A
764*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <8 x i8>, <8 x i8>* %B
765*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i8> @llvm.aarch64.neon.uabd.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
766*9880d681SAndroid Build Coastguard Worker        %tmp4 = load <8 x i8>, <8 x i8>* %C
767*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <8 x i8> %tmp3, %tmp4
768*9880d681SAndroid Build Coastguard Worker        ret <8 x i8> %tmp5
769*9880d681SAndroid Build Coastguard Worker}
770*9880d681SAndroid Build Coastguard Worker
771*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @uaba_16b(<16 x i8>* %A, <16 x i8>* %B, <16 x i8>* %C) nounwind {
772*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uaba_16b:
773*9880d681SAndroid Build Coastguard Worker;CHECK: uaba.16b
774*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <16 x i8>, <16 x i8>* %A
775*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <16 x i8>, <16 x i8>* %B
776*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <16 x i8> @llvm.aarch64.neon.uabd.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
777*9880d681SAndroid Build Coastguard Worker        %tmp4 = load <16 x i8>, <16 x i8>* %C
778*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <16 x i8> %tmp3, %tmp4
779*9880d681SAndroid Build Coastguard Worker        ret <16 x i8> %tmp5
780*9880d681SAndroid Build Coastguard Worker}
781*9880d681SAndroid Build Coastguard Worker
782*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @uaba_4h(<4 x i16>* %A, <4 x i16>* %B, <4 x i16>* %C) nounwind {
783*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uaba_4h:
784*9880d681SAndroid Build Coastguard Worker;CHECK: uaba.4h
785*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i16>, <4 x i16>* %A
786*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <4 x i16>, <4 x i16>* %B
787*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i16> @llvm.aarch64.neon.uabd.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
788*9880d681SAndroid Build Coastguard Worker        %tmp4 = load <4 x i16>, <4 x i16>* %C
789*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <4 x i16> %tmp3, %tmp4
790*9880d681SAndroid Build Coastguard Worker        ret <4 x i16> %tmp5
791*9880d681SAndroid Build Coastguard Worker}
792*9880d681SAndroid Build Coastguard Worker
793*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @uaba_8h(<8 x i16>* %A, <8 x i16>* %B, <8 x i16>* %C) nounwind {
794*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uaba_8h:
795*9880d681SAndroid Build Coastguard Worker;CHECK: uaba.8h
796*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <8 x i16>, <8 x i16>* %A
797*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <8 x i16>, <8 x i16>* %B
798*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <8 x i16> @llvm.aarch64.neon.uabd.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
799*9880d681SAndroid Build Coastguard Worker        %tmp4 = load <8 x i16>, <8 x i16>* %C
800*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <8 x i16> %tmp3, %tmp4
801*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %tmp5
802*9880d681SAndroid Build Coastguard Worker}
803*9880d681SAndroid Build Coastguard Worker
804*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @uaba_2s(<2 x i32>* %A, <2 x i32>* %B, <2 x i32>* %C) nounwind {
805*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uaba_2s:
806*9880d681SAndroid Build Coastguard Worker;CHECK: uaba.2s
807*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <2 x i32>, <2 x i32>* %A
808*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <2 x i32>, <2 x i32>* %B
809*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <2 x i32> @llvm.aarch64.neon.uabd.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
810*9880d681SAndroid Build Coastguard Worker        %tmp4 = load <2 x i32>, <2 x i32>* %C
811*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <2 x i32> %tmp3, %tmp4
812*9880d681SAndroid Build Coastguard Worker        ret <2 x i32> %tmp5
813*9880d681SAndroid Build Coastguard Worker}
814*9880d681SAndroid Build Coastguard Worker
815*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @uaba_4s(<4 x i32>* %A, <4 x i32>* %B, <4 x i32>* %C) nounwind {
816*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: uaba_4s:
817*9880d681SAndroid Build Coastguard Worker;CHECK: uaba.4s
818*9880d681SAndroid Build Coastguard Worker        %tmp1 = load <4 x i32>, <4 x i32>* %A
819*9880d681SAndroid Build Coastguard Worker        %tmp2 = load <4 x i32>, <4 x i32>* %B
820*9880d681SAndroid Build Coastguard Worker        %tmp3 = call <4 x i32> @llvm.aarch64.neon.uabd.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
821*9880d681SAndroid Build Coastguard Worker        %tmp4 = load <4 x i32>, <4 x i32>* %C
822*9880d681SAndroid Build Coastguard Worker        %tmp5 = add <4 x i32> %tmp3, %tmp4
823*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %tmp5
824*9880d681SAndroid Build Coastguard Worker}
825*9880d681SAndroid Build Coastguard Worker
826*9880d681SAndroid Build Coastguard Worker; Scalar FABD
827*9880d681SAndroid Build Coastguard Workerdefine float @fabds(float %a, float %b) nounwind {
828*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fabds:
829*9880d681SAndroid Build Coastguard Worker; CHECK: fabd s0, s0, s1
830*9880d681SAndroid Build Coastguard Worker  %vabd.i = tail call float @llvm.aarch64.sisd.fabd.f32(float %a, float %b) nounwind
831*9880d681SAndroid Build Coastguard Worker  ret float %vabd.i
832*9880d681SAndroid Build Coastguard Worker}
833*9880d681SAndroid Build Coastguard Worker
834*9880d681SAndroid Build Coastguard Workerdefine double @fabdd(double %a, double %b) nounwind {
835*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fabdd:
836*9880d681SAndroid Build Coastguard Worker; CHECK: fabd d0, d0, d1
837*9880d681SAndroid Build Coastguard Worker  %vabd.i = tail call double @llvm.aarch64.sisd.fabd.f64(double %a, double %b) nounwind
838*9880d681SAndroid Build Coastguard Worker  ret double %vabd.i
839*9880d681SAndroid Build Coastguard Worker}
840*9880d681SAndroid Build Coastguard Worker
841*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.aarch64.sisd.fabd.f64(double, double) nounwind readnone
842*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.aarch64.sisd.fabd.f32(float, float) nounwind readnone
843*9880d681SAndroid Build Coastguard Worker
844*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @uabdl_from_extract_dup(<4 x i32> %lhs, i32 %rhs) {
845*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: uabdl_from_extract_dup:
846*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ext.16b
847*9880d681SAndroid Build Coastguard Worker; CHECK: uabdl2.2d
848*9880d681SAndroid Build Coastguard Worker  %rhsvec.tmp = insertelement <2 x i32> undef, i32 %rhs, i32 0
849*9880d681SAndroid Build Coastguard Worker  %rhsvec = insertelement <2 x i32> %rhsvec.tmp, i32 %rhs, i32 1
850*9880d681SAndroid Build Coastguard Worker
851*9880d681SAndroid Build Coastguard Worker  %lhs.high = shufflevector <4 x i32> %lhs, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
852*9880d681SAndroid Build Coastguard Worker
853*9880d681SAndroid Build Coastguard Worker  %res = tail call <2 x i32> @llvm.aarch64.neon.uabd.v2i32(<2 x i32> %lhs.high, <2 x i32> %rhsvec) nounwind
854*9880d681SAndroid Build Coastguard Worker  %res1 = zext <2 x i32> %res to <2 x i64>
855*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res1
856*9880d681SAndroid Build Coastguard Worker}
857*9880d681SAndroid Build Coastguard Worker
858*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @sabdl_from_extract_dup(<4 x i32> %lhs, i32 %rhs) {
859*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: sabdl_from_extract_dup:
860*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ext.16b
861*9880d681SAndroid Build Coastguard Worker; CHECK: sabdl2.2d
862*9880d681SAndroid Build Coastguard Worker  %rhsvec.tmp = insertelement <2 x i32> undef, i32 %rhs, i32 0
863*9880d681SAndroid Build Coastguard Worker  %rhsvec = insertelement <2 x i32> %rhsvec.tmp, i32 %rhs, i32 1
864*9880d681SAndroid Build Coastguard Worker
865*9880d681SAndroid Build Coastguard Worker  %lhs.high = shufflevector <4 x i32> %lhs, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
866*9880d681SAndroid Build Coastguard Worker
867*9880d681SAndroid Build Coastguard Worker  %res = tail call <2 x i32> @llvm.aarch64.neon.sabd.v2i32(<2 x i32> %lhs.high, <2 x i32> %rhsvec) nounwind
868*9880d681SAndroid Build Coastguard Worker  %res1 = zext <2 x i32> %res to <2 x i64>
869*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res1
870*9880d681SAndroid Build Coastguard Worker}
871*9880d681SAndroid Build Coastguard Worker
872*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @abspattern1(<2 x i32> %a) nounwind {
873*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: abspattern1:
874*9880d681SAndroid Build Coastguard Worker; CHECK: abs.2s
875*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
876*9880d681SAndroid Build Coastguard Worker        %tmp1neg = sub <2 x i32> zeroinitializer, %a
877*9880d681SAndroid Build Coastguard Worker        %b = icmp sge <2 x i32> %a, zeroinitializer
878*9880d681SAndroid Build Coastguard Worker        %abs = select <2 x i1> %b, <2 x i32> %a, <2 x i32> %tmp1neg
879*9880d681SAndroid Build Coastguard Worker        ret <2 x i32> %abs
880*9880d681SAndroid Build Coastguard Worker}
881*9880d681SAndroid Build Coastguard Worker
882*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @abspattern2(<4 x i16> %a) nounwind {
883*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: abspattern2:
884*9880d681SAndroid Build Coastguard Worker; CHECK: abs.4h
885*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
886*9880d681SAndroid Build Coastguard Worker        %tmp1neg = sub <4 x i16> zeroinitializer, %a
887*9880d681SAndroid Build Coastguard Worker        %b = icmp sgt <4 x i16> %a, zeroinitializer
888*9880d681SAndroid Build Coastguard Worker        %abs = select <4 x i1> %b, <4 x i16> %a, <4 x i16> %tmp1neg
889*9880d681SAndroid Build Coastguard Worker        ret <4 x i16> %abs
890*9880d681SAndroid Build Coastguard Worker}
891*9880d681SAndroid Build Coastguard Worker
892*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @abspattern3(<8 x i8> %a) nounwind {
893*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: abspattern3:
894*9880d681SAndroid Build Coastguard Worker; CHECK: abs.8b
895*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
896*9880d681SAndroid Build Coastguard Worker        %tmp1neg = sub <8 x i8> zeroinitializer, %a
897*9880d681SAndroid Build Coastguard Worker        %b = icmp slt <8 x i8> %a, zeroinitializer
898*9880d681SAndroid Build Coastguard Worker        %abs = select <8 x i1> %b, <8 x i8> %tmp1neg, <8 x i8> %a
899*9880d681SAndroid Build Coastguard Worker        ret <8 x i8> %abs
900*9880d681SAndroid Build Coastguard Worker}
901*9880d681SAndroid Build Coastguard Worker
902*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @abspattern4(<4 x i32> %a) nounwind {
903*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: abspattern4:
904*9880d681SAndroid Build Coastguard Worker; CHECK: abs.4s
905*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
906*9880d681SAndroid Build Coastguard Worker        %tmp1neg = sub <4 x i32> zeroinitializer, %a
907*9880d681SAndroid Build Coastguard Worker        %b = icmp sge <4 x i32> %a, zeroinitializer
908*9880d681SAndroid Build Coastguard Worker        %abs = select <4 x i1> %b, <4 x i32> %a, <4 x i32> %tmp1neg
909*9880d681SAndroid Build Coastguard Worker        ret <4 x i32> %abs
910*9880d681SAndroid Build Coastguard Worker}
911*9880d681SAndroid Build Coastguard Worker
912*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @abspattern5(<8 x i16> %a) nounwind {
913*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: abspattern5:
914*9880d681SAndroid Build Coastguard Worker; CHECK: abs.8h
915*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
916*9880d681SAndroid Build Coastguard Worker        %tmp1neg = sub <8 x i16> zeroinitializer, %a
917*9880d681SAndroid Build Coastguard Worker        %b = icmp sgt <8 x i16> %a, zeroinitializer
918*9880d681SAndroid Build Coastguard Worker        %abs = select <8 x i1> %b, <8 x i16> %a, <8 x i16> %tmp1neg
919*9880d681SAndroid Build Coastguard Worker        ret <8 x i16> %abs
920*9880d681SAndroid Build Coastguard Worker}
921*9880d681SAndroid Build Coastguard Worker
922*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @abspattern6(<16 x i8> %a) nounwind {
923*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: abspattern6:
924*9880d681SAndroid Build Coastguard Worker; CHECK: abs.16b
925*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
926*9880d681SAndroid Build Coastguard Worker        %tmp1neg = sub <16 x i8> zeroinitializer, %a
927*9880d681SAndroid Build Coastguard Worker        %b = icmp slt <16 x i8> %a, zeroinitializer
928*9880d681SAndroid Build Coastguard Worker        %abs = select <16 x i1> %b, <16 x i8> %tmp1neg, <16 x i8> %a
929*9880d681SAndroid Build Coastguard Worker        ret <16 x i8> %abs
930*9880d681SAndroid Build Coastguard Worker}
931*9880d681SAndroid Build Coastguard Worker
932*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @abspattern7(<2 x i64> %a) nounwind {
933*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: abspattern7:
934*9880d681SAndroid Build Coastguard Worker; CHECK: abs.2d
935*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret
936*9880d681SAndroid Build Coastguard Worker        %tmp1neg = sub <2 x i64> zeroinitializer, %a
937*9880d681SAndroid Build Coastguard Worker        %b = icmp sle <2 x i64> %a, zeroinitializer
938*9880d681SAndroid Build Coastguard Worker        %abs = select <2 x i1> %b, <2 x i64> %tmp1neg, <2 x i64> %a
939*9880d681SAndroid Build Coastguard Worker        ret <2 x i64> %abs
940*9880d681SAndroid Build Coastguard Worker}
941