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