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 9 int16_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 15 int32_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 21 uint16_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 27 uint32_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 33 int16_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 39 int32_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 45 int64_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 51 uint16_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 57 uint32_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 63 uint64_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 69 int8_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 75 int16_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 81 uint8_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 87 uint16_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 93 int8_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 99 int16_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 105 int32_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 111 uint8_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 117 uint16_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 123 uint32_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 129 int8_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 135 int16_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 141 uint8_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 147 uint16_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 153 int8_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 159 int16_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 165 int32_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 171 uint8_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 177 uint16_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 183 uint32_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 189 int8_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 195 int16_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 201 uint8_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 207 uint16_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 213 int8_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 219 int16_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 225 int32_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 231 uint8_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 237 uint16_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 243 uint32_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 249 float32_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 255 float32_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 261 float32_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 267 float32_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