16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN:   -emit-llvm -o - %s | opt -S -mem2reg | FileCheck %s
30391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
40391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu// Test new aarch64 intrinsics and types
50391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
60391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu#include <arm_neon.h>
70391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vaddlv_s8(<8 x i8> %a) #0 {
94967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDLV_I:%.*]] = call i32 @llvm.aarch64.neon.saddlv.i32.v8i8(<8 x i8> %a) #2
104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VADDLV_I]] to i16
114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP0]]
120391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint16_t test_vaddlv_s8(int8x8_t a) {
130391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddlv_s8(a);
140391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
150391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i32 @test_vaddlv_s16(<4 x i16> %a) #0 {
174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDLV_I:%.*]] = call i32 @llvm.aarch64.neon.saddlv.i32.v4i16(<4 x i16> [[TMP1]]) #2
204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i32 [[VADDLV_I]]
210391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint32_t test_vaddlv_s16(int16x4_t a) {
220391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddlv_s16(a);
230391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
240391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vaddlv_u8(<8 x i8> %a) #0 {
264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDLV_I:%.*]] = call i32 @llvm.aarch64.neon.uaddlv.i32.v8i8(<8 x i8> %a) #2
274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VADDLV_I]] to i16
284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP0]]
290391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint16_t test_vaddlv_u8(uint8x8_t a) {
300391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddlv_u8(a);
310391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
320391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i32 @test_vaddlv_u16(<4 x i16> %a) #0 {
344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDLV_I:%.*]] = call i32 @llvm.aarch64.neon.uaddlv.i32.v4i16(<4 x i16> [[TMP1]]) #2
374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i32 [[VADDLV_I]]
380391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint32_t test_vaddlv_u16(uint16x4_t a) {
390391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddlv_u16(a);
400391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
410391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vaddlvq_s8(<16 x i8> %a) #0 {
434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDLV_I:%.*]] = call i32 @llvm.aarch64.neon.saddlv.i32.v16i8(<16 x i8> %a) #2
444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VADDLV_I]] to i16
454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP0]]
460391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint16_t test_vaddlvq_s8(int8x16_t a) {
470391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddlvq_s8(a);
480391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
490391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i32 @test_vaddlvq_s16(<8 x i16> %a) #0 {
514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDLV_I:%.*]] = call i32 @llvm.aarch64.neon.saddlv.i32.v8i16(<8 x i16> [[TMP1]]) #2
544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i32 [[VADDLV_I]]
550391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint32_t test_vaddlvq_s16(int16x8_t a) {
560391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddlvq_s16(a);
570391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
580391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i64 @test_vaddlvq_s32(<4 x i32> %a) #0 {
604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDLVQ_S32_I:%.*]] = call i64 @llvm.aarch64.neon.saddlv.i64.v4i32(<4 x i32> [[TMP1]]) #2
634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i64 [[VADDLVQ_S32_I]]
640391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint64_t test_vaddlvq_s32(int32x4_t a) {
650391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddlvq_s32(a);
660391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
670391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vaddlvq_u8(<16 x i8> %a) #0 {
694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDLV_I:%.*]] = call i32 @llvm.aarch64.neon.uaddlv.i32.v16i8(<16 x i8> %a) #2
704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VADDLV_I]] to i16
714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP0]]
720391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint16_t test_vaddlvq_u8(uint8x16_t a) {
730391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddlvq_u8(a);
740391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
750391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i32 @test_vaddlvq_u16(<8 x i16> %a) #0 {
774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDLV_I:%.*]] = call i32 @llvm.aarch64.neon.uaddlv.i32.v8i16(<8 x i16> [[TMP1]]) #2
804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i32 [[VADDLV_I]]
810391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint32_t test_vaddlvq_u16(uint16x8_t a) {
820391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddlvq_u16(a);
830391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
840391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i64 @test_vaddlvq_u32(<4 x i32> %a) #0 {
864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDLVQ_U32_I:%.*]] = call i64 @llvm.aarch64.neon.uaddlv.i64.v4i32(<4 x i32> [[TMP1]]) #2
894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i64 [[VADDLVQ_U32_I]]
900391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint64_t test_vaddlvq_u32(uint32x4_t a) {
910391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddlvq_u32(a);
920391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
930391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i8 @test_vmaxv_s8(<8 x i8> %a) #0 {
954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMAXV_I:%.*]] = call i32 @llvm.aarch64.neon.smaxv.i32.v8i8(<8 x i8> %a) #2
964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VMAXV_I]] to i8
974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i8 [[TMP0]]
980391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint8_t test_vmaxv_s8(int8x8_t a) {
990391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vmaxv_s8(a);
1000391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
1010391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
1024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vmaxv_s16(<4 x i16> %a) #0 {
1034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMAXV_I:%.*]] = call i32 @llvm.aarch64.neon.smaxv.i32.v4i16(<4 x i16> [[TMP1]]) #2
1064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP2:%.*]] = trunc i32 [[VMAXV_I]] to i16
1074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP2]]
1080391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint16_t test_vmaxv_s16(int16x4_t a) {
1090391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vmaxv_s16(a);
1100391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
1110391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
1124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i8 @test_vmaxv_u8(<8 x i8> %a) #0 {
1134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMAXV_I:%.*]] = call i32 @llvm.aarch64.neon.umaxv.i32.v8i8(<8 x i8> %a) #2
1144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VMAXV_I]] to i8
1154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i8 [[TMP0]]
1160391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint8_t test_vmaxv_u8(uint8x8_t a) {
1170391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vmaxv_u8(a);
1180391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
1190391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
1204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vmaxv_u16(<4 x i16> %a) #0 {
1214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMAXV_I:%.*]] = call i32 @llvm.aarch64.neon.umaxv.i32.v4i16(<4 x i16> [[TMP1]]) #2
1244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP2:%.*]] = trunc i32 [[VMAXV_I]] to i16
1254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP2]]
1260391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint16_t test_vmaxv_u16(uint16x4_t a) {
1270391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vmaxv_u16(a);
1280391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
1290391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
1304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i8 @test_vmaxvq_s8(<16 x i8> %a) #0 {
1314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMAXV_I:%.*]] = call i32 @llvm.aarch64.neon.smaxv.i32.v16i8(<16 x i8> %a) #2
1324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VMAXV_I]] to i8
1334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i8 [[TMP0]]
1340391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint8_t test_vmaxvq_s8(int8x16_t a) {
1350391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vmaxvq_s8(a);
1360391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
1370391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
1384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vmaxvq_s16(<8 x i16> %a) #0 {
1394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMAXV_I:%.*]] = call i32 @llvm.aarch64.neon.smaxv.i32.v8i16(<8 x i16> [[TMP1]]) #2
1424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP2:%.*]] = trunc i32 [[VMAXV_I]] to i16
1434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP2]]
1440391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint16_t test_vmaxvq_s16(int16x8_t a) {
1450391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vmaxvq_s16(a);
1460391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
1470391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
1484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i32 @test_vmaxvq_s32(<4 x i32> %a) #0 {
1494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMAXVQ_S32_I:%.*]] = call i32 @llvm.aarch64.neon.smaxv.i32.v4i32(<4 x i32> [[TMP1]]) #2
1524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i32 [[VMAXVQ_S32_I]]
1530391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint32_t test_vmaxvq_s32(int32x4_t a) {
1540391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vmaxvq_s32(a);
1550391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
1560391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
1574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i8 @test_vmaxvq_u8(<16 x i8> %a) #0 {
1584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMAXV_I:%.*]] = call i32 @llvm.aarch64.neon.umaxv.i32.v16i8(<16 x i8> %a) #2
1594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VMAXV_I]] to i8
1604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i8 [[TMP0]]
1610391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint8_t test_vmaxvq_u8(uint8x16_t a) {
1620391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vmaxvq_u8(a);
1630391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
1640391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
1654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vmaxvq_u16(<8 x i16> %a) #0 {
1664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
1674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
1684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMAXV_I:%.*]] = call i32 @llvm.aarch64.neon.umaxv.i32.v8i16(<8 x i16> [[TMP1]]) #2
1694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP2:%.*]] = trunc i32 [[VMAXV_I]] to i16
1704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP2]]
1710391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint16_t test_vmaxvq_u16(uint16x8_t a) {
1720391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vmaxvq_u16(a);
1730391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
1740391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
1754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i32 @test_vmaxvq_u32(<4 x i32> %a) #0 {
1764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
1774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
1784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMAXVQ_U32_I:%.*]] = call i32 @llvm.aarch64.neon.umaxv.i32.v4i32(<4 x i32> [[TMP1]]) #2
1794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i32 [[VMAXVQ_U32_I]]
1800391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint32_t test_vmaxvq_u32(uint32x4_t a) {
1810391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vmaxvq_u32(a);
1820391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
1830391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
1844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i8 @test_vminv_s8(<8 x i8> %a) #0 {
1854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMINV_I:%.*]] = call i32 @llvm.aarch64.neon.sminv.i32.v8i8(<8 x i8> %a) #2
1864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VMINV_I]] to i8
1874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i8 [[TMP0]]
1880391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint8_t test_vminv_s8(int8x8_t a) {
1890391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vminv_s8(a);
1900391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
1910391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
1924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vminv_s16(<4 x i16> %a) #0 {
1934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
1944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
1954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMINV_I:%.*]] = call i32 @llvm.aarch64.neon.sminv.i32.v4i16(<4 x i16> [[TMP1]]) #2
1964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP2:%.*]] = trunc i32 [[VMINV_I]] to i16
1974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP2]]
1980391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint16_t test_vminv_s16(int16x4_t a) {
1990391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vminv_s16(a);
2000391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
2010391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
2024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i8 @test_vminv_u8(<8 x i8> %a) #0 {
2034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMINV_I:%.*]] = call i32 @llvm.aarch64.neon.uminv.i32.v8i8(<8 x i8> %a) #2
2044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VMINV_I]] to i8
2054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i8 [[TMP0]]
2060391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint8_t test_vminv_u8(uint8x8_t a) {
2070391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vminv_u8(a);
2080391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
2090391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
2104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vminv_u16(<4 x i16> %a) #0 {
2114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
2124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMINV_I:%.*]] = call i32 @llvm.aarch64.neon.uminv.i32.v4i16(<4 x i16> [[TMP1]]) #2
2144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP2:%.*]] = trunc i32 [[VMINV_I]] to i16
2154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP2]]
2160391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint16_t test_vminv_u16(uint16x4_t a) {
2170391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vminv_u16(a);
2180391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
2190391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
2204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i8 @test_vminvq_s8(<16 x i8> %a) #0 {
2214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMINV_I:%.*]] = call i32 @llvm.aarch64.neon.sminv.i32.v16i8(<16 x i8> %a) #2
2224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VMINV_I]] to i8
2234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i8 [[TMP0]]
2240391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint8_t test_vminvq_s8(int8x16_t a) {
2250391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vminvq_s8(a);
2260391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
2270391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
2284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vminvq_s16(<8 x i16> %a) #0 {
2294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
2304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
2314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMINV_I:%.*]] = call i32 @llvm.aarch64.neon.sminv.i32.v8i16(<8 x i16> [[TMP1]]) #2
2324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP2:%.*]] = trunc i32 [[VMINV_I]] to i16
2334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP2]]
2340391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint16_t test_vminvq_s16(int16x8_t a) {
2350391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vminvq_s16(a);
2360391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
2370391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
2384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i32 @test_vminvq_s32(<4 x i32> %a) #0 {
2394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
2404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
2414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMINVQ_S32_I:%.*]] = call i32 @llvm.aarch64.neon.sminv.i32.v4i32(<4 x i32> [[TMP1]]) #2
2424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i32 [[VMINVQ_S32_I]]
2430391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint32_t test_vminvq_s32(int32x4_t a) {
2440391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vminvq_s32(a);
2450391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
2460391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
2474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i8 @test_vminvq_u8(<16 x i8> %a) #0 {
2484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMINV_I:%.*]] = call i32 @llvm.aarch64.neon.uminv.i32.v16i8(<16 x i8> %a) #2
2494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VMINV_I]] to i8
2504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i8 [[TMP0]]
2510391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint8_t test_vminvq_u8(uint8x16_t a) {
2520391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vminvq_u8(a);
2530391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
2540391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
2554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vminvq_u16(<8 x i16> %a) #0 {
2564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
2574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
2584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMINV_I:%.*]] = call i32 @llvm.aarch64.neon.uminv.i32.v8i16(<8 x i16> [[TMP1]]) #2
2594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP2:%.*]] = trunc i32 [[VMINV_I]] to i16
2604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP2]]
2610391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint16_t test_vminvq_u16(uint16x8_t a) {
2620391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vminvq_u16(a);
2630391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
2640391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
2654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i32 @test_vminvq_u32(<4 x i32> %a) #0 {
2664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
2674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
2684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMINVQ_U32_I:%.*]] = call i32 @llvm.aarch64.neon.uminv.i32.v4i32(<4 x i32> [[TMP1]]) #2
2694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i32 [[VMINVQ_U32_I]]
2700391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint32_t test_vminvq_u32(uint32x4_t a) {
2710391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vminvq_u32(a);
2720391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
2730391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
2744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i8 @test_vaddv_s8(<8 x i8> %a) #0 {
2754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDV_I:%.*]] = call i32 @llvm.aarch64.neon.saddv.i32.v8i8(<8 x i8> %a) #2
2764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VADDV_I]] to i8
2774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i8 [[TMP0]]
2780391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint8_t test_vaddv_s8(int8x8_t a) {
2790391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddv_s8(a);
2800391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
2810391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
2824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vaddv_s16(<4 x i16> %a) #0 {
2834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
2844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
2854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDV_I:%.*]] = call i32 @llvm.aarch64.neon.saddv.i32.v4i16(<4 x i16> [[TMP1]]) #2
2864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP2:%.*]] = trunc i32 [[VADDV_I]] to i16
2874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP2]]
2880391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint16_t test_vaddv_s16(int16x4_t a) {
2890391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddv_s16(a);
2900391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
2910391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
2924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i8 @test_vaddv_u8(<8 x i8> %a) #0 {
2934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDV_I:%.*]] = call i32 @llvm.aarch64.neon.uaddv.i32.v8i8(<8 x i8> %a) #2
2944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VADDV_I]] to i8
2954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i8 [[TMP0]]
2960391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint8_t test_vaddv_u8(uint8x8_t a) {
2970391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddv_u8(a);
2980391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
2990391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
3004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vaddv_u16(<4 x i16> %a) #0 {
3014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
3024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
3034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDV_I:%.*]] = call i32 @llvm.aarch64.neon.uaddv.i32.v4i16(<4 x i16> [[TMP1]]) #2
3044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP2:%.*]] = trunc i32 [[VADDV_I]] to i16
3054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP2]]
3060391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint16_t test_vaddv_u16(uint16x4_t a) {
3070391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddv_u16(a);
3080391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
3090391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
3104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i8 @test_vaddvq_s8(<16 x i8> %a) #0 {
3114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDV_I:%.*]] = call i32 @llvm.aarch64.neon.saddv.i32.v16i8(<16 x i8> %a) #2
3124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VADDV_I]] to i8
3134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i8 [[TMP0]]
3140391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint8_t test_vaddvq_s8(int8x16_t a) {
3150391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddvq_s8(a);
3160391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
3170391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
3184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vaddvq_s16(<8 x i16> %a) #0 {
3194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
3204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
3214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDV_I:%.*]] = call i32 @llvm.aarch64.neon.saddv.i32.v8i16(<8 x i16> [[TMP1]]) #2
3224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP2:%.*]] = trunc i32 [[VADDV_I]] to i16
3234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP2]]
3240391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint16_t test_vaddvq_s16(int16x8_t a) {
3250391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddvq_s16(a);
3260391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
3270391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
3284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i32 @test_vaddvq_s32(<4 x i32> %a) #0 {
3294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
3304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
3314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDVQ_S32_I:%.*]] = call i32 @llvm.aarch64.neon.saddv.i32.v4i32(<4 x i32> [[TMP1]]) #2
3324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i32 [[VADDVQ_S32_I]]
3330391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuint32_t test_vaddvq_s32(int32x4_t a) {
3340391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddvq_s32(a);
3350391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
3360391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
3374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i8 @test_vaddvq_u8(<16 x i8> %a) #0 {
3384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDV_I:%.*]] = call i32 @llvm.aarch64.neon.uaddv.i32.v16i8(<16 x i8> %a) #2
3394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = trunc i32 [[VADDV_I]] to i8
3404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i8 [[TMP0]]
3410391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint8_t test_vaddvq_u8(uint8x16_t a) {
3420391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddvq_u8(a);
3430391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
3440391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
3454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i16 @test_vaddvq_u16(<8 x i16> %a) #0 {
3464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
3474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
3484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDV_I:%.*]] = call i32 @llvm.aarch64.neon.uaddv.i32.v8i16(<8 x i16> [[TMP1]]) #2
3494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP2:%.*]] = trunc i32 [[VADDV_I]] to i16
3504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i16 [[TMP2]]
3510391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint16_t test_vaddvq_u16(uint16x8_t a) {
3520391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddvq_u16(a);
3530391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
3540391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
3554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define i32 @test_vaddvq_u32(<4 x i32> %a) #0 {
3564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
3574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
3584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VADDVQ_U32_I:%.*]] = call i32 @llvm.aarch64.neon.uaddv.i32.v4i32(<4 x i32> [[TMP1]]) #2
3594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret i32 [[VADDVQ_U32_I]]
3600391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liuuint32_t test_vaddvq_u32(uint32x4_t a) {
3610391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vaddvq_u32(a);
3620391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
3630391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
3644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define float @test_vmaxvq_f32(<4 x float> %a) #0 {
3654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
3664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
3674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMAXVQ_F32_I:%.*]] = call float @llvm.aarch64.neon.fmaxv.f32.v4f32(<4 x float> [[TMP1]]) #2
3684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret float [[VMAXVQ_F32_I]]
3690391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liufloat32_t test_vmaxvq_f32(float32x4_t a) {
3700391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vmaxvq_f32(a);
3710391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
3720391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
3734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define float @test_vminvq_f32(<4 x float> %a) #0 {
3744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
3754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
3764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMINVQ_F32_I:%.*]] = call float @llvm.aarch64.neon.fminv.f32.v4f32(<4 x float> [[TMP1]]) #2
3774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret float [[VMINVQ_F32_I]]
3780391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liufloat32_t test_vminvq_f32(float32x4_t a) {
3790391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vminvq_f32(a);
3800391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
3810391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
3824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define float @test_vmaxnmvq_f32(<4 x float> %a) #0 {
3834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
3844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
3854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMAXNMVQ_F32_I:%.*]] = call float @llvm.aarch64.neon.fmaxnmv.f32.v4f32(<4 x float> [[TMP1]]) #2
3864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret float [[VMAXNMVQ_F32_I]]
3870391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liufloat32_t test_vmaxnmvq_f32(float32x4_t a) {
3880391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vmaxnmvq_f32(a);
3890391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
3900391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu
3914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK-LABEL: define float @test_vminnmvq_f32(<4 x float> %a) #0 {
3924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8>
3934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float>
3944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   [[VMINNMVQ_F32_I:%.*]] = call float @llvm.aarch64.neon.fminnmv.f32.v4f32(<4 x float> [[TMP1]]) #2
3954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// CHECK:   ret float [[VMINNMVQ_F32_I]]
3960391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liufloat32_t test_vminnmvq_f32(float32x4_t a) {
3970391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu  return vminnmvq_f32(a);
3980391691f86fd2a75ef2413d0272bfaf920d0e2b5Jiangning Liu}
399