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 Workerdefine <8 x i8> @subhn8b(<8 x i16>* %A, <8 x i16>* %B) nounwind { 4*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: subhn8b: 5*9880d681SAndroid Build Coastguard Worker;CHECK: subhn.8b 6*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 7*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %B 8*9880d681SAndroid Build Coastguard Worker %tmp3 = call <8 x i8> @llvm.aarch64.neon.subhn.v8i8(<8 x i16> %tmp1, <8 x i16> %tmp2) 9*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp3 10*9880d681SAndroid Build Coastguard Worker} 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @subhn4h(<4 x i32>* %A, <4 x i32>* %B) nounwind { 13*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: subhn4h: 14*9880d681SAndroid Build Coastguard Worker;CHECK: subhn.4h 15*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 16*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i32>, <4 x i32>* %B 17*9880d681SAndroid Build Coastguard Worker %tmp3 = call <4 x i16> @llvm.aarch64.neon.subhn.v4i16(<4 x i32> %tmp1, <4 x i32> %tmp2) 18*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp3 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @subhn2s(<2 x i64>* %A, <2 x i64>* %B) nounwind { 22*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: subhn2s: 23*9880d681SAndroid Build Coastguard Worker;CHECK: subhn.2s 24*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 25*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i64>, <2 x i64>* %B 26*9880d681SAndroid Build Coastguard Worker %tmp3 = call <2 x i32> @llvm.aarch64.neon.subhn.v2i32(<2 x i64> %tmp1, <2 x i64> %tmp2) 27*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp3 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @subhn2_16b(<8 x i16> %a, <8 x i16> %b) nounwind { 31*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: subhn2_16b: 32*9880d681SAndroid Build Coastguard Worker;CHECK: subhn.8b 33*9880d681SAndroid Build Coastguard Worker;CHECK-NEXT: subhn2.16b 34*9880d681SAndroid Build Coastguard Worker %vsubhn2.i = tail call <8 x i8> @llvm.aarch64.neon.subhn.v8i8(<8 x i16> %a, <8 x i16> %b) nounwind 35*9880d681SAndroid Build Coastguard Worker %vsubhn_high2.i = tail call <8 x i8> @llvm.aarch64.neon.subhn.v8i8(<8 x i16> %a, <8 x i16> %b) nounwind 36*9880d681SAndroid Build Coastguard Worker %res = shufflevector <8 x i8> %vsubhn2.i, <8 x i8> %vsubhn_high2.i, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 37*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @subhn2_8h(<4 x i32> %a, <4 x i32> %b) nounwind { 41*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: subhn2_8h: 42*9880d681SAndroid Build Coastguard Worker;CHECK: subhn.4h 43*9880d681SAndroid Build Coastguard Worker;CHECK-NEXT: subhn2.8h 44*9880d681SAndroid Build Coastguard Worker %vsubhn2.i = tail call <4 x i16> @llvm.aarch64.neon.subhn.v4i16(<4 x i32> %a, <4 x i32> %b) nounwind 45*9880d681SAndroid Build Coastguard Worker %vsubhn_high3.i = tail call <4 x i16> @llvm.aarch64.neon.subhn.v4i16(<4 x i32> %a, <4 x i32> %b) nounwind 46*9880d681SAndroid Build Coastguard Worker %res = shufflevector <4 x i16> %vsubhn2.i, <4 x i16> %vsubhn_high3.i, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 47*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @subhn2_4s(<2 x i64> %a, <2 x i64> %b) nounwind { 51*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: subhn2_4s: 52*9880d681SAndroid Build Coastguard Worker;CHECK: subhn.2s 53*9880d681SAndroid Build Coastguard Worker;CHECK-NEXT: subhn2.4s 54*9880d681SAndroid Build Coastguard Worker %vsubhn2.i = tail call <2 x i32> @llvm.aarch64.neon.subhn.v2i32(<2 x i64> %a, <2 x i64> %b) nounwind 55*9880d681SAndroid Build Coastguard Worker %vsubhn_high3.i = tail call <2 x i32> @llvm.aarch64.neon.subhn.v2i32(<2 x i64> %a, <2 x i64> %b) nounwind 56*9880d681SAndroid Build Coastguard Worker %res = shufflevector <2 x i32> %vsubhn2.i, <2 x i32> %vsubhn_high3.i, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 57*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.subhn.v2i32(<2 x i64>, <2 x i64>) nounwind readnone 61*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.subhn.v4i16(<4 x i32>, <4 x i32>) nounwind readnone 62*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.subhn.v8i8(<8 x i16>, <8 x i16>) nounwind readnone 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @rsubhn8b(<8 x i16>* %A, <8 x i16>* %B) nounwind { 65*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: rsubhn8b: 66*9880d681SAndroid Build Coastguard Worker;CHECK: rsubhn.8b 67*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 68*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %B 69*9880d681SAndroid Build Coastguard Worker %tmp3 = call <8 x i8> @llvm.aarch64.neon.rsubhn.v8i8(<8 x i16> %tmp1, <8 x i16> %tmp2) 70*9880d681SAndroid Build Coastguard Worker ret <8 x i8> %tmp3 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @rsubhn4h(<4 x i32>* %A, <4 x i32>* %B) nounwind { 74*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: rsubhn4h: 75*9880d681SAndroid Build Coastguard Worker;CHECK: rsubhn.4h 76*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 77*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i32>, <4 x i32>* %B 78*9880d681SAndroid Build Coastguard Worker %tmp3 = call <4 x i16> @llvm.aarch64.neon.rsubhn.v4i16(<4 x i32> %tmp1, <4 x i32> %tmp2) 79*9880d681SAndroid Build Coastguard Worker ret <4 x i16> %tmp3 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @rsubhn2s(<2 x i64>* %A, <2 x i64>* %B) nounwind { 83*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: rsubhn2s: 84*9880d681SAndroid Build Coastguard Worker;CHECK: rsubhn.2s 85*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 86*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i64>, <2 x i64>* %B 87*9880d681SAndroid Build Coastguard Worker %tmp3 = call <2 x i32> @llvm.aarch64.neon.rsubhn.v2i32(<2 x i64> %tmp1, <2 x i64> %tmp2) 88*9880d681SAndroid Build Coastguard Worker ret <2 x i32> %tmp3 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @rsubhn2_16b(<8 x i16> %a, <8 x i16> %b) nounwind { 92*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: rsubhn2_16b: 93*9880d681SAndroid Build Coastguard Worker;CHECK: rsubhn.8b 94*9880d681SAndroid Build Coastguard Worker;CHECK-NEXT: rsubhn2.16b 95*9880d681SAndroid Build Coastguard Worker %vrsubhn2.i = tail call <8 x i8> @llvm.aarch64.neon.rsubhn.v8i8(<8 x i16> %a, <8 x i16> %b) nounwind 96*9880d681SAndroid Build Coastguard Worker %vrsubhn_high2.i = tail call <8 x i8> @llvm.aarch64.neon.rsubhn.v8i8(<8 x i16> %a, <8 x i16> %b) nounwind 97*9880d681SAndroid Build Coastguard Worker %res = shufflevector <8 x i8> %vrsubhn2.i, <8 x i8> %vrsubhn_high2.i, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 98*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @rsubhn2_8h(<4 x i32> %a, <4 x i32> %b) nounwind { 102*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: rsubhn2_8h: 103*9880d681SAndroid Build Coastguard Worker;CHECK: rsubhn.4h 104*9880d681SAndroid Build Coastguard Worker;CHECK-NEXT: rsubhn2.8h 105*9880d681SAndroid Build Coastguard Worker %vrsubhn2.i = tail call <4 x i16> @llvm.aarch64.neon.rsubhn.v4i16(<4 x i32> %a, <4 x i32> %b) nounwind 106*9880d681SAndroid Build Coastguard Worker %vrsubhn_high3.i = tail call <4 x i16> @llvm.aarch64.neon.rsubhn.v4i16(<4 x i32> %a, <4 x i32> %b) nounwind 107*9880d681SAndroid Build Coastguard Worker %res = shufflevector <4 x i16> %vrsubhn2.i, <4 x i16> %vrsubhn_high3.i, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 108*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 109*9880d681SAndroid Build Coastguard Worker} 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @rsubhn2_4s(<2 x i64> %a, <2 x i64> %b) nounwind { 112*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: rsubhn2_4s: 113*9880d681SAndroid Build Coastguard Worker;CHECK: rsubhn.2s 114*9880d681SAndroid Build Coastguard Worker;CHECK-NEXT: rsubhn2.4s 115*9880d681SAndroid Build Coastguard Worker %vrsubhn2.i = tail call <2 x i32> @llvm.aarch64.neon.rsubhn.v2i32(<2 x i64> %a, <2 x i64> %b) nounwind 116*9880d681SAndroid Build Coastguard Worker %vrsubhn_high3.i = tail call <2 x i32> @llvm.aarch64.neon.rsubhn.v2i32(<2 x i64> %a, <2 x i64> %b) nounwind 117*9880d681SAndroid Build Coastguard Worker %res = shufflevector <2 x i32> %vrsubhn2.i, <2 x i32> %vrsubhn_high3.i, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 118*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 119*9880d681SAndroid Build Coastguard Worker} 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.rsubhn.v2i32(<2 x i64>, <2 x i64>) nounwind readnone 122*9880d681SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.rsubhn.v4i16(<4 x i32>, <4 x i32>) nounwind readnone 123*9880d681SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.rsubhn.v8i8(<8 x i16>, <8 x i16>) nounwind readnone 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ssubl8h(<8 x i8>* %A, <8 x i8>* %B) nounwind { 126*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: ssubl8h: 127*9880d681SAndroid Build Coastguard Worker;CHECK: ssubl.8h 128*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 129*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %B 130*9880d681SAndroid Build Coastguard Worker %tmp3 = sext <8 x i8> %tmp1 to <8 x i16> 131*9880d681SAndroid Build Coastguard Worker %tmp4 = sext <8 x i8> %tmp2 to <8 x i16> 132*9880d681SAndroid Build Coastguard Worker %tmp5 = sub <8 x i16> %tmp3, %tmp4 133*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp5 134*9880d681SAndroid Build Coastguard Worker} 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ssubl4s(<4 x i16>* %A, <4 x i16>* %B) nounwind { 137*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: ssubl4s: 138*9880d681SAndroid Build Coastguard Worker;CHECK: ssubl.4s 139*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %A 140*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i16>, <4 x i16>* %B 141*9880d681SAndroid Build Coastguard Worker %tmp3 = sext <4 x i16> %tmp1 to <4 x i32> 142*9880d681SAndroid Build Coastguard Worker %tmp4 = sext <4 x i16> %tmp2 to <4 x i32> 143*9880d681SAndroid Build Coastguard Worker %tmp5 = sub <4 x i32> %tmp3, %tmp4 144*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp5 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ssubl2d(<2 x i32>* %A, <2 x i32>* %B) nounwind { 148*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: ssubl2d: 149*9880d681SAndroid Build Coastguard Worker;CHECK: ssubl.2d 150*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 151*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i32>, <2 x i32>* %B 152*9880d681SAndroid Build Coastguard Worker %tmp3 = sext <2 x i32> %tmp1 to <2 x i64> 153*9880d681SAndroid Build Coastguard Worker %tmp4 = sext <2 x i32> %tmp2 to <2 x i64> 154*9880d681SAndroid Build Coastguard Worker %tmp5 = sub <2 x i64> %tmp3, %tmp4 155*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp5 156*9880d681SAndroid Build Coastguard Worker} 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ssubl2_8h(<16 x i8>* %A, <16 x i8>* %B) nounwind { 159*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: ssubl2_8h: 160*9880d681SAndroid Build Coastguard Worker;CHECK: ssubl2.8h 161*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %A 162*9880d681SAndroid Build Coastguard Worker %high1 = shufflevector <16 x i8> %tmp1, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 163*9880d681SAndroid Build Coastguard Worker %ext1 = sext <8 x i8> %high1 to <8 x i16> 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %B 166*9880d681SAndroid Build Coastguard Worker %high2 = shufflevector <16 x i8> %tmp2, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 167*9880d681SAndroid Build Coastguard Worker %ext2 = sext <8 x i8> %high2 to <8 x i16> 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Worker %res = sub <8 x i16> %ext1, %ext2 170*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ssubl2_4s(<8 x i16>* %A, <8 x i16>* %B) nounwind { 174*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: ssubl2_4s: 175*9880d681SAndroid Build Coastguard Worker;CHECK: ssubl2.4s 176*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 177*9880d681SAndroid Build Coastguard Worker %high1 = shufflevector <8 x i16> %tmp1, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 178*9880d681SAndroid Build Coastguard Worker %ext1 = sext <4 x i16> %high1 to <4 x i32> 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %B 181*9880d681SAndroid Build Coastguard Worker %high2 = shufflevector <8 x i16> %tmp2, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 182*9880d681SAndroid Build Coastguard Worker %ext2 = sext <4 x i16> %high2 to <4 x i32> 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Worker %res = sub <4 x i32> %ext1, %ext2 185*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 186*9880d681SAndroid Build Coastguard Worker} 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ssubl2_2d(<4 x i32>* %A, <4 x i32>* %B) nounwind { 189*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: ssubl2_2d: 190*9880d681SAndroid Build Coastguard Worker;CHECK: ssubl2.2d 191*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 192*9880d681SAndroid Build Coastguard Worker %high1 = shufflevector <4 x i32> %tmp1, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 193*9880d681SAndroid Build Coastguard Worker %ext1 = sext <2 x i32> %high1 to <2 x i64> 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i32>, <4 x i32>* %B 196*9880d681SAndroid Build Coastguard Worker %high2 = shufflevector <4 x i32> %tmp2, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 197*9880d681SAndroid Build Coastguard Worker %ext2 = sext <2 x i32> %high2 to <2 x i64> 198*9880d681SAndroid Build Coastguard Worker 199*9880d681SAndroid Build Coastguard Worker %res = sub <2 x i64> %ext1, %ext2 200*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 201*9880d681SAndroid Build Coastguard Worker} 202*9880d681SAndroid Build Coastguard Worker 203*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @usubl8h(<8 x i8>* %A, <8 x i8>* %B) nounwind { 204*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: usubl8h: 205*9880d681SAndroid Build Coastguard Worker;CHECK: usubl.8h 206*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i8>, <8 x i8>* %A 207*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %B 208*9880d681SAndroid Build Coastguard Worker %tmp3 = zext <8 x i8> %tmp1 to <8 x i16> 209*9880d681SAndroid Build Coastguard Worker %tmp4 = zext <8 x i8> %tmp2 to <8 x i16> 210*9880d681SAndroid Build Coastguard Worker %tmp5 = sub <8 x i16> %tmp3, %tmp4 211*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp5 212*9880d681SAndroid Build Coastguard Worker} 213*9880d681SAndroid Build Coastguard Worker 214*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @usubl4s(<4 x i16>* %A, <4 x i16>* %B) nounwind { 215*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: usubl4s: 216*9880d681SAndroid Build Coastguard Worker;CHECK: usubl.4s 217*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i16>, <4 x i16>* %A 218*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i16>, <4 x i16>* %B 219*9880d681SAndroid Build Coastguard Worker %tmp3 = zext <4 x i16> %tmp1 to <4 x i32> 220*9880d681SAndroid Build Coastguard Worker %tmp4 = zext <4 x i16> %tmp2 to <4 x i32> 221*9880d681SAndroid Build Coastguard Worker %tmp5 = sub <4 x i32> %tmp3, %tmp4 222*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp5 223*9880d681SAndroid Build Coastguard Worker} 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @usubl2d(<2 x i32>* %A, <2 x i32>* %B) nounwind { 226*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: usubl2d: 227*9880d681SAndroid Build Coastguard Worker;CHECK: usubl.2d 228*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i32>, <2 x i32>* %A 229*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i32>, <2 x i32>* %B 230*9880d681SAndroid Build Coastguard Worker %tmp3 = zext <2 x i32> %tmp1 to <2 x i64> 231*9880d681SAndroid Build Coastguard Worker %tmp4 = zext <2 x i32> %tmp2 to <2 x i64> 232*9880d681SAndroid Build Coastguard Worker %tmp5 = sub <2 x i64> %tmp3, %tmp4 233*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp5 234*9880d681SAndroid Build Coastguard Worker} 235*9880d681SAndroid Build Coastguard Worker 236*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @usubl2_8h(<16 x i8>* %A, <16 x i8>* %B) nounwind { 237*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: usubl2_8h: 238*9880d681SAndroid Build Coastguard Worker;CHECK: usubl2.8h 239*9880d681SAndroid Build Coastguard Worker %tmp1 = load <16 x i8>, <16 x i8>* %A 240*9880d681SAndroid Build Coastguard Worker %high1 = shufflevector <16 x i8> %tmp1, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 241*9880d681SAndroid Build Coastguard Worker %ext1 = zext <8 x i8> %high1 to <8 x i16> 242*9880d681SAndroid Build Coastguard Worker 243*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %B 244*9880d681SAndroid Build Coastguard Worker %high2 = shufflevector <16 x i8> %tmp2, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 245*9880d681SAndroid Build Coastguard Worker %ext2 = zext <8 x i8> %high2 to <8 x i16> 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Worker %res = sub <8 x i16> %ext1, %ext2 248*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 249*9880d681SAndroid Build Coastguard Worker} 250*9880d681SAndroid Build Coastguard Worker 251*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @usubl2_4s(<8 x i16>* %A, <8 x i16>* %B) nounwind { 252*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: usubl2_4s: 253*9880d681SAndroid Build Coastguard Worker;CHECK: usubl2.4s 254*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 255*9880d681SAndroid Build Coastguard Worker %high1 = shufflevector <8 x i16> %tmp1, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 256*9880d681SAndroid Build Coastguard Worker %ext1 = zext <4 x i16> %high1 to <4 x i32> 257*9880d681SAndroid Build Coastguard Worker 258*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %B 259*9880d681SAndroid Build Coastguard Worker %high2 = shufflevector <8 x i16> %tmp2, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 260*9880d681SAndroid Build Coastguard Worker %ext2 = zext <4 x i16> %high2 to <4 x i32> 261*9880d681SAndroid Build Coastguard Worker 262*9880d681SAndroid Build Coastguard Worker %res = sub <4 x i32> %ext1, %ext2 263*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 264*9880d681SAndroid Build Coastguard Worker} 265*9880d681SAndroid Build Coastguard Worker 266*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @usubl2_2d(<4 x i32>* %A, <4 x i32>* %B) nounwind { 267*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: usubl2_2d: 268*9880d681SAndroid Build Coastguard Worker;CHECK: usubl2.2d 269*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 270*9880d681SAndroid Build Coastguard Worker %high1 = shufflevector <4 x i32> %tmp1, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 271*9880d681SAndroid Build Coastguard Worker %ext1 = zext <2 x i32> %high1 to <2 x i64> 272*9880d681SAndroid Build Coastguard Worker 273*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i32>, <4 x i32>* %B 274*9880d681SAndroid Build Coastguard Worker %high2 = shufflevector <4 x i32> %tmp2, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 275*9880d681SAndroid Build Coastguard Worker %ext2 = zext <2 x i32> %high2 to <2 x i64> 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Worker %res = sub <2 x i64> %ext1, %ext2 278*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 279*9880d681SAndroid Build Coastguard Worker} 280*9880d681SAndroid Build Coastguard Worker 281*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ssubw8h(<8 x i16>* %A, <8 x i8>* %B) nounwind { 282*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: ssubw8h: 283*9880d681SAndroid Build Coastguard Worker;CHECK: ssubw.8h 284*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 285*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %B 286*9880d681SAndroid Build Coastguard Worker %tmp3 = sext <8 x i8> %tmp2 to <8 x i16> 287*9880d681SAndroid Build Coastguard Worker %tmp4 = sub <8 x i16> %tmp1, %tmp3 288*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp4 289*9880d681SAndroid Build Coastguard Worker} 290*9880d681SAndroid Build Coastguard Worker 291*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ssubw4s(<4 x i32>* %A, <4 x i16>* %B) nounwind { 292*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: ssubw4s: 293*9880d681SAndroid Build Coastguard Worker;CHECK: ssubw.4s 294*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 295*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i16>, <4 x i16>* %B 296*9880d681SAndroid Build Coastguard Worker %tmp3 = sext <4 x i16> %tmp2 to <4 x i32> 297*9880d681SAndroid Build Coastguard Worker %tmp4 = sub <4 x i32> %tmp1, %tmp3 298*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp4 299*9880d681SAndroid Build Coastguard Worker} 300*9880d681SAndroid Build Coastguard Worker 301*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ssubw2d(<2 x i64>* %A, <2 x i32>* %B) nounwind { 302*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: ssubw2d: 303*9880d681SAndroid Build Coastguard Worker;CHECK: ssubw.2d 304*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 305*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i32>, <2 x i32>* %B 306*9880d681SAndroid Build Coastguard Worker %tmp3 = sext <2 x i32> %tmp2 to <2 x i64> 307*9880d681SAndroid Build Coastguard Worker %tmp4 = sub <2 x i64> %tmp1, %tmp3 308*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp4 309*9880d681SAndroid Build Coastguard Worker} 310*9880d681SAndroid Build Coastguard Worker 311*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ssubw2_8h(<8 x i16>* %A, <16 x i8>* %B) nounwind { 312*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: ssubw2_8h: 313*9880d681SAndroid Build Coastguard Worker;CHECK: ssubw2.8h 314*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %B 317*9880d681SAndroid Build Coastguard Worker %high2 = shufflevector <16 x i8> %tmp2, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 318*9880d681SAndroid Build Coastguard Worker %ext2 = sext <8 x i8> %high2 to <8 x i16> 319*9880d681SAndroid Build Coastguard Worker 320*9880d681SAndroid Build Coastguard Worker %res = sub <8 x i16> %tmp1, %ext2 321*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 322*9880d681SAndroid Build Coastguard Worker} 323*9880d681SAndroid Build Coastguard Worker 324*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ssubw2_4s(<4 x i32>* %A, <8 x i16>* %B) nounwind { 325*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: ssubw2_4s: 326*9880d681SAndroid Build Coastguard Worker;CHECK: ssubw2.4s 327*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 328*9880d681SAndroid Build Coastguard Worker 329*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %B 330*9880d681SAndroid Build Coastguard Worker %high2 = shufflevector <8 x i16> %tmp2, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 331*9880d681SAndroid Build Coastguard Worker %ext2 = sext <4 x i16> %high2 to <4 x i32> 332*9880d681SAndroid Build Coastguard Worker 333*9880d681SAndroid Build Coastguard Worker %res = sub <4 x i32> %tmp1, %ext2 334*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 335*9880d681SAndroid Build Coastguard Worker} 336*9880d681SAndroid Build Coastguard Worker 337*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ssubw2_2d(<2 x i64>* %A, <4 x i32>* %B) nounwind { 338*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: ssubw2_2d: 339*9880d681SAndroid Build Coastguard Worker;CHECK: ssubw2.2d 340*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 341*9880d681SAndroid Build Coastguard Worker 342*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i32>, <4 x i32>* %B 343*9880d681SAndroid Build Coastguard Worker %high2 = shufflevector <4 x i32> %tmp2, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 344*9880d681SAndroid Build Coastguard Worker %ext2 = sext <2 x i32> %high2 to <2 x i64> 345*9880d681SAndroid Build Coastguard Worker 346*9880d681SAndroid Build Coastguard Worker %res = sub <2 x i64> %tmp1, %ext2 347*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 348*9880d681SAndroid Build Coastguard Worker} 349*9880d681SAndroid Build Coastguard Worker 350*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @usubw8h(<8 x i16>* %A, <8 x i8>* %B) nounwind { 351*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: usubw8h: 352*9880d681SAndroid Build Coastguard Worker;CHECK: usubw.8h 353*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 354*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i8>, <8 x i8>* %B 355*9880d681SAndroid Build Coastguard Worker %tmp3 = zext <8 x i8> %tmp2 to <8 x i16> 356*9880d681SAndroid Build Coastguard Worker %tmp4 = sub <8 x i16> %tmp1, %tmp3 357*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp4 358*9880d681SAndroid Build Coastguard Worker} 359*9880d681SAndroid Build Coastguard Worker 360*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @usubw4s(<4 x i32>* %A, <4 x i16>* %B) nounwind { 361*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: usubw4s: 362*9880d681SAndroid Build Coastguard Worker;CHECK: usubw.4s 363*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 364*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i16>, <4 x i16>* %B 365*9880d681SAndroid Build Coastguard Worker %tmp3 = zext <4 x i16> %tmp2 to <4 x i32> 366*9880d681SAndroid Build Coastguard Worker %tmp4 = sub <4 x i32> %tmp1, %tmp3 367*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp4 368*9880d681SAndroid Build Coastguard Worker} 369*9880d681SAndroid Build Coastguard Worker 370*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @usubw2d(<2 x i64>* %A, <2 x i32>* %B) nounwind { 371*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: usubw2d: 372*9880d681SAndroid Build Coastguard Worker;CHECK: usubw.2d 373*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 374*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x i32>, <2 x i32>* %B 375*9880d681SAndroid Build Coastguard Worker %tmp3 = zext <2 x i32> %tmp2 to <2 x i64> 376*9880d681SAndroid Build Coastguard Worker %tmp4 = sub <2 x i64> %tmp1, %tmp3 377*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %tmp4 378*9880d681SAndroid Build Coastguard Worker} 379*9880d681SAndroid Build Coastguard Worker 380*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @usubw2_8h(<8 x i16>* %A, <16 x i8>* %B) nounwind { 381*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: usubw2_8h: 382*9880d681SAndroid Build Coastguard Worker;CHECK: usubw2.8h 383*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x i16>, <8 x i16>* %A 384*9880d681SAndroid Build Coastguard Worker 385*9880d681SAndroid Build Coastguard Worker %tmp2 = load <16 x i8>, <16 x i8>* %B 386*9880d681SAndroid Build Coastguard Worker %high2 = shufflevector <16 x i8> %tmp2, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 387*9880d681SAndroid Build Coastguard Worker %ext2 = zext <8 x i8> %high2 to <8 x i16> 388*9880d681SAndroid Build Coastguard Worker 389*9880d681SAndroid Build Coastguard Worker %res = sub <8 x i16> %tmp1, %ext2 390*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %res 391*9880d681SAndroid Build Coastguard Worker} 392*9880d681SAndroid Build Coastguard Worker 393*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @usubw2_4s(<4 x i32>* %A, <8 x i16>* %B) nounwind { 394*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: usubw2_4s: 395*9880d681SAndroid Build Coastguard Worker;CHECK: usubw2.4s 396*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x i32>, <4 x i32>* %A 397*9880d681SAndroid Build Coastguard Worker 398*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x i16>, <8 x i16>* %B 399*9880d681SAndroid Build Coastguard Worker %high2 = shufflevector <8 x i16> %tmp2, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 400*9880d681SAndroid Build Coastguard Worker %ext2 = zext <4 x i16> %high2 to <4 x i32> 401*9880d681SAndroid Build Coastguard Worker 402*9880d681SAndroid Build Coastguard Worker %res = sub <4 x i32> %tmp1, %ext2 403*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 404*9880d681SAndroid Build Coastguard Worker} 405*9880d681SAndroid Build Coastguard Worker 406*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @usubw2_2d(<2 x i64>* %A, <4 x i32>* %B) nounwind { 407*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: usubw2_2d: 408*9880d681SAndroid Build Coastguard Worker;CHECK: usubw2.2d 409*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x i64>, <2 x i64>* %A 410*9880d681SAndroid Build Coastguard Worker 411*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x i32>, <4 x i32>* %B 412*9880d681SAndroid Build Coastguard Worker %high2 = shufflevector <4 x i32> %tmp2, <4 x i32> undef, <2 x i32> <i32 2, i32 3> 413*9880d681SAndroid Build Coastguard Worker %ext2 = zext <2 x i32> %high2 to <2 x i64> 414*9880d681SAndroid Build Coastguard Worker 415*9880d681SAndroid Build Coastguard Worker %res = sub <2 x i64> %tmp1, %ext2 416*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 417*9880d681SAndroid Build Coastguard Worker} 418