1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=arm64 -mcpu=cyclone | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine i32 @qadds(<4 x i32> %b, <4 x i32> %c) nounwind readnone optsize ssp { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: qadds: 5*9880d681SAndroid Build Coastguard Worker; CHECK: sqadd s0, s0, s1 6*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <4 x i32> %b, i32 0 7*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <4 x i32> %c, i32 0 8*9880d681SAndroid Build Coastguard Worker %vqadd.i = tail call i32 @llvm.aarch64.neon.sqadd.i32(i32 %vecext, i32 %vecext1) nounwind 9*9880d681SAndroid Build Coastguard Worker ret i32 %vqadd.i 10*9880d681SAndroid Build Coastguard Worker} 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine i64 @qaddd(<2 x i64> %b, <2 x i64> %c) nounwind readnone optsize ssp { 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: qaddd: 14*9880d681SAndroid Build Coastguard Worker; CHECK: sqadd d0, d0, d1 15*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <2 x i64> %b, i32 0 16*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <2 x i64> %c, i32 0 17*9880d681SAndroid Build Coastguard Worker %vqadd.i = tail call i64 @llvm.aarch64.neon.sqadd.i64(i64 %vecext, i64 %vecext1) nounwind 18*9880d681SAndroid Build Coastguard Worker ret i64 %vqadd.i 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine i32 @uqadds(<4 x i32> %b, <4 x i32> %c) nounwind readnone optsize ssp { 22*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: uqadds: 23*9880d681SAndroid Build Coastguard Worker; CHECK: uqadd s0, s0, s1 24*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <4 x i32> %b, i32 0 25*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <4 x i32> %c, i32 0 26*9880d681SAndroid Build Coastguard Worker %vqadd.i = tail call i32 @llvm.aarch64.neon.uqadd.i32(i32 %vecext, i32 %vecext1) nounwind 27*9880d681SAndroid Build Coastguard Worker ret i32 %vqadd.i 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine i64 @uqaddd(<2 x i64> %b, <2 x i64> %c) nounwind readnone optsize ssp { 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: uqaddd: 32*9880d681SAndroid Build Coastguard Worker; CHECK: uqadd d0, d0, d1 33*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <2 x i64> %b, i32 0 34*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <2 x i64> %c, i32 0 35*9880d681SAndroid Build Coastguard Worker %vqadd.i = tail call i64 @llvm.aarch64.neon.uqadd.i64(i64 %vecext, i64 %vecext1) nounwind 36*9880d681SAndroid Build Coastguard Worker ret i64 %vqadd.i 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.neon.uqadd.i64(i64, i64) nounwind readnone 40*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.neon.uqadd.i32(i32, i32) nounwind readnone 41*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.neon.sqadd.i64(i64, i64) nounwind readnone 42*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.neon.sqadd.i32(i32, i32) nounwind readnone 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine i32 @qsubs(<4 x i32> %b, <4 x i32> %c) nounwind readnone optsize ssp { 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: qsubs: 46*9880d681SAndroid Build Coastguard Worker; CHECK: sqsub s0, s0, s1 47*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <4 x i32> %b, i32 0 48*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <4 x i32> %c, i32 0 49*9880d681SAndroid Build Coastguard Worker %vqsub.i = tail call i32 @llvm.aarch64.neon.sqsub.i32(i32 %vecext, i32 %vecext1) nounwind 50*9880d681SAndroid Build Coastguard Worker ret i32 %vqsub.i 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdefine i64 @qsubd(<2 x i64> %b, <2 x i64> %c) nounwind readnone optsize ssp { 54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: qsubd: 55*9880d681SAndroid Build Coastguard Worker; CHECK: sqsub d0, d0, d1 56*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <2 x i64> %b, i32 0 57*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <2 x i64> %c, i32 0 58*9880d681SAndroid Build Coastguard Worker %vqsub.i = tail call i64 @llvm.aarch64.neon.sqsub.i64(i64 %vecext, i64 %vecext1) nounwind 59*9880d681SAndroid Build Coastguard Worker ret i64 %vqsub.i 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdefine i32 @uqsubs(<4 x i32> %b, <4 x i32> %c) nounwind readnone optsize ssp { 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: uqsubs: 64*9880d681SAndroid Build Coastguard Worker; CHECK: uqsub s0, s0, s1 65*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <4 x i32> %b, i32 0 66*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <4 x i32> %c, i32 0 67*9880d681SAndroid Build Coastguard Worker %vqsub.i = tail call i32 @llvm.aarch64.neon.uqsub.i32(i32 %vecext, i32 %vecext1) nounwind 68*9880d681SAndroid Build Coastguard Worker ret i32 %vqsub.i 69*9880d681SAndroid Build Coastguard Worker} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerdefine i64 @uqsubd(<2 x i64> %b, <2 x i64> %c) nounwind readnone optsize ssp { 72*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: uqsubd: 73*9880d681SAndroid Build Coastguard Worker; CHECK: uqsub d0, d0, d1 74*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <2 x i64> %b, i32 0 75*9880d681SAndroid Build Coastguard Worker %vecext1 = extractelement <2 x i64> %c, i32 0 76*9880d681SAndroid Build Coastguard Worker %vqsub.i = tail call i64 @llvm.aarch64.neon.uqsub.i64(i64 %vecext, i64 %vecext1) nounwind 77*9880d681SAndroid Build Coastguard Worker ret i64 %vqsub.i 78*9880d681SAndroid Build Coastguard Worker} 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.neon.uqsub.i64(i64, i64) nounwind readnone 81*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.neon.uqsub.i32(i32, i32) nounwind readnone 82*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.neon.sqsub.i64(i64, i64) nounwind readnone 83*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.neon.sqsub.i32(i32, i32) nounwind readnone 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerdefine i32 @qabss(<4 x i32> %b, <4 x i32> %c) nounwind readnone { 86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: qabss: 87*9880d681SAndroid Build Coastguard Worker; CHECK: sqabs s0, s0 88*9880d681SAndroid Build Coastguard Worker; CHECK: ret 89*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <4 x i32> %b, i32 0 90*9880d681SAndroid Build Coastguard Worker %vqabs.i = tail call i32 @llvm.aarch64.neon.sqabs.i32(i32 %vecext) nounwind 91*9880d681SAndroid Build Coastguard Worker ret i32 %vqabs.i 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerdefine i64 @qabsd(<2 x i64> %b, <2 x i64> %c) nounwind readnone { 95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: qabsd: 96*9880d681SAndroid Build Coastguard Worker; CHECK: sqabs d0, d0 97*9880d681SAndroid Build Coastguard Worker; CHECK: ret 98*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <2 x i64> %b, i32 0 99*9880d681SAndroid Build Coastguard Worker %vqabs.i = tail call i64 @llvm.aarch64.neon.sqabs.i64(i64 %vecext) nounwind 100*9880d681SAndroid Build Coastguard Worker ret i64 %vqabs.i 101*9880d681SAndroid Build Coastguard Worker} 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerdefine i32 @qnegs(<4 x i32> %b, <4 x i32> %c) nounwind readnone { 104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: qnegs: 105*9880d681SAndroid Build Coastguard Worker; CHECK: sqneg s0, s0 106*9880d681SAndroid Build Coastguard Worker; CHECK: ret 107*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <4 x i32> %b, i32 0 108*9880d681SAndroid Build Coastguard Worker %vqneg.i = tail call i32 @llvm.aarch64.neon.sqneg.i32(i32 %vecext) nounwind 109*9880d681SAndroid Build Coastguard Worker ret i32 %vqneg.i 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine i64 @qnegd(<2 x i64> %b, <2 x i64> %c) nounwind readnone { 113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: qnegd: 114*9880d681SAndroid Build Coastguard Worker; CHECK: sqneg d0, d0 115*9880d681SAndroid Build Coastguard Worker; CHECK: ret 116*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <2 x i64> %b, i32 0 117*9880d681SAndroid Build Coastguard Worker %vqneg.i = tail call i64 @llvm.aarch64.neon.sqneg.i64(i64 %vecext) nounwind 118*9880d681SAndroid Build Coastguard Worker ret i64 %vqneg.i 119*9880d681SAndroid Build Coastguard Worker} 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.neon.sqneg.i64(i64) nounwind readnone 122*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.neon.sqneg.i32(i32) nounwind readnone 123*9880d681SAndroid Build Coastguard Workerdeclare i64 @llvm.aarch64.neon.sqabs.i64(i64) nounwind readnone 124*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.neon.sqabs.i32(i32) nounwind readnone 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Workerdefine i32 @vqmovund(<2 x i64> %b) nounwind readnone { 128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vqmovund: 129*9880d681SAndroid Build Coastguard Worker; CHECK: sqxtun s0, d0 130*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <2 x i64> %b, i32 0 131*9880d681SAndroid Build Coastguard Worker %vqmovun.i = tail call i32 @llvm.aarch64.neon.scalar.sqxtun.i32.i64(i64 %vecext) nounwind 132*9880d681SAndroid Build Coastguard Worker ret i32 %vqmovun.i 133*9880d681SAndroid Build Coastguard Worker} 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Workerdefine i32 @vqmovnd_s(<2 x i64> %b) nounwind readnone { 136*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vqmovnd_s: 137*9880d681SAndroid Build Coastguard Worker; CHECK: sqxtn s0, d0 138*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <2 x i64> %b, i32 0 139*9880d681SAndroid Build Coastguard Worker %vqmovn.i = tail call i32 @llvm.aarch64.neon.scalar.sqxtn.i32.i64(i64 %vecext) nounwind 140*9880d681SAndroid Build Coastguard Worker ret i32 %vqmovn.i 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdefine i32 @vqmovnd_u(<2 x i64> %b) nounwind readnone { 144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: vqmovnd_u: 145*9880d681SAndroid Build Coastguard Worker; CHECK: uqxtn s0, d0 146*9880d681SAndroid Build Coastguard Worker %vecext = extractelement <2 x i64> %b, i32 0 147*9880d681SAndroid Build Coastguard Worker %vqmovn.i = tail call i32 @llvm.aarch64.neon.scalar.uqxtn.i32.i64(i64 %vecext) nounwind 148*9880d681SAndroid Build Coastguard Worker ret i32 %vqmovn.i 149*9880d681SAndroid Build Coastguard Worker} 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.neon.scalar.uqxtn.i32.i64(i64) nounwind readnone 152*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.neon.scalar.sqxtn.i32.i64(i64) nounwind readnone 153*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.aarch64.neon.scalar.sqxtun.i32.i64(i64) nounwind readnone 154