1// REQUIRES: aarch64-registered-target 2// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \ 3// RUN: -ffp-contract=fast -S -O3 -o - %s | FileCheck %s 4 5// Test new aarch64 intrinsics and types 6 7#include <arm_neon.h> 8 9int16_t test_vaddlv_s8(int8x8_t a) { 10 // CHECK-LABEL: test_vaddlv_s8 11 return vaddlv_s8(a); 12 // CHECK: saddlv {{h[0-9]+}}, {{v[0-9]+}}.8b 13} 14 15int32_t test_vaddlv_s16(int16x4_t a) { 16 // CHECK-LABEL: test_vaddlv_s16 17 return vaddlv_s16(a); 18 // CHECK: saddlv {{s[0-9]+}}, {{v[0-9]+}}.4h 19} 20 21uint16_t test_vaddlv_u8(uint8x8_t a) { 22 // CHECK-LABEL: test_vaddlv_u8 23 return vaddlv_u8(a); 24 // CHECK: uaddlv {{h[0-9]+}}, {{v[0-9]+}}.8b 25} 26 27uint32_t test_vaddlv_u16(uint16x4_t a) { 28 // CHECK-LABEL: test_vaddlv_u16 29 return vaddlv_u16(a); 30 // CHECK: uaddlv {{s[0-9]+}}, {{v[0-9]+}}.4h 31} 32 33int16_t test_vaddlvq_s8(int8x16_t a) { 34 // CHECK-LABEL: test_vaddlvq_s8 35 return vaddlvq_s8(a); 36 // CHECK: saddlv {{h[0-9]+}}, {{v[0-9]+}}.16b 37} 38 39int32_t test_vaddlvq_s16(int16x8_t a) { 40 // CHECK-LABEL: test_vaddlvq_s16 41 return vaddlvq_s16(a); 42 // CHECK: saddlv {{s[0-9]+}}, {{v[0-9]+}}.8h 43} 44 45int64_t test_vaddlvq_s32(int32x4_t a) { 46 // CHECK-LABEL: test_vaddlvq_s32 47 return vaddlvq_s32(a); 48 // CHECK: saddlv {{d[0-9]+}}, {{v[0-9]+}}.4s 49} 50 51uint16_t test_vaddlvq_u8(uint8x16_t a) { 52 // CHECK-LABEL: test_vaddlvq_u8 53 return vaddlvq_u8(a); 54 // CHECK: uaddlv {{h[0-9]+}}, {{v[0-9]+}}.16b 55} 56 57uint32_t test_vaddlvq_u16(uint16x8_t a) { 58 // CHECK-LABEL: test_vaddlvq_u16 59 return vaddlvq_u16(a); 60 // CHECK: uaddlv {{s[0-9]+}}, {{v[0-9]+}}.8h 61} 62 63uint64_t test_vaddlvq_u32(uint32x4_t a) { 64 // CHECK-LABEL: test_vaddlvq_u32 65 return vaddlvq_u32(a); 66 // CHECK: uaddlv {{d[0-9]+}}, {{v[0-9]+}}.4s 67} 68 69int8_t test_vmaxv_s8(int8x8_t a) { 70 // CHECK-LABEL: test_vmaxv_s8 71 return vmaxv_s8(a); 72 // CHECK: smaxv {{b[0-9]+}}, {{v[0-9]+}}.8b 73} 74 75int16_t test_vmaxv_s16(int16x4_t a) { 76 // CHECK-LABEL: test_vmaxv_s16 77 return vmaxv_s16(a); 78 // CHECK: smaxv {{h[0-9]+}}, {{v[0-9]+}}.4h 79} 80 81uint8_t test_vmaxv_u8(uint8x8_t a) { 82 // CHECK-LABEL: test_vmaxv_u8 83 return vmaxv_u8(a); 84 // CHECK: umaxv {{b[0-9]+}}, {{v[0-9]+}}.8b 85} 86 87uint16_t test_vmaxv_u16(uint16x4_t a) { 88 // CHECK-LABEL: test_vmaxv_u16 89 return vmaxv_u16(a); 90 // CHECK: umaxv {{h[0-9]+}}, {{v[0-9]+}}.4h 91} 92 93int8_t test_vmaxvq_s8(int8x16_t a) { 94 // CHECK-LABEL: test_vmaxvq_s8 95 return vmaxvq_s8(a); 96 // CHECK: smaxv {{b[0-9]+}}, {{v[0-9]+}}.16b 97} 98 99int16_t test_vmaxvq_s16(int16x8_t a) { 100 // CHECK-LABEL: test_vmaxvq_s16 101 return vmaxvq_s16(a); 102 // CHECK: smaxv {{h[0-9]+}}, {{v[0-9]+}}.8h 103} 104 105int32_t test_vmaxvq_s32(int32x4_t a) { 106 // CHECK-LABEL: test_vmaxvq_s32 107 return vmaxvq_s32(a); 108 // CHECK: smaxv {{s[0-9]+}}, {{v[0-9]+}}.4s 109} 110 111uint8_t test_vmaxvq_u8(uint8x16_t a) { 112 // CHECK-LABEL: test_vmaxvq_u8 113 return vmaxvq_u8(a); 114 // CHECK: umaxv {{b[0-9]+}}, {{v[0-9]+}}.16b 115} 116 117uint16_t test_vmaxvq_u16(uint16x8_t a) { 118 // CHECK-LABEL: test_vmaxvq_u16 119 return vmaxvq_u16(a); 120 // CHECK: umaxv {{h[0-9]+}}, {{v[0-9]+}}.8h 121} 122 123uint32_t test_vmaxvq_u32(uint32x4_t a) { 124 // CHECK-LABEL: test_vmaxvq_u32 125 return vmaxvq_u32(a); 126 // CHECK: umaxv {{s[0-9]+}}, {{v[0-9]+}}.4s 127} 128 129int8_t test_vminv_s8(int8x8_t a) { 130 // CHECK-LABEL: test_vminv_s8 131 return vminv_s8(a); 132 // CHECK: sminv {{b[0-9]+}}, {{v[0-9]+}}.8b 133} 134 135int16_t test_vminv_s16(int16x4_t a) { 136 // CHECK-LABEL: test_vminv_s16 137 return vminv_s16(a); 138 // CHECK: sminv {{h[0-9]+}}, {{v[0-9]+}}.4h 139} 140 141uint8_t test_vminv_u8(uint8x8_t a) { 142 // CHECK-LABEL: test_vminv_u8 143 return vminv_u8(a); 144 // CHECK: uminv {{b[0-9]+}}, {{v[0-9]+}}.8b 145} 146 147uint16_t test_vminv_u16(uint16x4_t a) { 148 // CHECK-LABEL: test_vminv_u16 149 return vminv_u16(a); 150 // CHECK: uminv {{h[0-9]+}}, {{v[0-9]+}}.4h 151} 152 153int8_t test_vminvq_s8(int8x16_t a) { 154 // CHECK-LABEL: test_vminvq_s8 155 return vminvq_s8(a); 156 // CHECK: sminv {{b[0-9]+}}, {{v[0-9]+}}.16b 157} 158 159int16_t test_vminvq_s16(int16x8_t a) { 160 // CHECK-LABEL: test_vminvq_s16 161 return vminvq_s16(a); 162 // CHECK: sminv {{h[0-9]+}}, {{v[0-9]+}}.8h 163} 164 165int32_t test_vminvq_s32(int32x4_t a) { 166 // CHECK-LABEL: test_vminvq_s32 167 return vminvq_s32(a); 168 // CHECK: sminv {{s[0-9]+}}, {{v[0-9]+}}.4s 169} 170 171uint8_t test_vminvq_u8(uint8x16_t a) { 172 // CHECK-LABEL: test_vminvq_u8 173 return vminvq_u8(a); 174 // CHECK: uminv {{b[0-9]+}}, {{v[0-9]+}}.16b 175} 176 177uint16_t test_vminvq_u16(uint16x8_t a) { 178 // CHECK-LABEL: test_vminvq_u16 179 return vminvq_u16(a); 180 // CHECK: uminv {{h[0-9]+}}, {{v[0-9]+}}.8h 181} 182 183uint32_t test_vminvq_u32(uint32x4_t a) { 184 // CHECK-LABEL: test_vminvq_u32 185 return vminvq_u32(a); 186 // CHECK: uminv {{s[0-9]+}}, {{v[0-9]+}}.4s 187} 188 189int8_t test_vaddv_s8(int8x8_t a) { 190 // CHECK-LABEL: test_vaddv_s8 191 return vaddv_s8(a); 192 // CHECK: addv {{b[0-9]+}}, {{v[0-9]+}}.8b 193} 194 195int16_t test_vaddv_s16(int16x4_t a) { 196 // CHECK-LABEL: test_vaddv_s16 197 return vaddv_s16(a); 198 // CHECK: addv {{h[0-9]+}}, {{v[0-9]+}}.4h 199} 200 201uint8_t test_vaddv_u8(uint8x8_t a) { 202 // CHECK-LABEL: test_vaddv_u8 203 return vaddv_u8(a); 204 // CHECK: addv {{b[0-9]+}}, {{v[0-9]+}}.8b 205} 206 207uint16_t test_vaddv_u16(uint16x4_t a) { 208 // CHECK-LABEL: test_vaddv_u16 209 return vaddv_u16(a); 210 // CHECK: addv {{h[0-9]+}}, {{v[0-9]+}}.4h 211} 212 213int8_t test_vaddvq_s8(int8x16_t a) { 214 // CHECK-LABEL: test_vaddvq_s8 215 return vaddvq_s8(a); 216 // CHECK: addv {{b[0-9]+}}, {{v[0-9]+}}.16b 217} 218 219int16_t test_vaddvq_s16(int16x8_t a) { 220 // CHECK-LABEL: test_vaddvq_s16 221 return vaddvq_s16(a); 222 // CHECK: addv {{h[0-9]+}}, {{v[0-9]+}}.8h 223} 224 225int32_t test_vaddvq_s32(int32x4_t a) { 226 // CHECK-LABEL: test_vaddvq_s32 227 return vaddvq_s32(a); 228 // CHECK: addv {{s[0-9]+}}, {{v[0-9]+}}.4s 229} 230 231uint8_t test_vaddvq_u8(uint8x16_t a) { 232 // CHECK-LABEL: test_vaddvq_u8 233 return vaddvq_u8(a); 234 // CHECK: addv {{b[0-9]+}}, {{v[0-9]+}}.16b 235} 236 237uint16_t test_vaddvq_u16(uint16x8_t a) { 238 // CHECK-LABEL: test_vaddvq_u16 239 return vaddvq_u16(a); 240 // CHECK: addv {{h[0-9]+}}, {{v[0-9]+}}.8h 241} 242 243uint32_t test_vaddvq_u32(uint32x4_t a) { 244 // CHECK-LABEL: test_vaddvq_u32 245 return vaddvq_u32(a); 246 // CHECK: addv {{s[0-9]+}}, {{v[0-9]+}}.4s 247} 248 249float32_t test_vmaxvq_f32(float32x4_t a) { 250 // CHECK-LABEL: test_vmaxvq_f32 251 return vmaxvq_f32(a); 252 // CHECK: fmaxv {{s[0-9]+}}, {{v[0-9]+}}.4s 253} 254 255float32_t test_vminvq_f32(float32x4_t a) { 256 // CHECK-LABEL: test_vminvq_f32 257 return vminvq_f32(a); 258 // CHECK: fminv {{s[0-9]+}}, {{v[0-9]+}}.4s 259} 260 261float32_t test_vmaxnmvq_f32(float32x4_t a) { 262 // CHECK-LABEL: test_vmaxnmvq_f32 263 return vmaxnmvq_f32(a); 264 // CHECK: fmaxnmv {{s[0-9]+}}, {{v[0-9]+}}.4s 265} 266 267float32_t test_vminnmvq_f32(float32x4_t a) { 268 // CHECK-LABEL: test_vminnmvq_f32 269 return vminnmvq_f32(a); 270 // CHECK: fminnmv {{s[0-9]+}}, {{v[0-9]+}}.4s 271} 272