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