1 // RUN: %clang_cc1 -O1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -S -o - -emit-llvm %s | FileCheck %s 2 // Test ARM64 SIMD load and stores of an N-element structure intrinsics 3 4 #include <arm_neon.h> 5 6 int64x2x2_t test_vld2q_lane_s64(const void * a1, int64x2x2_t a2) { 7 // CHECK: test_vld2q_lane_s64 8 return vld2q_lane_s64(a1, a2, 1); 9 // CHECK: llvm.aarch64.neon.ld2lane.v2i64.p0i8 10 } 11 12 uint64x2x2_t test_vld2q_lane_u64(const void * a1, uint64x2x2_t a2) { 13 // CHECK: test_vld2q_lane_u64 14 return vld2q_lane_u64(a1, a2, 1); 15 // CHECK: llvm.aarch64.neon.ld2lane.v2i64.p0i8 16 } 17 18 int64x1x2_t test_vld2_lane_s64(const void * a1, int64x1x2_t a2) { 19 // CHECK: test_vld2_lane_s64 20 return vld2_lane_s64(a1, a2, 0); 21 // CHECK: llvm.aarch64.neon.ld2lane.v1i64.p0i8 22 } 23 24 uint64x1x2_t test_vld2_lane_u64(const void * a1, uint64x1x2_t a2) { 25 // CHECK: test_vld2_lane_u64 26 return vld2_lane_u64(a1, a2, 0); 27 // CHECK: llvm.aarch64.neon.ld2lane.v1i64.p0i8 28 } 29 30 poly8x16x2_t test_vld2q_lane_p8(const void * a1, poly8x16x2_t a2) { 31 // CHECK: test_vld2q_lane_p8 32 return vld2q_lane_p8(a1, a2, 0); 33 // CHECK: extractvalue {{.*}} 0{{ *$}} 34 // CHECK: extractvalue {{.*}} 1{{ *$}} 35 } 36 37 uint8x16x2_t test_vld2q_lane_u8(const void * a1, uint8x16x2_t a2) { 38 // CHECK: test_vld2q_lane_u8 39 return vld2q_lane_u8(a1, a2, 0); 40 // CHECK: llvm.aarch64.neon.ld2lane.v16i8.p0i8 41 } 42 43 int64x2x3_t test_vld3q_lane_s64(const void * a1, int64x2x3_t a2) { 44 // CHECK: test_vld3q_lane_s64 45 return vld3q_lane_s64(a1, a2, 1); 46 // CHECK: llvm.aarch64.neon.ld3lane.v2i64.p0i8 47 } 48 49 uint64x2x3_t test_vld3q_lane_u64(const void * a1, uint64x2x3_t a2) { 50 // CHECK: test_vld3q_lane_u64 51 return vld3q_lane_u64(a1, a2, 1); 52 // CHECK: llvm.aarch64.neon.ld3lane.v2i64.p0i8 53 } 54 55 int64x1x3_t test_vld3_lane_s64(const void * a1, int64x1x3_t a2) { 56 // CHECK: test_vld3_lane_s64 57 return vld3_lane_s64(a1, a2, 0); 58 // CHECK: llvm.aarch64.neon.ld3lane.v1i64.p0i8 59 } 60 61 uint64x1x3_t test_vld3_lane_u64(const void * a1, uint64x1x3_t a2) { 62 // CHECK: test_vld3_lane_u64 63 return vld3_lane_u64(a1, a2, 0); 64 // CHECK: llvm.aarch64.neon.ld3lane.v1i64.p0i8 65 } 66 67 int8x8x3_t test_vld3_lane_s8(const void * a1, int8x8x3_t a2) { 68 // CHECK: test_vld3_lane_s8 69 return vld3_lane_s8(a1, a2, 0); 70 // CHECK: llvm.aarch64.neon.ld3lane.v8i8.p0i8 71 } 72 73 poly8x16x3_t test_vld3q_lane_p8(const void * a1, poly8x16x3_t a2) { 74 // CHECK: test_vld3q_lane_p8 75 return vld3q_lane_p8(a1, a2, 0); 76 // CHECK: llvm.aarch64.neon.ld3lane.v16i8.p0i8 77 } 78 79 uint8x16x3_t test_vld3q_lane_u8(const void * a1, uint8x16x3_t a2) { 80 // CHECK: test_vld3q_lane_u8 81 return vld3q_lane_u8(a1, a2, 0); 82 // CHECK: llvm.aarch64.neon.ld3lane.v16i8.p0i8 83 } 84 85 int64x2x4_t test_vld4q_lane_s64(const void * a1, int64x2x4_t a2) { 86 // CHECK: test_vld4q_lane_s64 87 return vld4q_lane_s64(a1, a2, 0); 88 // CHECK: llvm.aarch64.neon.ld4lane.v2i64.p0i8 89 } 90 91 uint64x2x4_t test_vld4q_lane_u64(const void * a1, uint64x2x4_t a2) { 92 // CHECK: test_vld4q_lane_u64 93 return vld4q_lane_u64(a1, a2, 0); 94 // CHECK: llvm.aarch64.neon.ld4lane.v2i64.p0i8 95 } 96 97 int64x1x4_t test_vld4_lane_s64(const void * a1, int64x1x4_t a2) { 98 // CHECK: test_vld4_lane_s64 99 return vld4_lane_s64(a1, a2, 0); 100 // CHECK: llvm.aarch64.neon.ld4lane.v1i64.p0i8 101 } 102 103 uint64x1x4_t test_vld4_lane_u64(const void * a1, uint64x1x4_t a2) { 104 // CHECK: test_vld4_lane_u64 105 return vld4_lane_u64(a1, a2, 0); 106 // CHECK: llvm.aarch64.neon.ld4lane.v1i64.p0i8 107 } 108 109 int8x8x4_t test_vld4_lane_s8(const void * a1, int8x8x4_t a2) { 110 // CHECK: test_vld4_lane_s8 111 return vld4_lane_s8(a1, a2, 0); 112 // CHECK: llvm.aarch64.neon.ld4lane.v8i8.p0i8 113 } 114 115 uint8x8x4_t test_vld4_lane_u8(const void * a1, uint8x8x4_t a2) { 116 // CHECK: test_vld4_lane_u8 117 return vld4_lane_u8(a1, a2, 0); 118 // CHECK: llvm.aarch64.neon.ld4lane.v8i8.p0i8 119 } 120 121 poly8x16x4_t test_vld4q_lane_p8(const void * a1, poly8x16x4_t a2) { 122 // CHECK: test_vld4q_lane_p8 123 return vld4q_lane_p8(a1, a2, 0); 124 // CHECK: llvm.aarch64.neon.ld4lane.v16i8.p0i8 125 } 126 127 int8x16x4_t test_vld4q_lane_s8(const void * a1, int8x16x4_t a2) { 128 // CHECK: test_vld4q_lane_s8 129 return vld4q_lane_s8(a1, a2, 0); 130 // CHECK: extractvalue {{.*}} 0{{ *$}} 131 // CHECK: extractvalue {{.*}} 1{{ *$}} 132 // CHECK: extractvalue {{.*}} 2{{ *$}} 133 // CHECK: extractvalue {{.*}} 3{{ *$}} 134 } 135 136 uint8x16x4_t test_vld4q_lane_u8(const void * a1, uint8x16x4_t a2) { 137 // CHECK: test_vld4q_lane_u8 138 return vld4q_lane_u8(a1, a2, 0); 139 // CHECK: llvm.aarch64.neon.ld4lane.v16i8.p0i8 140 } 141 142