1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py 2 // RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes='mem2reg,sroa,early-cse<>' | FileCheck %s --check-prefix=BOTH --check-prefix=LE 3 // RUN: %clang_cc1 -triple thumbv8.1m.main-none-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -disable-O0-optnone -DPOLYMORPHIC -emit-llvm -o - %s | opt -S -passes='mem2reg,sroa,early-cse<>' | FileCheck %s --check-prefix=BOTH --check-prefix=LE 4 // RUN: %clang_cc1 -triple thumbebv8.1m.main-arm-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes='mem2reg,sroa,early-cse<>' | FileCheck %s --check-prefix=BOTH --check-prefix=BE 5 // RUN: %clang_cc1 -triple thumbebv8.1m.main-arm-none-eabi -target-feature +mve.fp -mfloat-abi hard -O0 -disable-O0-optnone -DPOLYMORPHIC -emit-llvm -o - %s | opt -S -passes='mem2reg,sroa,early-cse<>' | FileCheck %s --check-prefix=BOTH --check-prefix=BE 6 7 // REQUIRES: aarch64-registered-target || arm-registered-target 8 9 #include <arm_mve.h> 10 11 // LE-LABEL: @test_vreinterpretq_f16_f32( 12 // LE-NEXT: entry: 13 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <8 x half> 14 // LE-NEXT: ret <8 x half> [[TMP0]] 15 // 16 // BE-LABEL: @test_vreinterpretq_f16_f32( 17 // BE-NEXT: entry: 18 // BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v4f32(<4 x float> [[A:%.*]]) 19 // BE-NEXT: ret <8 x half> [[TMP0]] 20 // test_vreinterpretq_f16_f32(float32x4_t a)21float16x8_t test_vreinterpretq_f16_f32(float32x4_t a) 22 { 23 #ifdef POLYMORPHIC 24 return vreinterpretq_f16(a); 25 #else /* POLYMORPHIC */ 26 return vreinterpretq_f16_f32(a); 27 #endif /* POLYMORPHIC */ 28 } 29 30 // BOTH-LABEL: @test_vreinterpretq_f16_s16( 31 // BOTH-NEXT: entry: 32 // BOTH-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <8 x half> 33 // BOTH-NEXT: ret <8 x half> [[TMP0]] 34 // test_vreinterpretq_f16_s16(int16x8_t a)35float16x8_t test_vreinterpretq_f16_s16(int16x8_t a) 36 { 37 #ifdef POLYMORPHIC 38 return vreinterpretq_f16(a); 39 #else /* POLYMORPHIC */ 40 return vreinterpretq_f16_s16(a); 41 #endif /* POLYMORPHIC */ 42 } 43 44 // LE-LABEL: @test_vreinterpretq_f16_s32( 45 // LE-NEXT: entry: 46 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x half> 47 // LE-NEXT: ret <8 x half> [[TMP0]] 48 // 49 // BE-LABEL: @test_vreinterpretq_f16_s32( 50 // BE-NEXT: entry: 51 // BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v4i32(<4 x i32> [[A:%.*]]) 52 // BE-NEXT: ret <8 x half> [[TMP0]] 53 // test_vreinterpretq_f16_s32(int32x4_t a)54float16x8_t test_vreinterpretq_f16_s32(int32x4_t a) 55 { 56 #ifdef POLYMORPHIC 57 return vreinterpretq_f16(a); 58 #else /* POLYMORPHIC */ 59 return vreinterpretq_f16_s32(a); 60 #endif /* POLYMORPHIC */ 61 } 62 63 // LE-LABEL: @test_vreinterpretq_f16_s64( 64 // LE-NEXT: entry: 65 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x half> 66 // LE-NEXT: ret <8 x half> [[TMP0]] 67 // 68 // BE-LABEL: @test_vreinterpretq_f16_s64( 69 // BE-NEXT: entry: 70 // BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v2i64(<2 x i64> [[A:%.*]]) 71 // BE-NEXT: ret <8 x half> [[TMP0]] 72 // test_vreinterpretq_f16_s64(int64x2_t a)73float16x8_t test_vreinterpretq_f16_s64(int64x2_t a) 74 { 75 #ifdef POLYMORPHIC 76 return vreinterpretq_f16(a); 77 #else /* POLYMORPHIC */ 78 return vreinterpretq_f16_s64(a); 79 #endif /* POLYMORPHIC */ 80 } 81 82 // LE-LABEL: @test_vreinterpretq_f16_s8( 83 // LE-NEXT: entry: 84 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x half> 85 // LE-NEXT: ret <8 x half> [[TMP0]] 86 // 87 // BE-LABEL: @test_vreinterpretq_f16_s8( 88 // BE-NEXT: entry: 89 // BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v16i8(<16 x i8> [[A:%.*]]) 90 // BE-NEXT: ret <8 x half> [[TMP0]] 91 // test_vreinterpretq_f16_s8(int8x16_t a)92float16x8_t test_vreinterpretq_f16_s8(int8x16_t a) 93 { 94 #ifdef POLYMORPHIC 95 return vreinterpretq_f16(a); 96 #else /* POLYMORPHIC */ 97 return vreinterpretq_f16_s8(a); 98 #endif /* POLYMORPHIC */ 99 } 100 101 // BOTH-LABEL: @test_vreinterpretq_f16_u16( 102 // BOTH-NEXT: entry: 103 // BOTH-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <8 x half> 104 // BOTH-NEXT: ret <8 x half> [[TMP0]] 105 // test_vreinterpretq_f16_u16(uint16x8_t a)106float16x8_t test_vreinterpretq_f16_u16(uint16x8_t a) 107 { 108 #ifdef POLYMORPHIC 109 return vreinterpretq_f16(a); 110 #else /* POLYMORPHIC */ 111 return vreinterpretq_f16_u16(a); 112 #endif /* POLYMORPHIC */ 113 } 114 115 // LE-LABEL: @test_vreinterpretq_f16_u32( 116 // LE-NEXT: entry: 117 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x half> 118 // LE-NEXT: ret <8 x half> [[TMP0]] 119 // 120 // BE-LABEL: @test_vreinterpretq_f16_u32( 121 // BE-NEXT: entry: 122 // BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v4i32(<4 x i32> [[A:%.*]]) 123 // BE-NEXT: ret <8 x half> [[TMP0]] 124 // test_vreinterpretq_f16_u32(uint32x4_t a)125float16x8_t test_vreinterpretq_f16_u32(uint32x4_t a) 126 { 127 #ifdef POLYMORPHIC 128 return vreinterpretq_f16(a); 129 #else /* POLYMORPHIC */ 130 return vreinterpretq_f16_u32(a); 131 #endif /* POLYMORPHIC */ 132 } 133 134 // LE-LABEL: @test_vreinterpretq_f16_u64( 135 // LE-NEXT: entry: 136 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x half> 137 // LE-NEXT: ret <8 x half> [[TMP0]] 138 // 139 // BE-LABEL: @test_vreinterpretq_f16_u64( 140 // BE-NEXT: entry: 141 // BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v2i64(<2 x i64> [[A:%.*]]) 142 // BE-NEXT: ret <8 x half> [[TMP0]] 143 // test_vreinterpretq_f16_u64(uint64x2_t a)144float16x8_t test_vreinterpretq_f16_u64(uint64x2_t a) 145 { 146 #ifdef POLYMORPHIC 147 return vreinterpretq_f16(a); 148 #else /* POLYMORPHIC */ 149 return vreinterpretq_f16_u64(a); 150 #endif /* POLYMORPHIC */ 151 } 152 153 // LE-LABEL: @test_vreinterpretq_f16_u8( 154 // LE-NEXT: entry: 155 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x half> 156 // LE-NEXT: ret <8 x half> [[TMP0]] 157 // 158 // BE-LABEL: @test_vreinterpretq_f16_u8( 159 // BE-NEXT: entry: 160 // BE-NEXT: [[TMP0:%.*]] = call <8 x half> @llvm.arm.mve.vreinterpretq.v8f16.v16i8(<16 x i8> [[A:%.*]]) 161 // BE-NEXT: ret <8 x half> [[TMP0]] 162 // test_vreinterpretq_f16_u8(uint8x16_t a)163float16x8_t test_vreinterpretq_f16_u8(uint8x16_t a) 164 { 165 #ifdef POLYMORPHIC 166 return vreinterpretq_f16(a); 167 #else /* POLYMORPHIC */ 168 return vreinterpretq_f16_u8(a); 169 #endif /* POLYMORPHIC */ 170 } 171 172 // LE-LABEL: @test_vreinterpretq_f32_f16( 173 // LE-NEXT: entry: 174 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <4 x float> 175 // LE-NEXT: ret <4 x float> [[TMP0]] 176 // 177 // BE-LABEL: @test_vreinterpretq_f32_f16( 178 // BE-NEXT: entry: 179 // BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v8f16(<8 x half> [[A:%.*]]) 180 // BE-NEXT: ret <4 x float> [[TMP0]] 181 // test_vreinterpretq_f32_f16(float16x8_t a)182float32x4_t test_vreinterpretq_f32_f16(float16x8_t a) 183 { 184 #ifdef POLYMORPHIC 185 return vreinterpretq_f32(a); 186 #else /* POLYMORPHIC */ 187 return vreinterpretq_f32_f16(a); 188 #endif /* POLYMORPHIC */ 189 } 190 191 // LE-LABEL: @test_vreinterpretq_f32_s16( 192 // LE-NEXT: entry: 193 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x float> 194 // LE-NEXT: ret <4 x float> [[TMP0]] 195 // 196 // BE-LABEL: @test_vreinterpretq_f32_s16( 197 // BE-NEXT: entry: 198 // BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v8i16(<8 x i16> [[A:%.*]]) 199 // BE-NEXT: ret <4 x float> [[TMP0]] 200 // test_vreinterpretq_f32_s16(int16x8_t a)201float32x4_t test_vreinterpretq_f32_s16(int16x8_t a) 202 { 203 #ifdef POLYMORPHIC 204 return vreinterpretq_f32(a); 205 #else /* POLYMORPHIC */ 206 return vreinterpretq_f32_s16(a); 207 #endif /* POLYMORPHIC */ 208 } 209 210 // BOTH-LABEL: @test_vreinterpretq_f32_s32( 211 // BOTH-NEXT: entry: 212 // BOTH-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <4 x float> 213 // BOTH-NEXT: ret <4 x float> [[TMP0]] 214 // test_vreinterpretq_f32_s32(int32x4_t a)215float32x4_t test_vreinterpretq_f32_s32(int32x4_t a) 216 { 217 #ifdef POLYMORPHIC 218 return vreinterpretq_f32(a); 219 #else /* POLYMORPHIC */ 220 return vreinterpretq_f32_s32(a); 221 #endif /* POLYMORPHIC */ 222 } 223 224 // LE-LABEL: @test_vreinterpretq_f32_s64( 225 // LE-NEXT: entry: 226 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x float> 227 // LE-NEXT: ret <4 x float> [[TMP0]] 228 // 229 // BE-LABEL: @test_vreinterpretq_f32_s64( 230 // BE-NEXT: entry: 231 // BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v2i64(<2 x i64> [[A:%.*]]) 232 // BE-NEXT: ret <4 x float> [[TMP0]] 233 // test_vreinterpretq_f32_s64(int64x2_t a)234float32x4_t test_vreinterpretq_f32_s64(int64x2_t a) 235 { 236 #ifdef POLYMORPHIC 237 return vreinterpretq_f32(a); 238 #else /* POLYMORPHIC */ 239 return vreinterpretq_f32_s64(a); 240 #endif /* POLYMORPHIC */ 241 } 242 243 // LE-LABEL: @test_vreinterpretq_f32_s8( 244 // LE-NEXT: entry: 245 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x float> 246 // LE-NEXT: ret <4 x float> [[TMP0]] 247 // 248 // BE-LABEL: @test_vreinterpretq_f32_s8( 249 // BE-NEXT: entry: 250 // BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v16i8(<16 x i8> [[A:%.*]]) 251 // BE-NEXT: ret <4 x float> [[TMP0]] 252 // test_vreinterpretq_f32_s8(int8x16_t a)253float32x4_t test_vreinterpretq_f32_s8(int8x16_t a) 254 { 255 #ifdef POLYMORPHIC 256 return vreinterpretq_f32(a); 257 #else /* POLYMORPHIC */ 258 return vreinterpretq_f32_s8(a); 259 #endif /* POLYMORPHIC */ 260 } 261 262 // LE-LABEL: @test_vreinterpretq_f32_u16( 263 // LE-NEXT: entry: 264 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x float> 265 // LE-NEXT: ret <4 x float> [[TMP0]] 266 // 267 // BE-LABEL: @test_vreinterpretq_f32_u16( 268 // BE-NEXT: entry: 269 // BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v8i16(<8 x i16> [[A:%.*]]) 270 // BE-NEXT: ret <4 x float> [[TMP0]] 271 // test_vreinterpretq_f32_u16(uint16x8_t a)272float32x4_t test_vreinterpretq_f32_u16(uint16x8_t a) 273 { 274 #ifdef POLYMORPHIC 275 return vreinterpretq_f32(a); 276 #else /* POLYMORPHIC */ 277 return vreinterpretq_f32_u16(a); 278 #endif /* POLYMORPHIC */ 279 } 280 281 // BOTH-LABEL: @test_vreinterpretq_f32_u32( 282 // BOTH-NEXT: entry: 283 // BOTH-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <4 x float> 284 // BOTH-NEXT: ret <4 x float> [[TMP0]] 285 // test_vreinterpretq_f32_u32(uint32x4_t a)286float32x4_t test_vreinterpretq_f32_u32(uint32x4_t a) 287 { 288 #ifdef POLYMORPHIC 289 return vreinterpretq_f32(a); 290 #else /* POLYMORPHIC */ 291 return vreinterpretq_f32_u32(a); 292 #endif /* POLYMORPHIC */ 293 } 294 295 // LE-LABEL: @test_vreinterpretq_f32_u64( 296 // LE-NEXT: entry: 297 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x float> 298 // LE-NEXT: ret <4 x float> [[TMP0]] 299 // 300 // BE-LABEL: @test_vreinterpretq_f32_u64( 301 // BE-NEXT: entry: 302 // BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v2i64(<2 x i64> [[A:%.*]]) 303 // BE-NEXT: ret <4 x float> [[TMP0]] 304 // test_vreinterpretq_f32_u64(uint64x2_t a)305float32x4_t test_vreinterpretq_f32_u64(uint64x2_t a) 306 { 307 #ifdef POLYMORPHIC 308 return vreinterpretq_f32(a); 309 #else /* POLYMORPHIC */ 310 return vreinterpretq_f32_u64(a); 311 #endif /* POLYMORPHIC */ 312 } 313 314 // LE-LABEL: @test_vreinterpretq_f32_u8( 315 // LE-NEXT: entry: 316 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x float> 317 // LE-NEXT: ret <4 x float> [[TMP0]] 318 // 319 // BE-LABEL: @test_vreinterpretq_f32_u8( 320 // BE-NEXT: entry: 321 // BE-NEXT: [[TMP0:%.*]] = call <4 x float> @llvm.arm.mve.vreinterpretq.v4f32.v16i8(<16 x i8> [[A:%.*]]) 322 // BE-NEXT: ret <4 x float> [[TMP0]] 323 // test_vreinterpretq_f32_u8(uint8x16_t a)324float32x4_t test_vreinterpretq_f32_u8(uint8x16_t a) 325 { 326 #ifdef POLYMORPHIC 327 return vreinterpretq_f32(a); 328 #else /* POLYMORPHIC */ 329 return vreinterpretq_f32_u8(a); 330 #endif /* POLYMORPHIC */ 331 } 332 333 // BOTH-LABEL: @test_vreinterpretq_s16_f16( 334 // BOTH-NEXT: entry: 335 // BOTH-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <8 x i16> 336 // BOTH-NEXT: ret <8 x i16> [[TMP0]] 337 // test_vreinterpretq_s16_f16(float16x8_t a)338int16x8_t test_vreinterpretq_s16_f16(float16x8_t a) 339 { 340 #ifdef POLYMORPHIC 341 return vreinterpretq_s16(a); 342 #else /* POLYMORPHIC */ 343 return vreinterpretq_s16_f16(a); 344 #endif /* POLYMORPHIC */ 345 } 346 347 // LE-LABEL: @test_vreinterpretq_s16_f32( 348 // LE-NEXT: entry: 349 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <8 x i16> 350 // LE-NEXT: ret <8 x i16> [[TMP0]] 351 // 352 // BE-LABEL: @test_vreinterpretq_s16_f32( 353 // BE-NEXT: entry: 354 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4f32(<4 x float> [[A:%.*]]) 355 // BE-NEXT: ret <8 x i16> [[TMP0]] 356 // test_vreinterpretq_s16_f32(float32x4_t a)357int16x8_t test_vreinterpretq_s16_f32(float32x4_t a) 358 { 359 #ifdef POLYMORPHIC 360 return vreinterpretq_s16(a); 361 #else /* POLYMORPHIC */ 362 return vreinterpretq_s16_f32(a); 363 #endif /* POLYMORPHIC */ 364 } 365 366 // LE-LABEL: @test_vreinterpretq_s16_s32( 367 // LE-NEXT: entry: 368 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16> 369 // LE-NEXT: ret <8 x i16> [[TMP0]] 370 // 371 // BE-LABEL: @test_vreinterpretq_s16_s32( 372 // BE-NEXT: entry: 373 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32> [[A:%.*]]) 374 // BE-NEXT: ret <8 x i16> [[TMP0]] 375 // test_vreinterpretq_s16_s32(int32x4_t a)376int16x8_t test_vreinterpretq_s16_s32(int32x4_t a) 377 { 378 #ifdef POLYMORPHIC 379 return vreinterpretq_s16(a); 380 #else /* POLYMORPHIC */ 381 return vreinterpretq_s16_s32(a); 382 #endif /* POLYMORPHIC */ 383 } 384 385 // LE-LABEL: @test_vreinterpretq_s16_s64( 386 // LE-NEXT: entry: 387 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x i16> 388 // LE-NEXT: ret <8 x i16> [[TMP0]] 389 // 390 // BE-LABEL: @test_vreinterpretq_s16_s64( 391 // BE-NEXT: entry: 392 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[A:%.*]]) 393 // BE-NEXT: ret <8 x i16> [[TMP0]] 394 // test_vreinterpretq_s16_s64(int64x2_t a)395int16x8_t test_vreinterpretq_s16_s64(int64x2_t a) 396 { 397 #ifdef POLYMORPHIC 398 return vreinterpretq_s16(a); 399 #else /* POLYMORPHIC */ 400 return vreinterpretq_s16_s64(a); 401 #endif /* POLYMORPHIC */ 402 } 403 404 // LE-LABEL: @test_vreinterpretq_s16_s8( 405 // LE-NEXT: entry: 406 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16> 407 // LE-NEXT: ret <8 x i16> [[TMP0]] 408 // 409 // BE-LABEL: @test_vreinterpretq_s16_s8( 410 // BE-NEXT: entry: 411 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]]) 412 // BE-NEXT: ret <8 x i16> [[TMP0]] 413 // test_vreinterpretq_s16_s8(int8x16_t a)414int16x8_t test_vreinterpretq_s16_s8(int8x16_t a) 415 { 416 #ifdef POLYMORPHIC 417 return vreinterpretq_s16(a); 418 #else /* POLYMORPHIC */ 419 return vreinterpretq_s16_s8(a); 420 #endif /* POLYMORPHIC */ 421 } 422 423 // BOTH-LABEL: @test_vreinterpretq_s16_u16( 424 // BOTH-NEXT: entry: 425 // BOTH-NEXT: ret <8 x i16> [[A:%.*]] 426 // test_vreinterpretq_s16_u16(uint16x8_t a)427int16x8_t test_vreinterpretq_s16_u16(uint16x8_t a) 428 { 429 #ifdef POLYMORPHIC 430 return vreinterpretq_s16(a); 431 #else /* POLYMORPHIC */ 432 return vreinterpretq_s16_u16(a); 433 #endif /* POLYMORPHIC */ 434 } 435 436 // LE-LABEL: @test_vreinterpretq_s16_u32( 437 // LE-NEXT: entry: 438 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16> 439 // LE-NEXT: ret <8 x i16> [[TMP0]] 440 // 441 // BE-LABEL: @test_vreinterpretq_s16_u32( 442 // BE-NEXT: entry: 443 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32> [[A:%.*]]) 444 // BE-NEXT: ret <8 x i16> [[TMP0]] 445 // test_vreinterpretq_s16_u32(uint32x4_t a)446int16x8_t test_vreinterpretq_s16_u32(uint32x4_t a) 447 { 448 #ifdef POLYMORPHIC 449 return vreinterpretq_s16(a); 450 #else /* POLYMORPHIC */ 451 return vreinterpretq_s16_u32(a); 452 #endif /* POLYMORPHIC */ 453 } 454 455 // LE-LABEL: @test_vreinterpretq_s16_u64( 456 // LE-NEXT: entry: 457 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x i16> 458 // LE-NEXT: ret <8 x i16> [[TMP0]] 459 // 460 // BE-LABEL: @test_vreinterpretq_s16_u64( 461 // BE-NEXT: entry: 462 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[A:%.*]]) 463 // BE-NEXT: ret <8 x i16> [[TMP0]] 464 // test_vreinterpretq_s16_u64(uint64x2_t a)465int16x8_t test_vreinterpretq_s16_u64(uint64x2_t a) 466 { 467 #ifdef POLYMORPHIC 468 return vreinterpretq_s16(a); 469 #else /* POLYMORPHIC */ 470 return vreinterpretq_s16_u64(a); 471 #endif /* POLYMORPHIC */ 472 } 473 474 // LE-LABEL: @test_vreinterpretq_s16_u8( 475 // LE-NEXT: entry: 476 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16> 477 // LE-NEXT: ret <8 x i16> [[TMP0]] 478 // 479 // BE-LABEL: @test_vreinterpretq_s16_u8( 480 // BE-NEXT: entry: 481 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]]) 482 // BE-NEXT: ret <8 x i16> [[TMP0]] 483 // test_vreinterpretq_s16_u8(uint8x16_t a)484int16x8_t test_vreinterpretq_s16_u8(uint8x16_t a) 485 { 486 #ifdef POLYMORPHIC 487 return vreinterpretq_s16(a); 488 #else /* POLYMORPHIC */ 489 return vreinterpretq_s16_u8(a); 490 #endif /* POLYMORPHIC */ 491 } 492 493 // LE-LABEL: @test_vreinterpretq_s32_f16( 494 // LE-NEXT: entry: 495 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <4 x i32> 496 // LE-NEXT: ret <4 x i32> [[TMP0]] 497 // 498 // BE-LABEL: @test_vreinterpretq_s32_f16( 499 // BE-NEXT: entry: 500 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8f16(<8 x half> [[A:%.*]]) 501 // BE-NEXT: ret <4 x i32> [[TMP0]] 502 // test_vreinterpretq_s32_f16(float16x8_t a)503int32x4_t test_vreinterpretq_s32_f16(float16x8_t a) 504 { 505 #ifdef POLYMORPHIC 506 return vreinterpretq_s32(a); 507 #else /* POLYMORPHIC */ 508 return vreinterpretq_s32_f16(a); 509 #endif /* POLYMORPHIC */ 510 } 511 512 // BOTH-LABEL: @test_vreinterpretq_s32_f32( 513 // BOTH-NEXT: entry: 514 // BOTH-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <4 x i32> 515 // BOTH-NEXT: ret <4 x i32> [[TMP0]] 516 // test_vreinterpretq_s32_f32(float32x4_t a)517int32x4_t test_vreinterpretq_s32_f32(float32x4_t a) 518 { 519 #ifdef POLYMORPHIC 520 return vreinterpretq_s32(a); 521 #else /* POLYMORPHIC */ 522 return vreinterpretq_s32_f32(a); 523 #endif /* POLYMORPHIC */ 524 } 525 526 // LE-LABEL: @test_vreinterpretq_s32_s16( 527 // LE-NEXT: entry: 528 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32> 529 // LE-NEXT: ret <4 x i32> [[TMP0]] 530 // 531 // BE-LABEL: @test_vreinterpretq_s32_s16( 532 // BE-NEXT: entry: 533 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]]) 534 // BE-NEXT: ret <4 x i32> [[TMP0]] 535 // test_vreinterpretq_s32_s16(int16x8_t a)536int32x4_t test_vreinterpretq_s32_s16(int16x8_t a) 537 { 538 #ifdef POLYMORPHIC 539 return vreinterpretq_s32(a); 540 #else /* POLYMORPHIC */ 541 return vreinterpretq_s32_s16(a); 542 #endif /* POLYMORPHIC */ 543 } 544 545 // LE-LABEL: @test_vreinterpretq_s32_s64( 546 // LE-NEXT: entry: 547 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32> 548 // LE-NEXT: ret <4 x i32> [[TMP0]] 549 // 550 // BE-LABEL: @test_vreinterpretq_s32_s64( 551 // BE-NEXT: entry: 552 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[A:%.*]]) 553 // BE-NEXT: ret <4 x i32> [[TMP0]] 554 // test_vreinterpretq_s32_s64(int64x2_t a)555int32x4_t test_vreinterpretq_s32_s64(int64x2_t a) 556 { 557 #ifdef POLYMORPHIC 558 return vreinterpretq_s32(a); 559 #else /* POLYMORPHIC */ 560 return vreinterpretq_s32_s64(a); 561 #endif /* POLYMORPHIC */ 562 } 563 564 // LE-LABEL: @test_vreinterpretq_s32_s8( 565 // LE-NEXT: entry: 566 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x i32> 567 // LE-NEXT: ret <4 x i32> [[TMP0]] 568 // 569 // BE-LABEL: @test_vreinterpretq_s32_s8( 570 // BE-NEXT: entry: 571 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v16i8(<16 x i8> [[A:%.*]]) 572 // BE-NEXT: ret <4 x i32> [[TMP0]] 573 // test_vreinterpretq_s32_s8(int8x16_t a)574int32x4_t test_vreinterpretq_s32_s8(int8x16_t a) 575 { 576 #ifdef POLYMORPHIC 577 return vreinterpretq_s32(a); 578 #else /* POLYMORPHIC */ 579 return vreinterpretq_s32_s8(a); 580 #endif /* POLYMORPHIC */ 581 } 582 583 // LE-LABEL: @test_vreinterpretq_s32_u16( 584 // LE-NEXT: entry: 585 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32> 586 // LE-NEXT: ret <4 x i32> [[TMP0]] 587 // 588 // BE-LABEL: @test_vreinterpretq_s32_u16( 589 // BE-NEXT: entry: 590 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]]) 591 // BE-NEXT: ret <4 x i32> [[TMP0]] 592 // test_vreinterpretq_s32_u16(uint16x8_t a)593int32x4_t test_vreinterpretq_s32_u16(uint16x8_t a) 594 { 595 #ifdef POLYMORPHIC 596 return vreinterpretq_s32(a); 597 #else /* POLYMORPHIC */ 598 return vreinterpretq_s32_u16(a); 599 #endif /* POLYMORPHIC */ 600 } 601 602 // BOTH-LABEL: @test_vreinterpretq_s32_u32( 603 // BOTH-NEXT: entry: 604 // BOTH-NEXT: ret <4 x i32> [[A:%.*]] 605 // test_vreinterpretq_s32_u32(uint32x4_t a)606int32x4_t test_vreinterpretq_s32_u32(uint32x4_t a) 607 { 608 #ifdef POLYMORPHIC 609 return vreinterpretq_s32(a); 610 #else /* POLYMORPHIC */ 611 return vreinterpretq_s32_u32(a); 612 #endif /* POLYMORPHIC */ 613 } 614 615 // LE-LABEL: @test_vreinterpretq_s32_u64( 616 // LE-NEXT: entry: 617 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32> 618 // LE-NEXT: ret <4 x i32> [[TMP0]] 619 // 620 // BE-LABEL: @test_vreinterpretq_s32_u64( 621 // BE-NEXT: entry: 622 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[A:%.*]]) 623 // BE-NEXT: ret <4 x i32> [[TMP0]] 624 // test_vreinterpretq_s32_u64(uint64x2_t a)625int32x4_t test_vreinterpretq_s32_u64(uint64x2_t a) 626 { 627 #ifdef POLYMORPHIC 628 return vreinterpretq_s32(a); 629 #else /* POLYMORPHIC */ 630 return vreinterpretq_s32_u64(a); 631 #endif /* POLYMORPHIC */ 632 } 633 634 // LE-LABEL: @test_vreinterpretq_s32_u8( 635 // LE-NEXT: entry: 636 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x i32> 637 // LE-NEXT: ret <4 x i32> [[TMP0]] 638 // 639 // BE-LABEL: @test_vreinterpretq_s32_u8( 640 // BE-NEXT: entry: 641 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v16i8(<16 x i8> [[A:%.*]]) 642 // BE-NEXT: ret <4 x i32> [[TMP0]] 643 // test_vreinterpretq_s32_u8(uint8x16_t a)644int32x4_t test_vreinterpretq_s32_u8(uint8x16_t a) 645 { 646 #ifdef POLYMORPHIC 647 return vreinterpretq_s32(a); 648 #else /* POLYMORPHIC */ 649 return vreinterpretq_s32_u8(a); 650 #endif /* POLYMORPHIC */ 651 } 652 653 // LE-LABEL: @test_vreinterpretq_s64_f16( 654 // LE-NEXT: entry: 655 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <2 x i64> 656 // LE-NEXT: ret <2 x i64> [[TMP0]] 657 // 658 // BE-LABEL: @test_vreinterpretq_s64_f16( 659 // BE-NEXT: entry: 660 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8f16(<8 x half> [[A:%.*]]) 661 // BE-NEXT: ret <2 x i64> [[TMP0]] 662 // test_vreinterpretq_s64_f16(float16x8_t a)663int64x2_t test_vreinterpretq_s64_f16(float16x8_t a) 664 { 665 #ifdef POLYMORPHIC 666 return vreinterpretq_s64(a); 667 #else /* POLYMORPHIC */ 668 return vreinterpretq_s64_f16(a); 669 #endif /* POLYMORPHIC */ 670 } 671 672 // LE-LABEL: @test_vreinterpretq_s64_f32( 673 // LE-NEXT: entry: 674 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <2 x i64> 675 // LE-NEXT: ret <2 x i64> [[TMP0]] 676 // 677 // BE-LABEL: @test_vreinterpretq_s64_f32( 678 // BE-NEXT: entry: 679 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4f32(<4 x float> [[A:%.*]]) 680 // BE-NEXT: ret <2 x i64> [[TMP0]] 681 // test_vreinterpretq_s64_f32(float32x4_t a)682int64x2_t test_vreinterpretq_s64_f32(float32x4_t a) 683 { 684 #ifdef POLYMORPHIC 685 return vreinterpretq_s64(a); 686 #else /* POLYMORPHIC */ 687 return vreinterpretq_s64_f32(a); 688 #endif /* POLYMORPHIC */ 689 } 690 691 // LE-LABEL: @test_vreinterpretq_s64_s16( 692 // LE-NEXT: entry: 693 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <2 x i64> 694 // LE-NEXT: ret <2 x i64> [[TMP0]] 695 // 696 // BE-LABEL: @test_vreinterpretq_s64_s16( 697 // BE-NEXT: entry: 698 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8i16(<8 x i16> [[A:%.*]]) 699 // BE-NEXT: ret <2 x i64> [[TMP0]] 700 // test_vreinterpretq_s64_s16(int16x8_t a)701int64x2_t test_vreinterpretq_s64_s16(int16x8_t a) 702 { 703 #ifdef POLYMORPHIC 704 return vreinterpretq_s64(a); 705 #else /* POLYMORPHIC */ 706 return vreinterpretq_s64_s16(a); 707 #endif /* POLYMORPHIC */ 708 } 709 710 // LE-LABEL: @test_vreinterpretq_s64_s32( 711 // LE-NEXT: entry: 712 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <2 x i64> 713 // LE-NEXT: ret <2 x i64> [[TMP0]] 714 // 715 // BE-LABEL: @test_vreinterpretq_s64_s32( 716 // BE-NEXT: entry: 717 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4i32(<4 x i32> [[A:%.*]]) 718 // BE-NEXT: ret <2 x i64> [[TMP0]] 719 // test_vreinterpretq_s64_s32(int32x4_t a)720int64x2_t test_vreinterpretq_s64_s32(int32x4_t a) 721 { 722 #ifdef POLYMORPHIC 723 return vreinterpretq_s64(a); 724 #else /* POLYMORPHIC */ 725 return vreinterpretq_s64_s32(a); 726 #endif /* POLYMORPHIC */ 727 } 728 729 // LE-LABEL: @test_vreinterpretq_s64_s8( 730 // LE-NEXT: entry: 731 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <2 x i64> 732 // LE-NEXT: ret <2 x i64> [[TMP0]] 733 // 734 // BE-LABEL: @test_vreinterpretq_s64_s8( 735 // BE-NEXT: entry: 736 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v16i8(<16 x i8> [[A:%.*]]) 737 // BE-NEXT: ret <2 x i64> [[TMP0]] 738 // test_vreinterpretq_s64_s8(int8x16_t a)739int64x2_t test_vreinterpretq_s64_s8(int8x16_t a) 740 { 741 #ifdef POLYMORPHIC 742 return vreinterpretq_s64(a); 743 #else /* POLYMORPHIC */ 744 return vreinterpretq_s64_s8(a); 745 #endif /* POLYMORPHIC */ 746 } 747 748 // LE-LABEL: @test_vreinterpretq_s64_u16( 749 // LE-NEXT: entry: 750 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <2 x i64> 751 // LE-NEXT: ret <2 x i64> [[TMP0]] 752 // 753 // BE-LABEL: @test_vreinterpretq_s64_u16( 754 // BE-NEXT: entry: 755 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8i16(<8 x i16> [[A:%.*]]) 756 // BE-NEXT: ret <2 x i64> [[TMP0]] 757 // test_vreinterpretq_s64_u16(uint16x8_t a)758int64x2_t test_vreinterpretq_s64_u16(uint16x8_t a) 759 { 760 #ifdef POLYMORPHIC 761 return vreinterpretq_s64(a); 762 #else /* POLYMORPHIC */ 763 return vreinterpretq_s64_u16(a); 764 #endif /* POLYMORPHIC */ 765 } 766 767 // LE-LABEL: @test_vreinterpretq_s64_u32( 768 // LE-NEXT: entry: 769 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <2 x i64> 770 // LE-NEXT: ret <2 x i64> [[TMP0]] 771 // 772 // BE-LABEL: @test_vreinterpretq_s64_u32( 773 // BE-NEXT: entry: 774 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4i32(<4 x i32> [[A:%.*]]) 775 // BE-NEXT: ret <2 x i64> [[TMP0]] 776 // test_vreinterpretq_s64_u32(uint32x4_t a)777int64x2_t test_vreinterpretq_s64_u32(uint32x4_t a) 778 { 779 #ifdef POLYMORPHIC 780 return vreinterpretq_s64(a); 781 #else /* POLYMORPHIC */ 782 return vreinterpretq_s64_u32(a); 783 #endif /* POLYMORPHIC */ 784 } 785 786 // BOTH-LABEL: @test_vreinterpretq_s64_u64( 787 // BOTH-NEXT: entry: 788 // BOTH-NEXT: ret <2 x i64> [[A:%.*]] 789 // test_vreinterpretq_s64_u64(uint64x2_t a)790int64x2_t test_vreinterpretq_s64_u64(uint64x2_t a) 791 { 792 #ifdef POLYMORPHIC 793 return vreinterpretq_s64(a); 794 #else /* POLYMORPHIC */ 795 return vreinterpretq_s64_u64(a); 796 #endif /* POLYMORPHIC */ 797 } 798 799 // LE-LABEL: @test_vreinterpretq_s64_u8( 800 // LE-NEXT: entry: 801 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <2 x i64> 802 // LE-NEXT: ret <2 x i64> [[TMP0]] 803 // 804 // BE-LABEL: @test_vreinterpretq_s64_u8( 805 // BE-NEXT: entry: 806 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v16i8(<16 x i8> [[A:%.*]]) 807 // BE-NEXT: ret <2 x i64> [[TMP0]] 808 // test_vreinterpretq_s64_u8(uint8x16_t a)809int64x2_t test_vreinterpretq_s64_u8(uint8x16_t a) 810 { 811 #ifdef POLYMORPHIC 812 return vreinterpretq_s64(a); 813 #else /* POLYMORPHIC */ 814 return vreinterpretq_s64_u8(a); 815 #endif /* POLYMORPHIC */ 816 } 817 818 // LE-LABEL: @test_vreinterpretq_s8_f16( 819 // LE-NEXT: entry: 820 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <16 x i8> 821 // LE-NEXT: ret <16 x i8> [[TMP0]] 822 // 823 // BE-LABEL: @test_vreinterpretq_s8_f16( 824 // BE-NEXT: entry: 825 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8f16(<8 x half> [[A:%.*]]) 826 // BE-NEXT: ret <16 x i8> [[TMP0]] 827 // test_vreinterpretq_s8_f16(float16x8_t a)828int8x16_t test_vreinterpretq_s8_f16(float16x8_t a) 829 { 830 #ifdef POLYMORPHIC 831 return vreinterpretq_s8(a); 832 #else /* POLYMORPHIC */ 833 return vreinterpretq_s8_f16(a); 834 #endif /* POLYMORPHIC */ 835 } 836 837 // LE-LABEL: @test_vreinterpretq_s8_f32( 838 // LE-NEXT: entry: 839 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <16 x i8> 840 // LE-NEXT: ret <16 x i8> [[TMP0]] 841 // 842 // BE-LABEL: @test_vreinterpretq_s8_f32( 843 // BE-NEXT: entry: 844 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4f32(<4 x float> [[A:%.*]]) 845 // BE-NEXT: ret <16 x i8> [[TMP0]] 846 // test_vreinterpretq_s8_f32(float32x4_t a)847int8x16_t test_vreinterpretq_s8_f32(float32x4_t a) 848 { 849 #ifdef POLYMORPHIC 850 return vreinterpretq_s8(a); 851 #else /* POLYMORPHIC */ 852 return vreinterpretq_s8_f32(a); 853 #endif /* POLYMORPHIC */ 854 } 855 856 // LE-LABEL: @test_vreinterpretq_s8_s16( 857 // LE-NEXT: entry: 858 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <16 x i8> 859 // LE-NEXT: ret <16 x i8> [[TMP0]] 860 // 861 // BE-LABEL: @test_vreinterpretq_s8_s16( 862 // BE-NEXT: entry: 863 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8i16(<8 x i16> [[A:%.*]]) 864 // BE-NEXT: ret <16 x i8> [[TMP0]] 865 // test_vreinterpretq_s8_s16(int16x8_t a)866int8x16_t test_vreinterpretq_s8_s16(int16x8_t a) 867 { 868 #ifdef POLYMORPHIC 869 return vreinterpretq_s8(a); 870 #else /* POLYMORPHIC */ 871 return vreinterpretq_s8_s16(a); 872 #endif /* POLYMORPHIC */ 873 } 874 875 // LE-LABEL: @test_vreinterpretq_s8_s32( 876 // LE-NEXT: entry: 877 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8> 878 // LE-NEXT: ret <16 x i8> [[TMP0]] 879 // 880 // BE-LABEL: @test_vreinterpretq_s8_s32( 881 // BE-NEXT: entry: 882 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4i32(<4 x i32> [[A:%.*]]) 883 // BE-NEXT: ret <16 x i8> [[TMP0]] 884 // test_vreinterpretq_s8_s32(int32x4_t a)885int8x16_t test_vreinterpretq_s8_s32(int32x4_t a) 886 { 887 #ifdef POLYMORPHIC 888 return vreinterpretq_s8(a); 889 #else /* POLYMORPHIC */ 890 return vreinterpretq_s8_s32(a); 891 #endif /* POLYMORPHIC */ 892 } 893 894 // LE-LABEL: @test_vreinterpretq_s8_s64( 895 // LE-NEXT: entry: 896 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <16 x i8> 897 // LE-NEXT: ret <16 x i8> [[TMP0]] 898 // 899 // BE-LABEL: @test_vreinterpretq_s8_s64( 900 // BE-NEXT: entry: 901 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[A:%.*]]) 902 // BE-NEXT: ret <16 x i8> [[TMP0]] 903 // test_vreinterpretq_s8_s64(int64x2_t a)904int8x16_t test_vreinterpretq_s8_s64(int64x2_t a) 905 { 906 #ifdef POLYMORPHIC 907 return vreinterpretq_s8(a); 908 #else /* POLYMORPHIC */ 909 return vreinterpretq_s8_s64(a); 910 #endif /* POLYMORPHIC */ 911 } 912 913 // LE-LABEL: @test_vreinterpretq_s8_u16( 914 // LE-NEXT: entry: 915 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <16 x i8> 916 // LE-NEXT: ret <16 x i8> [[TMP0]] 917 // 918 // BE-LABEL: @test_vreinterpretq_s8_u16( 919 // BE-NEXT: entry: 920 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8i16(<8 x i16> [[A:%.*]]) 921 // BE-NEXT: ret <16 x i8> [[TMP0]] 922 // test_vreinterpretq_s8_u16(uint16x8_t a)923int8x16_t test_vreinterpretq_s8_u16(uint16x8_t a) 924 { 925 #ifdef POLYMORPHIC 926 return vreinterpretq_s8(a); 927 #else /* POLYMORPHIC */ 928 return vreinterpretq_s8_u16(a); 929 #endif /* POLYMORPHIC */ 930 } 931 932 // LE-LABEL: @test_vreinterpretq_s8_u32( 933 // LE-NEXT: entry: 934 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8> 935 // LE-NEXT: ret <16 x i8> [[TMP0]] 936 // 937 // BE-LABEL: @test_vreinterpretq_s8_u32( 938 // BE-NEXT: entry: 939 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4i32(<4 x i32> [[A:%.*]]) 940 // BE-NEXT: ret <16 x i8> [[TMP0]] 941 // test_vreinterpretq_s8_u32(uint32x4_t a)942int8x16_t test_vreinterpretq_s8_u32(uint32x4_t a) 943 { 944 #ifdef POLYMORPHIC 945 return vreinterpretq_s8(a); 946 #else /* POLYMORPHIC */ 947 return vreinterpretq_s8_u32(a); 948 #endif /* POLYMORPHIC */ 949 } 950 951 // LE-LABEL: @test_vreinterpretq_s8_u64( 952 // LE-NEXT: entry: 953 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <16 x i8> 954 // LE-NEXT: ret <16 x i8> [[TMP0]] 955 // 956 // BE-LABEL: @test_vreinterpretq_s8_u64( 957 // BE-NEXT: entry: 958 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[A:%.*]]) 959 // BE-NEXT: ret <16 x i8> [[TMP0]] 960 // test_vreinterpretq_s8_u64(uint64x2_t a)961int8x16_t test_vreinterpretq_s8_u64(uint64x2_t a) 962 { 963 #ifdef POLYMORPHIC 964 return vreinterpretq_s8(a); 965 #else /* POLYMORPHIC */ 966 return vreinterpretq_s8_u64(a); 967 #endif /* POLYMORPHIC */ 968 } 969 970 // BOTH-LABEL: @test_vreinterpretq_s8_u8( 971 // BOTH-NEXT: entry: 972 // BOTH-NEXT: ret <16 x i8> [[A:%.*]] 973 // test_vreinterpretq_s8_u8(uint8x16_t a)974int8x16_t test_vreinterpretq_s8_u8(uint8x16_t a) 975 { 976 #ifdef POLYMORPHIC 977 return vreinterpretq_s8(a); 978 #else /* POLYMORPHIC */ 979 return vreinterpretq_s8_u8(a); 980 #endif /* POLYMORPHIC */ 981 } 982 983 // BOTH-LABEL: @test_vreinterpretq_u16_f16( 984 // BOTH-NEXT: entry: 985 // BOTH-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <8 x i16> 986 // BOTH-NEXT: ret <8 x i16> [[TMP0]] 987 // test_vreinterpretq_u16_f16(float16x8_t a)988uint16x8_t test_vreinterpretq_u16_f16(float16x8_t a) 989 { 990 #ifdef POLYMORPHIC 991 return vreinterpretq_u16(a); 992 #else /* POLYMORPHIC */ 993 return vreinterpretq_u16_f16(a); 994 #endif /* POLYMORPHIC */ 995 } 996 997 // LE-LABEL: @test_vreinterpretq_u16_f32( 998 // LE-NEXT: entry: 999 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <8 x i16> 1000 // LE-NEXT: ret <8 x i16> [[TMP0]] 1001 // 1002 // BE-LABEL: @test_vreinterpretq_u16_f32( 1003 // BE-NEXT: entry: 1004 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4f32(<4 x float> [[A:%.*]]) 1005 // BE-NEXT: ret <8 x i16> [[TMP0]] 1006 // test_vreinterpretq_u16_f32(float32x4_t a)1007uint16x8_t test_vreinterpretq_u16_f32(float32x4_t a) 1008 { 1009 #ifdef POLYMORPHIC 1010 return vreinterpretq_u16(a); 1011 #else /* POLYMORPHIC */ 1012 return vreinterpretq_u16_f32(a); 1013 #endif /* POLYMORPHIC */ 1014 } 1015 1016 // BOTH-LABEL: @test_vreinterpretq_u16_s16( 1017 // BOTH-NEXT: entry: 1018 // BOTH-NEXT: ret <8 x i16> [[A:%.*]] 1019 // test_vreinterpretq_u16_s16(int16x8_t a)1020uint16x8_t test_vreinterpretq_u16_s16(int16x8_t a) 1021 { 1022 #ifdef POLYMORPHIC 1023 return vreinterpretq_u16(a); 1024 #else /* POLYMORPHIC */ 1025 return vreinterpretq_u16_s16(a); 1026 #endif /* POLYMORPHIC */ 1027 } 1028 1029 // LE-LABEL: @test_vreinterpretq_u16_s32( 1030 // LE-NEXT: entry: 1031 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16> 1032 // LE-NEXT: ret <8 x i16> [[TMP0]] 1033 // 1034 // BE-LABEL: @test_vreinterpretq_u16_s32( 1035 // BE-NEXT: entry: 1036 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32> [[A:%.*]]) 1037 // BE-NEXT: ret <8 x i16> [[TMP0]] 1038 // test_vreinterpretq_u16_s32(int32x4_t a)1039uint16x8_t test_vreinterpretq_u16_s32(int32x4_t a) 1040 { 1041 #ifdef POLYMORPHIC 1042 return vreinterpretq_u16(a); 1043 #else /* POLYMORPHIC */ 1044 return vreinterpretq_u16_s32(a); 1045 #endif /* POLYMORPHIC */ 1046 } 1047 1048 // LE-LABEL: @test_vreinterpretq_u16_s64( 1049 // LE-NEXT: entry: 1050 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x i16> 1051 // LE-NEXT: ret <8 x i16> [[TMP0]] 1052 // 1053 // BE-LABEL: @test_vreinterpretq_u16_s64( 1054 // BE-NEXT: entry: 1055 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[A:%.*]]) 1056 // BE-NEXT: ret <8 x i16> [[TMP0]] 1057 // test_vreinterpretq_u16_s64(int64x2_t a)1058uint16x8_t test_vreinterpretq_u16_s64(int64x2_t a) 1059 { 1060 #ifdef POLYMORPHIC 1061 return vreinterpretq_u16(a); 1062 #else /* POLYMORPHIC */ 1063 return vreinterpretq_u16_s64(a); 1064 #endif /* POLYMORPHIC */ 1065 } 1066 1067 // LE-LABEL: @test_vreinterpretq_u16_s8( 1068 // LE-NEXT: entry: 1069 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16> 1070 // LE-NEXT: ret <8 x i16> [[TMP0]] 1071 // 1072 // BE-LABEL: @test_vreinterpretq_u16_s8( 1073 // BE-NEXT: entry: 1074 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]]) 1075 // BE-NEXT: ret <8 x i16> [[TMP0]] 1076 // test_vreinterpretq_u16_s8(int8x16_t a)1077uint16x8_t test_vreinterpretq_u16_s8(int8x16_t a) 1078 { 1079 #ifdef POLYMORPHIC 1080 return vreinterpretq_u16(a); 1081 #else /* POLYMORPHIC */ 1082 return vreinterpretq_u16_s8(a); 1083 #endif /* POLYMORPHIC */ 1084 } 1085 1086 // LE-LABEL: @test_vreinterpretq_u16_u32( 1087 // LE-NEXT: entry: 1088 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <8 x i16> 1089 // LE-NEXT: ret <8 x i16> [[TMP0]] 1090 // 1091 // BE-LABEL: @test_vreinterpretq_u16_u32( 1092 // BE-NEXT: entry: 1093 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v4i32(<4 x i32> [[A:%.*]]) 1094 // BE-NEXT: ret <8 x i16> [[TMP0]] 1095 // test_vreinterpretq_u16_u32(uint32x4_t a)1096uint16x8_t test_vreinterpretq_u16_u32(uint32x4_t a) 1097 { 1098 #ifdef POLYMORPHIC 1099 return vreinterpretq_u16(a); 1100 #else /* POLYMORPHIC */ 1101 return vreinterpretq_u16_u32(a); 1102 #endif /* POLYMORPHIC */ 1103 } 1104 1105 // LE-LABEL: @test_vreinterpretq_u16_u64( 1106 // LE-NEXT: entry: 1107 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <8 x i16> 1108 // LE-NEXT: ret <8 x i16> [[TMP0]] 1109 // 1110 // BE-LABEL: @test_vreinterpretq_u16_u64( 1111 // BE-NEXT: entry: 1112 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v2i64(<2 x i64> [[A:%.*]]) 1113 // BE-NEXT: ret <8 x i16> [[TMP0]] 1114 // test_vreinterpretq_u16_u64(uint64x2_t a)1115uint16x8_t test_vreinterpretq_u16_u64(uint64x2_t a) 1116 { 1117 #ifdef POLYMORPHIC 1118 return vreinterpretq_u16(a); 1119 #else /* POLYMORPHIC */ 1120 return vreinterpretq_u16_u64(a); 1121 #endif /* POLYMORPHIC */ 1122 } 1123 1124 // LE-LABEL: @test_vreinterpretq_u16_u8( 1125 // LE-NEXT: entry: 1126 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <8 x i16> 1127 // LE-NEXT: ret <8 x i16> [[TMP0]] 1128 // 1129 // BE-LABEL: @test_vreinterpretq_u16_u8( 1130 // BE-NEXT: entry: 1131 // BE-NEXT: [[TMP0:%.*]] = call <8 x i16> @llvm.arm.mve.vreinterpretq.v8i16.v16i8(<16 x i8> [[A:%.*]]) 1132 // BE-NEXT: ret <8 x i16> [[TMP0]] 1133 // test_vreinterpretq_u16_u8(uint8x16_t a)1134uint16x8_t test_vreinterpretq_u16_u8(uint8x16_t a) 1135 { 1136 #ifdef POLYMORPHIC 1137 return vreinterpretq_u16(a); 1138 #else /* POLYMORPHIC */ 1139 return vreinterpretq_u16_u8(a); 1140 #endif /* POLYMORPHIC */ 1141 } 1142 1143 // LE-LABEL: @test_vreinterpretq_u32_f16( 1144 // LE-NEXT: entry: 1145 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <4 x i32> 1146 // LE-NEXT: ret <4 x i32> [[TMP0]] 1147 // 1148 // BE-LABEL: @test_vreinterpretq_u32_f16( 1149 // BE-NEXT: entry: 1150 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8f16(<8 x half> [[A:%.*]]) 1151 // BE-NEXT: ret <4 x i32> [[TMP0]] 1152 // test_vreinterpretq_u32_f16(float16x8_t a)1153uint32x4_t test_vreinterpretq_u32_f16(float16x8_t a) 1154 { 1155 #ifdef POLYMORPHIC 1156 return vreinterpretq_u32(a); 1157 #else /* POLYMORPHIC */ 1158 return vreinterpretq_u32_f16(a); 1159 #endif /* POLYMORPHIC */ 1160 } 1161 1162 // BOTH-LABEL: @test_vreinterpretq_u32_f32( 1163 // BOTH-NEXT: entry: 1164 // BOTH-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <4 x i32> 1165 // BOTH-NEXT: ret <4 x i32> [[TMP0]] 1166 // test_vreinterpretq_u32_f32(float32x4_t a)1167uint32x4_t test_vreinterpretq_u32_f32(float32x4_t a) 1168 { 1169 #ifdef POLYMORPHIC 1170 return vreinterpretq_u32(a); 1171 #else /* POLYMORPHIC */ 1172 return vreinterpretq_u32_f32(a); 1173 #endif /* POLYMORPHIC */ 1174 } 1175 1176 // LE-LABEL: @test_vreinterpretq_u32_s16( 1177 // LE-NEXT: entry: 1178 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32> 1179 // LE-NEXT: ret <4 x i32> [[TMP0]] 1180 // 1181 // BE-LABEL: @test_vreinterpretq_u32_s16( 1182 // BE-NEXT: entry: 1183 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]]) 1184 // BE-NEXT: ret <4 x i32> [[TMP0]] 1185 // test_vreinterpretq_u32_s16(int16x8_t a)1186uint32x4_t test_vreinterpretq_u32_s16(int16x8_t a) 1187 { 1188 #ifdef POLYMORPHIC 1189 return vreinterpretq_u32(a); 1190 #else /* POLYMORPHIC */ 1191 return vreinterpretq_u32_s16(a); 1192 #endif /* POLYMORPHIC */ 1193 } 1194 1195 // BOTH-LABEL: @test_vreinterpretq_u32_s32( 1196 // BOTH-NEXT: entry: 1197 // BOTH-NEXT: ret <4 x i32> [[A:%.*]] 1198 // test_vreinterpretq_u32_s32(int32x4_t a)1199uint32x4_t test_vreinterpretq_u32_s32(int32x4_t a) 1200 { 1201 #ifdef POLYMORPHIC 1202 return vreinterpretq_u32(a); 1203 #else /* POLYMORPHIC */ 1204 return vreinterpretq_u32_s32(a); 1205 #endif /* POLYMORPHIC */ 1206 } 1207 1208 // LE-LABEL: @test_vreinterpretq_u32_s64( 1209 // LE-NEXT: entry: 1210 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32> 1211 // LE-NEXT: ret <4 x i32> [[TMP0]] 1212 // 1213 // BE-LABEL: @test_vreinterpretq_u32_s64( 1214 // BE-NEXT: entry: 1215 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[A:%.*]]) 1216 // BE-NEXT: ret <4 x i32> [[TMP0]] 1217 // test_vreinterpretq_u32_s64(int64x2_t a)1218uint32x4_t test_vreinterpretq_u32_s64(int64x2_t a) 1219 { 1220 #ifdef POLYMORPHIC 1221 return vreinterpretq_u32(a); 1222 #else /* POLYMORPHIC */ 1223 return vreinterpretq_u32_s64(a); 1224 #endif /* POLYMORPHIC */ 1225 } 1226 1227 // LE-LABEL: @test_vreinterpretq_u32_s8( 1228 // LE-NEXT: entry: 1229 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x i32> 1230 // LE-NEXT: ret <4 x i32> [[TMP0]] 1231 // 1232 // BE-LABEL: @test_vreinterpretq_u32_s8( 1233 // BE-NEXT: entry: 1234 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v16i8(<16 x i8> [[A:%.*]]) 1235 // BE-NEXT: ret <4 x i32> [[TMP0]] 1236 // test_vreinterpretq_u32_s8(int8x16_t a)1237uint32x4_t test_vreinterpretq_u32_s8(int8x16_t a) 1238 { 1239 #ifdef POLYMORPHIC 1240 return vreinterpretq_u32(a); 1241 #else /* POLYMORPHIC */ 1242 return vreinterpretq_u32_s8(a); 1243 #endif /* POLYMORPHIC */ 1244 } 1245 1246 // LE-LABEL: @test_vreinterpretq_u32_u16( 1247 // LE-NEXT: entry: 1248 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <4 x i32> 1249 // LE-NEXT: ret <4 x i32> [[TMP0]] 1250 // 1251 // BE-LABEL: @test_vreinterpretq_u32_u16( 1252 // BE-NEXT: entry: 1253 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v8i16(<8 x i16> [[A:%.*]]) 1254 // BE-NEXT: ret <4 x i32> [[TMP0]] 1255 // test_vreinterpretq_u32_u16(uint16x8_t a)1256uint32x4_t test_vreinterpretq_u32_u16(uint16x8_t a) 1257 { 1258 #ifdef POLYMORPHIC 1259 return vreinterpretq_u32(a); 1260 #else /* POLYMORPHIC */ 1261 return vreinterpretq_u32_u16(a); 1262 #endif /* POLYMORPHIC */ 1263 } 1264 1265 // LE-LABEL: @test_vreinterpretq_u32_u64( 1266 // LE-NEXT: entry: 1267 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <4 x i32> 1268 // LE-NEXT: ret <4 x i32> [[TMP0]] 1269 // 1270 // BE-LABEL: @test_vreinterpretq_u32_u64( 1271 // BE-NEXT: entry: 1272 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v2i64(<2 x i64> [[A:%.*]]) 1273 // BE-NEXT: ret <4 x i32> [[TMP0]] 1274 // test_vreinterpretq_u32_u64(uint64x2_t a)1275uint32x4_t test_vreinterpretq_u32_u64(uint64x2_t a) 1276 { 1277 #ifdef POLYMORPHIC 1278 return vreinterpretq_u32(a); 1279 #else /* POLYMORPHIC */ 1280 return vreinterpretq_u32_u64(a); 1281 #endif /* POLYMORPHIC */ 1282 } 1283 1284 // LE-LABEL: @test_vreinterpretq_u32_u8( 1285 // LE-NEXT: entry: 1286 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <4 x i32> 1287 // LE-NEXT: ret <4 x i32> [[TMP0]] 1288 // 1289 // BE-LABEL: @test_vreinterpretq_u32_u8( 1290 // BE-NEXT: entry: 1291 // BE-NEXT: [[TMP0:%.*]] = call <4 x i32> @llvm.arm.mve.vreinterpretq.v4i32.v16i8(<16 x i8> [[A:%.*]]) 1292 // BE-NEXT: ret <4 x i32> [[TMP0]] 1293 // test_vreinterpretq_u32_u8(uint8x16_t a)1294uint32x4_t test_vreinterpretq_u32_u8(uint8x16_t a) 1295 { 1296 #ifdef POLYMORPHIC 1297 return vreinterpretq_u32(a); 1298 #else /* POLYMORPHIC */ 1299 return vreinterpretq_u32_u8(a); 1300 #endif /* POLYMORPHIC */ 1301 } 1302 1303 // LE-LABEL: @test_vreinterpretq_u64_f16( 1304 // LE-NEXT: entry: 1305 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <2 x i64> 1306 // LE-NEXT: ret <2 x i64> [[TMP0]] 1307 // 1308 // BE-LABEL: @test_vreinterpretq_u64_f16( 1309 // BE-NEXT: entry: 1310 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8f16(<8 x half> [[A:%.*]]) 1311 // BE-NEXT: ret <2 x i64> [[TMP0]] 1312 // test_vreinterpretq_u64_f16(float16x8_t a)1313uint64x2_t test_vreinterpretq_u64_f16(float16x8_t a) 1314 { 1315 #ifdef POLYMORPHIC 1316 return vreinterpretq_u64(a); 1317 #else /* POLYMORPHIC */ 1318 return vreinterpretq_u64_f16(a); 1319 #endif /* POLYMORPHIC */ 1320 } 1321 1322 // LE-LABEL: @test_vreinterpretq_u64_f32( 1323 // LE-NEXT: entry: 1324 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <2 x i64> 1325 // LE-NEXT: ret <2 x i64> [[TMP0]] 1326 // 1327 // BE-LABEL: @test_vreinterpretq_u64_f32( 1328 // BE-NEXT: entry: 1329 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4f32(<4 x float> [[A:%.*]]) 1330 // BE-NEXT: ret <2 x i64> [[TMP0]] 1331 // test_vreinterpretq_u64_f32(float32x4_t a)1332uint64x2_t test_vreinterpretq_u64_f32(float32x4_t a) 1333 { 1334 #ifdef POLYMORPHIC 1335 return vreinterpretq_u64(a); 1336 #else /* POLYMORPHIC */ 1337 return vreinterpretq_u64_f32(a); 1338 #endif /* POLYMORPHIC */ 1339 } 1340 1341 // LE-LABEL: @test_vreinterpretq_u64_s16( 1342 // LE-NEXT: entry: 1343 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <2 x i64> 1344 // LE-NEXT: ret <2 x i64> [[TMP0]] 1345 // 1346 // BE-LABEL: @test_vreinterpretq_u64_s16( 1347 // BE-NEXT: entry: 1348 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8i16(<8 x i16> [[A:%.*]]) 1349 // BE-NEXT: ret <2 x i64> [[TMP0]] 1350 // test_vreinterpretq_u64_s16(int16x8_t a)1351uint64x2_t test_vreinterpretq_u64_s16(int16x8_t a) 1352 { 1353 #ifdef POLYMORPHIC 1354 return vreinterpretq_u64(a); 1355 #else /* POLYMORPHIC */ 1356 return vreinterpretq_u64_s16(a); 1357 #endif /* POLYMORPHIC */ 1358 } 1359 1360 // LE-LABEL: @test_vreinterpretq_u64_s32( 1361 // LE-NEXT: entry: 1362 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <2 x i64> 1363 // LE-NEXT: ret <2 x i64> [[TMP0]] 1364 // 1365 // BE-LABEL: @test_vreinterpretq_u64_s32( 1366 // BE-NEXT: entry: 1367 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4i32(<4 x i32> [[A:%.*]]) 1368 // BE-NEXT: ret <2 x i64> [[TMP0]] 1369 // test_vreinterpretq_u64_s32(int32x4_t a)1370uint64x2_t test_vreinterpretq_u64_s32(int32x4_t a) 1371 { 1372 #ifdef POLYMORPHIC 1373 return vreinterpretq_u64(a); 1374 #else /* POLYMORPHIC */ 1375 return vreinterpretq_u64_s32(a); 1376 #endif /* POLYMORPHIC */ 1377 } 1378 1379 // BOTH-LABEL: @test_vreinterpretq_u64_s64( 1380 // BOTH-NEXT: entry: 1381 // BOTH-NEXT: ret <2 x i64> [[A:%.*]] 1382 // test_vreinterpretq_u64_s64(int64x2_t a)1383uint64x2_t test_vreinterpretq_u64_s64(int64x2_t a) 1384 { 1385 #ifdef POLYMORPHIC 1386 return vreinterpretq_u64(a); 1387 #else /* POLYMORPHIC */ 1388 return vreinterpretq_u64_s64(a); 1389 #endif /* POLYMORPHIC */ 1390 } 1391 1392 // LE-LABEL: @test_vreinterpretq_u64_s8( 1393 // LE-NEXT: entry: 1394 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <2 x i64> 1395 // LE-NEXT: ret <2 x i64> [[TMP0]] 1396 // 1397 // BE-LABEL: @test_vreinterpretq_u64_s8( 1398 // BE-NEXT: entry: 1399 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v16i8(<16 x i8> [[A:%.*]]) 1400 // BE-NEXT: ret <2 x i64> [[TMP0]] 1401 // test_vreinterpretq_u64_s8(int8x16_t a)1402uint64x2_t test_vreinterpretq_u64_s8(int8x16_t a) 1403 { 1404 #ifdef POLYMORPHIC 1405 return vreinterpretq_u64(a); 1406 #else /* POLYMORPHIC */ 1407 return vreinterpretq_u64_s8(a); 1408 #endif /* POLYMORPHIC */ 1409 } 1410 1411 // LE-LABEL: @test_vreinterpretq_u64_u16( 1412 // LE-NEXT: entry: 1413 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <2 x i64> 1414 // LE-NEXT: ret <2 x i64> [[TMP0]] 1415 // 1416 // BE-LABEL: @test_vreinterpretq_u64_u16( 1417 // BE-NEXT: entry: 1418 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v8i16(<8 x i16> [[A:%.*]]) 1419 // BE-NEXT: ret <2 x i64> [[TMP0]] 1420 // test_vreinterpretq_u64_u16(uint16x8_t a)1421uint64x2_t test_vreinterpretq_u64_u16(uint16x8_t a) 1422 { 1423 #ifdef POLYMORPHIC 1424 return vreinterpretq_u64(a); 1425 #else /* POLYMORPHIC */ 1426 return vreinterpretq_u64_u16(a); 1427 #endif /* POLYMORPHIC */ 1428 } 1429 1430 // LE-LABEL: @test_vreinterpretq_u64_u32( 1431 // LE-NEXT: entry: 1432 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <2 x i64> 1433 // LE-NEXT: ret <2 x i64> [[TMP0]] 1434 // 1435 // BE-LABEL: @test_vreinterpretq_u64_u32( 1436 // BE-NEXT: entry: 1437 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v4i32(<4 x i32> [[A:%.*]]) 1438 // BE-NEXT: ret <2 x i64> [[TMP0]] 1439 // test_vreinterpretq_u64_u32(uint32x4_t a)1440uint64x2_t test_vreinterpretq_u64_u32(uint32x4_t a) 1441 { 1442 #ifdef POLYMORPHIC 1443 return vreinterpretq_u64(a); 1444 #else /* POLYMORPHIC */ 1445 return vreinterpretq_u64_u32(a); 1446 #endif /* POLYMORPHIC */ 1447 } 1448 1449 // LE-LABEL: @test_vreinterpretq_u64_u8( 1450 // LE-NEXT: entry: 1451 // LE-NEXT: [[TMP0:%.*]] = bitcast <16 x i8> [[A:%.*]] to <2 x i64> 1452 // LE-NEXT: ret <2 x i64> [[TMP0]] 1453 // 1454 // BE-LABEL: @test_vreinterpretq_u64_u8( 1455 // BE-NEXT: entry: 1456 // BE-NEXT: [[TMP0:%.*]] = call <2 x i64> @llvm.arm.mve.vreinterpretq.v2i64.v16i8(<16 x i8> [[A:%.*]]) 1457 // BE-NEXT: ret <2 x i64> [[TMP0]] 1458 // test_vreinterpretq_u64_u8(uint8x16_t a)1459uint64x2_t test_vreinterpretq_u64_u8(uint8x16_t a) 1460 { 1461 #ifdef POLYMORPHIC 1462 return vreinterpretq_u64(a); 1463 #else /* POLYMORPHIC */ 1464 return vreinterpretq_u64_u8(a); 1465 #endif /* POLYMORPHIC */ 1466 } 1467 1468 // LE-LABEL: @test_vreinterpretq_u8_f16( 1469 // LE-NEXT: entry: 1470 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A:%.*]] to <16 x i8> 1471 // LE-NEXT: ret <16 x i8> [[TMP0]] 1472 // 1473 // BE-LABEL: @test_vreinterpretq_u8_f16( 1474 // BE-NEXT: entry: 1475 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8f16(<8 x half> [[A:%.*]]) 1476 // BE-NEXT: ret <16 x i8> [[TMP0]] 1477 // test_vreinterpretq_u8_f16(float16x8_t a)1478uint8x16_t test_vreinterpretq_u8_f16(float16x8_t a) 1479 { 1480 #ifdef POLYMORPHIC 1481 return vreinterpretq_u8(a); 1482 #else /* POLYMORPHIC */ 1483 return vreinterpretq_u8_f16(a); 1484 #endif /* POLYMORPHIC */ 1485 } 1486 1487 // LE-LABEL: @test_vreinterpretq_u8_f32( 1488 // LE-NEXT: entry: 1489 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x float> [[A:%.*]] to <16 x i8> 1490 // LE-NEXT: ret <16 x i8> [[TMP0]] 1491 // 1492 // BE-LABEL: @test_vreinterpretq_u8_f32( 1493 // BE-NEXT: entry: 1494 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4f32(<4 x float> [[A:%.*]]) 1495 // BE-NEXT: ret <16 x i8> [[TMP0]] 1496 // test_vreinterpretq_u8_f32(float32x4_t a)1497uint8x16_t test_vreinterpretq_u8_f32(float32x4_t a) 1498 { 1499 #ifdef POLYMORPHIC 1500 return vreinterpretq_u8(a); 1501 #else /* POLYMORPHIC */ 1502 return vreinterpretq_u8_f32(a); 1503 #endif /* POLYMORPHIC */ 1504 } 1505 1506 // LE-LABEL: @test_vreinterpretq_u8_s16( 1507 // LE-NEXT: entry: 1508 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <16 x i8> 1509 // LE-NEXT: ret <16 x i8> [[TMP0]] 1510 // 1511 // BE-LABEL: @test_vreinterpretq_u8_s16( 1512 // BE-NEXT: entry: 1513 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8i16(<8 x i16> [[A:%.*]]) 1514 // BE-NEXT: ret <16 x i8> [[TMP0]] 1515 // test_vreinterpretq_u8_s16(int16x8_t a)1516uint8x16_t test_vreinterpretq_u8_s16(int16x8_t a) 1517 { 1518 #ifdef POLYMORPHIC 1519 return vreinterpretq_u8(a); 1520 #else /* POLYMORPHIC */ 1521 return vreinterpretq_u8_s16(a); 1522 #endif /* POLYMORPHIC */ 1523 } 1524 1525 // LE-LABEL: @test_vreinterpretq_u8_s32( 1526 // LE-NEXT: entry: 1527 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8> 1528 // LE-NEXT: ret <16 x i8> [[TMP0]] 1529 // 1530 // BE-LABEL: @test_vreinterpretq_u8_s32( 1531 // BE-NEXT: entry: 1532 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4i32(<4 x i32> [[A:%.*]]) 1533 // BE-NEXT: ret <16 x i8> [[TMP0]] 1534 // test_vreinterpretq_u8_s32(int32x4_t a)1535uint8x16_t test_vreinterpretq_u8_s32(int32x4_t a) 1536 { 1537 #ifdef POLYMORPHIC 1538 return vreinterpretq_u8(a); 1539 #else /* POLYMORPHIC */ 1540 return vreinterpretq_u8_s32(a); 1541 #endif /* POLYMORPHIC */ 1542 } 1543 1544 // LE-LABEL: @test_vreinterpretq_u8_s64( 1545 // LE-NEXT: entry: 1546 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <16 x i8> 1547 // LE-NEXT: ret <16 x i8> [[TMP0]] 1548 // 1549 // BE-LABEL: @test_vreinterpretq_u8_s64( 1550 // BE-NEXT: entry: 1551 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[A:%.*]]) 1552 // BE-NEXT: ret <16 x i8> [[TMP0]] 1553 // test_vreinterpretq_u8_s64(int64x2_t a)1554uint8x16_t test_vreinterpretq_u8_s64(int64x2_t a) 1555 { 1556 #ifdef POLYMORPHIC 1557 return vreinterpretq_u8(a); 1558 #else /* POLYMORPHIC */ 1559 return vreinterpretq_u8_s64(a); 1560 #endif /* POLYMORPHIC */ 1561 } 1562 1563 // BOTH-LABEL: @test_vreinterpretq_u8_s8( 1564 // BOTH-NEXT: entry: 1565 // BOTH-NEXT: ret <16 x i8> [[A:%.*]] 1566 // test_vreinterpretq_u8_s8(int8x16_t a)1567uint8x16_t test_vreinterpretq_u8_s8(int8x16_t a) 1568 { 1569 #ifdef POLYMORPHIC 1570 return vreinterpretq_u8(a); 1571 #else /* POLYMORPHIC */ 1572 return vreinterpretq_u8_s8(a); 1573 #endif /* POLYMORPHIC */ 1574 } 1575 1576 // LE-LABEL: @test_vreinterpretq_u8_u16( 1577 // LE-NEXT: entry: 1578 // LE-NEXT: [[TMP0:%.*]] = bitcast <8 x i16> [[A:%.*]] to <16 x i8> 1579 // LE-NEXT: ret <16 x i8> [[TMP0]] 1580 // 1581 // BE-LABEL: @test_vreinterpretq_u8_u16( 1582 // BE-NEXT: entry: 1583 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v8i16(<8 x i16> [[A:%.*]]) 1584 // BE-NEXT: ret <16 x i8> [[TMP0]] 1585 // test_vreinterpretq_u8_u16(uint16x8_t a)1586uint8x16_t test_vreinterpretq_u8_u16(uint16x8_t a) 1587 { 1588 #ifdef POLYMORPHIC 1589 return vreinterpretq_u8(a); 1590 #else /* POLYMORPHIC */ 1591 return vreinterpretq_u8_u16(a); 1592 #endif /* POLYMORPHIC */ 1593 } 1594 1595 // LE-LABEL: @test_vreinterpretq_u8_u32( 1596 // LE-NEXT: entry: 1597 // LE-NEXT: [[TMP0:%.*]] = bitcast <4 x i32> [[A:%.*]] to <16 x i8> 1598 // LE-NEXT: ret <16 x i8> [[TMP0]] 1599 // 1600 // BE-LABEL: @test_vreinterpretq_u8_u32( 1601 // BE-NEXT: entry: 1602 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v4i32(<4 x i32> [[A:%.*]]) 1603 // BE-NEXT: ret <16 x i8> [[TMP0]] 1604 // test_vreinterpretq_u8_u32(uint32x4_t a)1605uint8x16_t test_vreinterpretq_u8_u32(uint32x4_t a) 1606 { 1607 #ifdef POLYMORPHIC 1608 return vreinterpretq_u8(a); 1609 #else /* POLYMORPHIC */ 1610 return vreinterpretq_u8_u32(a); 1611 #endif /* POLYMORPHIC */ 1612 } 1613 1614 // LE-LABEL: @test_vreinterpretq_u8_u64( 1615 // LE-NEXT: entry: 1616 // LE-NEXT: [[TMP0:%.*]] = bitcast <2 x i64> [[A:%.*]] to <16 x i8> 1617 // LE-NEXT: ret <16 x i8> [[TMP0]] 1618 // 1619 // BE-LABEL: @test_vreinterpretq_u8_u64( 1620 // BE-NEXT: entry: 1621 // BE-NEXT: [[TMP0:%.*]] = call <16 x i8> @llvm.arm.mve.vreinterpretq.v16i8.v2i64(<2 x i64> [[A:%.*]]) 1622 // BE-NEXT: ret <16 x i8> [[TMP0]] 1623 // test_vreinterpretq_u8_u64(uint64x2_t a)1624uint8x16_t test_vreinterpretq_u8_u64(uint64x2_t a) 1625 { 1626 #ifdef POLYMORPHIC 1627 return vreinterpretq_u8(a); 1628 #else /* POLYMORPHIC */ 1629 return vreinterpretq_u8_u64(a); 1630 #endif /* POLYMORPHIC */ 1631 } 1632