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 load and stores of an N-element structure intrinsics 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include <arm_neon.h> 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2x2_t test_vld2q_lane_s64(const void * a1, int64x2x2_t a2) { 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld2q_lane_s64 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld2q_lane_s64(a1, a2, 1); 96bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld2lane.v2i64.p0i8 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2x2_t test_vld2q_lane_u64(const void * a1, uint64x2x2_t a2) { 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld2q_lane_u64 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld2q_lane_u64(a1, a2, 1); 156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld2lane.v2i64.p0i8 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x1x2_t test_vld2_lane_s64(const void * a1, int64x1x2_t a2) { 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld2_lane_s64 20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld2_lane_s64(a1, a2, 0); 216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld2lane.v1i64.p0i8 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x1x2_t test_vld2_lane_u64(const void * a1, uint64x1x2_t a2) { 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld2_lane_u64 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld2_lane_u64(a1, a2, 0); 276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld2lane.v1i64.p0i8 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly8x16x2_t test_vld2q_lane_p8(const void * a1, poly8x16x2_t a2) { 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld2q_lane_p8 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld2q_lane_p8(a1, a2, 0); 33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: extractvalue {{.*}} 0{{ *$}} 34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: extractvalue {{.*}} 1{{ *$}} 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16x2_t test_vld2q_lane_u8(const void * a1, uint8x16x2_t a2) { 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld2q_lane_u8 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld2q_lane_u8(a1, a2, 0); 406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld2lane.v16i8.p0i8 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2x3_t test_vld3q_lane_s64(const void * a1, int64x2x3_t a2) { 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld3q_lane_s64 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld3q_lane_s64(a1, a2, 1); 466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld3lane.v2i64.p0i8 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2x3_t test_vld3q_lane_u64(const void * a1, uint64x2x3_t a2) { 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld3q_lane_u64 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld3q_lane_u64(a1, a2, 1); 526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld3lane.v2i64.p0i8 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x1x3_t test_vld3_lane_s64(const void * a1, int64x1x3_t a2) { 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld3_lane_s64 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld3_lane_s64(a1, a2, 0); 586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld3lane.v1i64.p0i8 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x1x3_t test_vld3_lane_u64(const void * a1, uint64x1x3_t a2) { 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld3_lane_u64 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld3_lane_u64(a1, a2, 0); 646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld3lane.v1i64.p0i8 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x8x3_t test_vld3_lane_s8(const void * a1, int8x8x3_t a2) { 68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld3_lane_s8 69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld3_lane_s8(a1, a2, 0); 706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld3lane.v8i8.p0i8 71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly8x16x3_t test_vld3q_lane_p8(const void * a1, poly8x16x3_t a2) { 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld3q_lane_p8 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld3q_lane_p8(a1, a2, 0); 766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld3lane.v16i8.p0i8 77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16x3_t test_vld3q_lane_u8(const void * a1, uint8x16x3_t a2) { 80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld3q_lane_u8 81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld3q_lane_u8(a1, a2, 0); 826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld3lane.v16i8.p0i8 83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2x4_t test_vld4q_lane_s64(const void * a1, int64x2x4_t a2) { 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld4q_lane_s64 87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld4q_lane_s64(a1, a2, 0); 886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld4lane.v2i64.p0i8 89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2x4_t test_vld4q_lane_u64(const void * a1, uint64x2x4_t a2) { 92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld4q_lane_u64 93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld4q_lane_u64(a1, a2, 0); 946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld4lane.v2i64.p0i8 95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x1x4_t test_vld4_lane_s64(const void * a1, int64x1x4_t a2) { 98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld4_lane_s64 99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld4_lane_s64(a1, a2, 0); 1006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld4lane.v1i64.p0i8 101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x1x4_t test_vld4_lane_u64(const void * a1, uint64x1x4_t a2) { 104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld4_lane_u64 105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld4_lane_u64(a1, a2, 0); 1066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld4lane.v1i64.p0i8 107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x8x4_t test_vld4_lane_s8(const void * a1, int8x8x4_t a2) { 110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld4_lane_s8 111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld4_lane_s8(a1, a2, 0); 1126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld4lane.v8i8.p0i8 113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x8x4_t test_vld4_lane_u8(const void * a1, uint8x8x4_t a2) { 116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld4_lane_u8 117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld4_lane_u8(a1, a2, 0); 1186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld4lane.v8i8.p0i8 119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinespoly8x16x4_t test_vld4q_lane_p8(const void * a1, poly8x16x4_t a2) { 122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld4q_lane_p8 123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld4q_lane_p8(a1, a2, 0); 1246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld4lane.v16i8.p0i8 125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16x4_t test_vld4q_lane_s8(const void * a1, int8x16x4_t a2) { 128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld4q_lane_s8 129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld4q_lane_s8(a1, a2, 0); 130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: extractvalue {{.*}} 0{{ *$}} 131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: extractvalue {{.*}} 1{{ *$}} 132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: extractvalue {{.*}} 2{{ *$}} 133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: extractvalue {{.*}} 3{{ *$}} 134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16x4_t test_vld4q_lane_u8(const void * a1, uint8x16x4_t a2) { 137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: test_vld4q_lane_u8 138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return vld4q_lane_u8(a1, a2, 0); 1396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: llvm.aarch64.neon.ld4lane.v16i8.p0i8 140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 142