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 4ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// REQUIRES: aarch64-registered-target 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// Test ARM64 SIMD vector shift right and insert: vsri[q]_n_* 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include <arm_neon.h> 9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x8_t test_vsri_n_s8(int8x8_t a1, int8x8_t a2) { 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsri_n_s8 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsri_n_s8(a1, a2, 3); 136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v8i8 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.8b v0, v1, #3 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x4_t test_vsri_n_s16(int16x4_t a1, int16x4_t a2) { 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsri_n_s16 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsri_n_s16(a1, a2, 3); 206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v4i16 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.4h v0, v1, #3 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x2_t test_vsri_n_s32(int32x2_t a1, int32x2_t a2) { 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsri_n_s32 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsri_n_s32(a1, a2, 1); 276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v2i32 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.2s v0, v1, #1 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x1_t test_vsri_n_s64(int64x1_t a1, int64x1_t a2) { 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsri_n_s64 33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsri_n_s64(a1, a2, 1); 346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v1i64 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri d0, d1, #1 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x8_t test_vsri_n_u8(uint8x8_t a1, uint8x8_t a2) { 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsri_n_u8 40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsri_n_u8(a1, a2, 3); 416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v8i8 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.8b v0, v1, #3 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x4_t test_vsri_n_u16(uint16x4_t a1, uint16x4_t a2) { 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsri_n_u16 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsri_n_u16(a1, a2, 3); 486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v4i16 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.4h v0, v1, #3 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x2_t test_vsri_n_u32(uint32x2_t a1, uint32x2_t a2) { 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsri_n_u32 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsri_n_u32(a1, a2, 1); 556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v2i32 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.2s v0, v1, #1 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x1_t test_vsri_n_u64(uint64x1_t a1, uint64x1_t a2) { 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsri_n_u64 61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsri_n_u64(a1, a2, 1); 626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v1i64 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri d0, d1, #1 64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly8x8_t test_vsri_n_p8(poly8x8_t a1, poly8x8_t a2) { 67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsri_n_p8 68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsri_n_p8(a1, a2, 1); 696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v8i8 70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.8b v0, v1, #1 71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly16x4_t test_vsri_n_p16(poly16x4_t a1, poly16x4_t a2) { 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsri_n_p16 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsri_n_p16(a1, a2, 1); 766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v4i16 77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.4h v0, v1, #1 78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vsriq_n_s8(int8x16_t a1, int8x16_t a2) { 81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsriq_n_s8 82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsriq_n_s8(a1, a2, 3); 836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v16i8 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.16b v0, v1, #3 85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vsriq_n_s16(int16x8_t a1, int16x8_t a2) { 88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsriq_n_s16 89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsriq_n_s16(a1, a2, 3); 906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v8i16 91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.8h v0, v1, #3 92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vsriq_n_s32(int32x4_t a1, int32x4_t a2) { 95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsriq_n_s32 96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsriq_n_s32(a1, a2, 1); 976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v4i32 98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.4s v0, v1, #1 99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vsriq_n_s64(int64x2_t a1, int64x2_t a2) { 102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsriq_n_s64 103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsriq_n_s64(a1, a2, 1); 1046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v2i64 105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.2d v0, v1, #1 106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vsriq_n_u8(uint8x16_t a1, uint8x16_t a2) { 109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsriq_n_u8 110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsriq_n_u8(a1, a2, 3); 1116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v16i8 112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.16b v0, v1, #3 113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vsriq_n_u16(uint16x8_t a1, uint16x8_t a2) { 116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsriq_n_u16 117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsriq_n_u16(a1, a2, 3); 1186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v8i16 119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.8h v0, v1, #3 120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vsriq_n_u32(uint32x4_t a1, uint32x4_t a2) { 123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsriq_n_u32 124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsriq_n_u32(a1, a2, 1); 1256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v4i32 126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.4s v0, v1, #1 127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2_t test_vsriq_n_u64(uint64x2_t a1, uint64x2_t a2) { 130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsriq_n_u64 131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsriq_n_u64(a1, a2, 1); 1326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v2i64 133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.2d v0, v1, #1 134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly8x16_t test_vsriq_n_p8(poly8x16_t a1, poly8x16_t a2) { 137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsriq_n_p8 138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsriq_n_p8(a1, a2, 1); 1396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v16i8 140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.16b v0, v1, #1 141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly16x8_t test_vsriq_n_p16(poly16x8_t a1, poly16x8_t a2) { 144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vsriq_n_p16 145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vsriq_n_p16(a1, a2, 1); 1466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.vsri.v8i16 147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK_CODEGEN: sri.8h v0, v1, #1 148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 150