16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -O1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -S -o - -emit-llvm %s | FileCheck %s 26bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -O1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -S -o - %s | \ 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: FileCheck -check-prefix=CHECK_CODEGEN %s 4c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// REQUIRES: aarch64-registered-target 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// Test 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include <arm_neon.h> 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x8_t test_vsli_n_s8(int8x8_t a1, int8x8_t a2) { 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsli_n_s8 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsli_n_s8(a1, a2, 3); 126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v8i8 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.8b v0, v1, #3 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x4_t test_vsli_n_s16(int16x4_t a1, int16x4_t a2) { 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsli_n_s16 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsli_n_s16(a1, a2, 3); 196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v4i16 20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.4h v0, v1, #3 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x2_t test_vsli_n_s32(int32x2_t a1, int32x2_t a2) { 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsli_n_s32 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsli_n_s32(a1, a2, 1); 266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v2i32 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.2s v0, v1, #1 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x1_t test_vsli_n_s64(int64x1_t a1, int64x1_t a2) { 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsli_n_s64 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsli_n_s64(a1, a2, 1); 336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v1i64 34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli d0, d1, #1 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x8_t test_vsli_n_u8(uint8x8_t a1, uint8x8_t a2) { 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsli_n_u8 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsli_n_u8(a1, a2, 3); 406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v8i8 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.8b v0, v1, #3 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x4_t test_vsli_n_u16(uint16x4_t a1, uint16x4_t a2) { 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsli_n_u16 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsli_n_u16(a1, a2, 3); 476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v4i16 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.4h v0, v1, #3 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x2_t test_vsli_n_u32(uint32x2_t a1, uint32x2_t a2) { 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsli_n_u32 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsli_n_u32(a1, a2, 1); 546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v2i32 55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.2s v0, v1, #1 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x1_t test_vsli_n_u64(uint64x1_t a1, uint64x1_t a2) { 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsli_n_u64 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsli_n_u64(a1, a2, 1); 616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v1i64 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli d0, d1, #1 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly8x8_t test_vsli_n_p8(poly8x8_t a1, poly8x8_t a2) { 66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsli_n_p8 67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsli_n_p8(a1, a2, 1); 686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v8i8 69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.8b v0, v1, #1 70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly16x4_t test_vsli_n_p16(poly16x4_t a1, poly16x4_t a2) { 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsli_n_p16 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsli_n_p16(a1, a2, 1); 756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v4i16 76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.4h v0, v1, #1 77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vsliq_n_s8(int8x16_t a1, int8x16_t a2) { 80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsliq_n_s8 81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsliq_n_s8(a1, a2, 3); 826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v16i8 83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.16b v0, v1, #3 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vsliq_n_s16(int16x8_t a1, int16x8_t a2) { 87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsliq_n_s16 88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsliq_n_s16(a1, a2, 3); 896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v8i16 90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.8h v0, v1, #3 91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vsliq_n_s32(int32x4_t a1, int32x4_t a2) { 94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsliq_n_s32 95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsliq_n_s32(a1, a2, 1); 966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v4i32 97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.4s v0, v1, #1 98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vsliq_n_s64(int64x2_t a1, int64x2_t a2) { 101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsliq_n_s64 102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsliq_n_s64(a1, a2, 1); 1036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v2i64 104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.2d v0, v1, #1 105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vsliq_n_u8(uint8x16_t a1, uint8x16_t a2) { 108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsliq_n_u8 109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsliq_n_u8(a1, a2, 3); 1106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v16i8 111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.16b v0, v1, #3 112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vsliq_n_u16(uint16x8_t a1, uint16x8_t a2) { 115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsliq_n_u16 116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsliq_n_u16(a1, a2, 3); 1176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v8i16 118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.8h v0, v1, #3 119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vsliq_n_u32(uint32x4_t a1, uint32x4_t a2) { 122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsliq_n_u32 123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsliq_n_u32(a1, a2, 1); 1246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v4i32 125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.4s v0, v1, #1 126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2_t test_vsliq_n_u64(uint64x2_t a1, uint64x2_t a2) { 129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsliq_n_u64 130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsliq_n_u64(a1, a2, 1); 1316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v2i64 132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.2d v0, v1, #1 133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly8x16_t test_vsliq_n_p8(poly8x16_t a1, poly8x16_t a2) { 136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsliq_n_p8 137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsliq_n_p8(a1, a2, 1); 1386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v16i8 139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.16b v0, v1, #1 140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly16x8_t test_vsliq_n_p16(poly16x8_t a1, poly16x8_t a2) { 143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsliq_n_p16 144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsliq_n_p16(a1, a2, 1); 1456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsli.v8i16 146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sli.8h v0, v1, #1 147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 149