Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / allone-masked-to-unmasked.ll
blob92ec6a29f5f29936de05100b79348f20d027c649
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs | FileCheck %s
3 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs | FileCheck %s
5 declare <vscale x 1 x i1> @llvm.riscv.vmset.nxv1i1(iXLen);
7 declare <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
8   <vscale x 1 x i8>,
9   <vscale x 1 x i8>,
10   <vscale x 1 x i8>,
11   <vscale x 1 x i1>,
12   iXLen, iXLen);
14 ; Use unmasked instruction because the mask operand is allone mask
15 define <vscale x 1 x i8> @test0(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, iXLen %2) nounwind {
16 ; CHECK-LABEL: test0:
17 ; CHECK:       # %bb.0: # %entry
18 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
19 ; CHECK-NEXT:    vadd.vv v8, v8, v9
20 ; CHECK-NEXT:    ret
21 entry:
22   %allone = call <vscale x 1 x i1> @llvm.riscv.vmset.nxv1i1(
23     iXLen %2);
24   %a = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
25     <vscale x 1 x i8> undef,
26     <vscale x 1 x i8> %0,
27     <vscale x 1 x i8> %1,
28     <vscale x 1 x i1> %allone,
29     iXLen %2, iXLen 1)
31   ret <vscale x 1 x i8> %a
34 ; Use an unmasked TAIL_AGNOSTIC instruction if the tie operand is IMPLICIT_DEF
35 define <vscale x 1 x i8> @test1(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, iXLen %2) nounwind {
36 ; CHECK-LABEL: test1:
37 ; CHECK:       # %bb.0: # %entry
38 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
39 ; CHECK-NEXT:    vadd.vv v8, v8, v9
40 ; CHECK-NEXT:    ret
41 entry:
42   %allone = call <vscale x 1 x i1> @llvm.riscv.vmset.nxv1i1(
43     iXLen %2);
44   %a = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
45     <vscale x 1 x i8> undef,
46     <vscale x 1 x i8> %0,
47     <vscale x 1 x i8> %1,
48     <vscale x 1 x i1> %allone,
49     iXLen %2, iXLen 0)
51   ret <vscale x 1 x i8> %a
54 ; Use an unmasked TU instruction because of the policy operand
55 define <vscale x 1 x i8> @test2(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, <vscale x 1 x i8> %2, iXLen %3) nounwind {
56 ; CHECK-LABEL: test2:
57 ; CHECK:       # %bb.0: # %entry
58 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, tu, ma
59 ; CHECK-NEXT:    vadd.vv v8, v9, v10
60 ; CHECK-NEXT:    ret
61 entry:
62   %allone = call <vscale x 1 x i1> @llvm.riscv.vmset.nxv1i1(
63     iXLen %3);
64   %a = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
65     <vscale x 1 x i8> %0,
66     <vscale x 1 x i8> %1,
67     <vscale x 1 x i8> %2,
68     <vscale x 1 x i1> %allone,
69     iXLen %3, iXLen 0)
71   ret <vscale x 1 x i8> %a
74 ; Merge operand is dropped because of the policy operand
75 define <vscale x 1 x i8> @test3(<vscale x 1 x i8> %0, <vscale x 1 x i8> %1, <vscale x 1 x i8> %2, iXLen %3) nounwind {
76 ; CHECK-LABEL: test3:
77 ; CHECK:       # %bb.0: # %entry
78 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
79 ; CHECK-NEXT:    vadd.vv v8, v9, v10
80 ; CHECK-NEXT:    ret
81 entry:
82   %allone = call <vscale x 1 x i1> @llvm.riscv.vmset.nxv1i1(
83     iXLen %3);
84   %a = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
85     <vscale x 1 x i8> %0,
86     <vscale x 1 x i8> %1,
87     <vscale x 1 x i8> %2,
88     <vscale x 1 x i1> %allone,
89     iXLen %3, iXLen 1)
91   ret <vscale x 1 x i8> %a