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(
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 {
17 ; CHECK: # %bb.0: # %entry
18 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
19 ; CHECK-NEXT: vadd.vv v8, v8, v9
22 %allone = call <vscale x 1 x i1> @llvm.riscv.vmset.nxv1i1(
24 %a = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
25 <vscale x 1 x i8> undef,
28 <vscale x 1 x i1> %allone,
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 {
37 ; CHECK: # %bb.0: # %entry
38 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
39 ; CHECK-NEXT: vadd.vv v8, v8, v9
42 %allone = call <vscale x 1 x i1> @llvm.riscv.vmset.nxv1i1(
44 %a = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
45 <vscale x 1 x i8> undef,
48 <vscale x 1 x i1> %allone,
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 {
57 ; CHECK: # %bb.0: # %entry
58 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, tu, ma
59 ; CHECK-NEXT: vadd.vv v8, v9, v10
62 %allone = call <vscale x 1 x i1> @llvm.riscv.vmset.nxv1i1(
64 %a = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
68 <vscale x 1 x i1> %allone,
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 {
77 ; CHECK: # %bb.0: # %entry
78 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
79 ; CHECK-NEXT: vadd.vv v8, v9, v10
82 %allone = call <vscale x 1 x i1> @llvm.riscv.vmset.nxv1i1(
84 %a = call <vscale x 1 x i8> @llvm.riscv.vadd.mask.nxv1i8.nxv1i8(
88 <vscale x 1 x i1> %allone,
91 ret <vscale x 1 x i8> %a