16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -O1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -S -o - -emit-llvm %s | FileCheck %s 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// Test ARM64 SIMD add intrinsics 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include <arm_neon.h> 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64_t test_vaddlv_s32(int32x2_t a1) { 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddlv_s32 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddlv_s32(a1); 86bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.saddlv.i64.v2i32 9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK-NEXT: ret 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64_t test_vaddlv_u32(uint32x2_t a1) { 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddlv_u32 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddlv_u32(a1); 156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.uaddlv.i64.v2i32 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK-NEXT: ret 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8_t test_vaddv_s8(int8x8_t a1) { 20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddv_s8 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddv_s8(a1); 226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.saddv.i32.v8i8 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // don't check for return here (there's a trunc?) 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16_t test_vaddv_s16(int16x4_t a1) { 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddv_s16 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddv_s16(a1); 296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.saddv.i32.v4i16 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // don't check for return here (there's a trunc?) 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32_t test_vaddv_s32(int32x2_t a1) { 34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddv_s32 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddv_s32(a1); 366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.saddv.i32.v2i32 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK-NEXT: ret 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8_t test_vaddv_u8(int8x8_t a1) { 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddv_u8 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddv_u8(a1); 436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.uaddv.i32.v8i8 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // don't check for return here (there's a trunc?) 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16_t test_vaddv_u16(int16x4_t a1) { 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddv_u16 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddv_u16(a1); 506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.uaddv.i32.v4i16 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // don't check for return here (there's a trunc?) 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32_t test_vaddv_u32(int32x2_t a1) { 55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddv_u32 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddv_u32(a1); 576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.uaddv.i32.v2i32 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK-NEXT: ret 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8_t test_vaddvq_s8(int8x16_t a1) { 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddvq_s8 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddvq_s8(a1); 646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.saddv.i32.v16i8 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // don't check for return here (there's a trunc?) 66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16_t test_vaddvq_s16(int16x8_t a1) { 69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddvq_s16 70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddvq_s16(a1); 716bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.saddv.i32.v8i16 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // don't check for return here (there's a trunc?) 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32_t test_vaddvq_s32(int32x4_t a1) { 76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddvq_s32 77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddvq_s32(a1); 786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.saddv.i32.v4i32 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK-NEXT: ret 80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8_t test_vaddvq_u8(int8x16_t a1) { 83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddvq_u8 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddvq_u8(a1); 856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.uaddv.i32.v16i8 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // don't check for return here (there's a trunc?) 87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16_t test_vaddvq_u16(int16x8_t a1) { 90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddvq_u16 91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddvq_u16(a1); 926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.uaddv.i32.v8i16 93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // don't check for return here (there's a trunc?) 94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32_t test_vaddvq_u32(int32x4_t a1) { 97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vaddvq_u32 98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vaddvq_u32(a1); 996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.uaddv.i32.v4i32 100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK-NEXT: ret 101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 103