|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \ |
| 2 | +; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v,+experimental-zfbfmin,+experimental-zvfbfmin -target-abi=ilp32d \ |
3 | 3 | ; RUN: -verify-machineinstrs < %s | FileCheck %s
|
4 |
| -; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \ |
| 4 | +; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v,+experimental-zfbfmin,+experimental-zvfbfmin -target-abi=lp64d \ |
5 | 5 | ; RUN: -verify-machineinstrs < %s | FileCheck %s
|
6 |
| -; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=ilp32d -riscv-v-vector-bits-min=128 \ |
| 6 | +; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v,+m,+experimental-zfbfmin,+experimental-zvfbfmin -target-abi=ilp32d -riscv-v-vector-bits-min=128 \ |
7 | 7 | ; RUN: -verify-machineinstrs < %s | FileCheck %s
|
8 |
| -; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=lp64d -riscv-v-vector-bits-min=128 \ |
| 8 | +; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v,+m,+experimental-zfbfmin,+experimental-zvfbfmin -target-abi=lp64d -riscv-v-vector-bits-min=128 \ |
9 | 9 | ; RUN: -verify-machineinstrs < %s | FileCheck %s
|
10 | 10 |
|
11 | 11 | define <2 x half> @select_v2f16(i1 zeroext %c, <2 x half> %a, <2 x half> %b) {
|
@@ -343,3 +343,123 @@ define <16 x double> @selectcc_v16f64(double %a, double %b, <16 x double> %c, <1
|
343 | 343 | %v = select i1 %cmp, <16 x double> %c, <16 x double> %d
|
344 | 344 | ret <16 x double> %v
|
345 | 345 | }
|
| 346 | + |
| 347 | +define <2 x bfloat> @select_v2bf16(i1 zeroext %c, <2 x bfloat> %a, <2 x bfloat> %b) { |
| 348 | +; CHECK-LABEL: select_v2bf16: |
| 349 | +; CHECK: # %bb.0: |
| 350 | +; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma |
| 351 | +; CHECK-NEXT: vmv.v.x v10, a0 |
| 352 | +; CHECK-NEXT: vmsne.vi v0, v10, 0 |
| 353 | +; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma |
| 354 | +; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 |
| 355 | +; CHECK-NEXT: ret |
| 356 | + %v = select i1 %c, <2 x bfloat> %a, <2 x bfloat> %b |
| 357 | + ret <2 x bfloat> %v |
| 358 | +} |
| 359 | + |
| 360 | +define <2 x bfloat> @selectcc_v2bf16(bfloat %a, bfloat %b, <2 x bfloat> %c, <2 x bfloat> %d) { |
| 361 | +; CHECK-LABEL: selectcc_v2bf16: |
| 362 | +; CHECK: # %bb.0: |
| 363 | +; CHECK-NEXT: fcvt.s.bf16 fa5, fa1 |
| 364 | +; CHECK-NEXT: fcvt.s.bf16 fa4, fa0 |
| 365 | +; CHECK-NEXT: feq.s a0, fa4, fa5 |
| 366 | +; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma |
| 367 | +; CHECK-NEXT: vmv.v.x v10, a0 |
| 368 | +; CHECK-NEXT: vmsne.vi v0, v10, 0 |
| 369 | +; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma |
| 370 | +; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 |
| 371 | +; CHECK-NEXT: ret |
| 372 | + %cmp = fcmp oeq bfloat %a, %b |
| 373 | + %v = select i1 %cmp, <2 x bfloat> %c, <2 x bfloat> %d |
| 374 | + ret <2 x bfloat> %v |
| 375 | +} |
| 376 | + |
| 377 | +define <4 x bfloat> @select_v4bf16(i1 zeroext %c, <4 x bfloat> %a, <4 x bfloat> %b) { |
| 378 | +; CHECK-LABEL: select_v4bf16: |
| 379 | +; CHECK: # %bb.0: |
| 380 | +; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma |
| 381 | +; CHECK-NEXT: vmv.v.x v10, a0 |
| 382 | +; CHECK-NEXT: vmsne.vi v0, v10, 0 |
| 383 | +; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma |
| 384 | +; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 |
| 385 | +; CHECK-NEXT: ret |
| 386 | + %v = select i1 %c, <4 x bfloat> %a, <4 x bfloat> %b |
| 387 | + ret <4 x bfloat> %v |
| 388 | +} |
| 389 | + |
| 390 | +define <4 x bfloat> @selectcc_v4bf16(bfloat %a, bfloat %b, <4 x bfloat> %c, <4 x bfloat> %d) { |
| 391 | +; CHECK-LABEL: selectcc_v4bf16: |
| 392 | +; CHECK: # %bb.0: |
| 393 | +; CHECK-NEXT: fcvt.s.bf16 fa5, fa1 |
| 394 | +; CHECK-NEXT: fcvt.s.bf16 fa4, fa0 |
| 395 | +; CHECK-NEXT: feq.s a0, fa4, fa5 |
| 396 | +; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma |
| 397 | +; CHECK-NEXT: vmv.v.x v10, a0 |
| 398 | +; CHECK-NEXT: vmsne.vi v0, v10, 0 |
| 399 | +; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma |
| 400 | +; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 |
| 401 | +; CHECK-NEXT: ret |
| 402 | + %cmp = fcmp oeq bfloat %a, %b |
| 403 | + %v = select i1 %cmp, <4 x bfloat> %c, <4 x bfloat> %d |
| 404 | + ret <4 x bfloat> %v |
| 405 | +} |
| 406 | + |
| 407 | +define <8 x bfloat> @select_v8bf16(i1 zeroext %c, <8 x bfloat> %a, <8 x bfloat> %b) { |
| 408 | +; CHECK-LABEL: select_v8bf16: |
| 409 | +; CHECK: # %bb.0: |
| 410 | +; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma |
| 411 | +; CHECK-NEXT: vmv.v.x v10, a0 |
| 412 | +; CHECK-NEXT: vmsne.vi v0, v10, 0 |
| 413 | +; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma |
| 414 | +; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 |
| 415 | +; CHECK-NEXT: ret |
| 416 | + %v = select i1 %c, <8 x bfloat> %a, <8 x bfloat> %b |
| 417 | + ret <8 x bfloat> %v |
| 418 | +} |
| 419 | + |
| 420 | +define <8 x bfloat> @selectcc_v8bf16(bfloat %a, bfloat %b, <8 x bfloat> %c, <8 x bfloat> %d) { |
| 421 | +; CHECK-LABEL: selectcc_v8bf16: |
| 422 | +; CHECK: # %bb.0: |
| 423 | +; CHECK-NEXT: fcvt.s.bf16 fa5, fa1 |
| 424 | +; CHECK-NEXT: fcvt.s.bf16 fa4, fa0 |
| 425 | +; CHECK-NEXT: feq.s a0, fa4, fa5 |
| 426 | +; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma |
| 427 | +; CHECK-NEXT: vmv.v.x v10, a0 |
| 428 | +; CHECK-NEXT: vmsne.vi v0, v10, 0 |
| 429 | +; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma |
| 430 | +; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 |
| 431 | +; CHECK-NEXT: ret |
| 432 | + %cmp = fcmp oeq bfloat %a, %b |
| 433 | + %v = select i1 %cmp, <8 x bfloat> %c, <8 x bfloat> %d |
| 434 | + ret <8 x bfloat> %v |
| 435 | +} |
| 436 | + |
| 437 | +define <16 x bfloat> @select_v16bf16(i1 zeroext %c, <16 x bfloat> %a, <16 x bfloat> %b) { |
| 438 | +; CHECK-LABEL: select_v16bf16: |
| 439 | +; CHECK: # %bb.0: |
| 440 | +; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma |
| 441 | +; CHECK-NEXT: vmv.v.x v12, a0 |
| 442 | +; CHECK-NEXT: vmsne.vi v0, v12, 0 |
| 443 | +; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma |
| 444 | +; CHECK-NEXT: vmerge.vvm v8, v10, v8, v0 |
| 445 | +; CHECK-NEXT: ret |
| 446 | + %v = select i1 %c, <16 x bfloat> %a, <16 x bfloat> %b |
| 447 | + ret <16 x bfloat> %v |
| 448 | +} |
| 449 | + |
| 450 | +define <16 x bfloat> @selectcc_v16bf16(bfloat %a, bfloat %b, <16 x bfloat> %c, <16 x bfloat> %d) { |
| 451 | +; CHECK-LABEL: selectcc_v16bf16: |
| 452 | +; CHECK: # %bb.0: |
| 453 | +; CHECK-NEXT: fcvt.s.bf16 fa5, fa1 |
| 454 | +; CHECK-NEXT: fcvt.s.bf16 fa4, fa0 |
| 455 | +; CHECK-NEXT: feq.s a0, fa4, fa5 |
| 456 | +; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma |
| 457 | +; CHECK-NEXT: vmv.v.x v12, a0 |
| 458 | +; CHECK-NEXT: vmsne.vi v0, v12, 0 |
| 459 | +; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma |
| 460 | +; CHECK-NEXT: vmerge.vvm v8, v10, v8, v0 |
| 461 | +; CHECK-NEXT: ret |
| 462 | + %cmp = fcmp oeq bfloat %a, %b |
| 463 | + %v = select i1 %cmp, <16 x bfloat> %c, <16 x bfloat> %d |
| 464 | + ret <16 x bfloat> %v |
| 465 | +} |
0 commit comments