1; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s 2>%t | FileCheck %s
2; RUN: FileCheck --check-prefix=WARN --allow-empty %s <%t
3
4; If this check fails please read test/CodeGen/AArch64/README for instructions on how to resolve it.
5; WARN-NOT: warning
6
7;
8; PTRUE
9;
10
11define <vscale x 16 x i1> @ptrue_b8() {
12; CHECK-LABEL: ptrue_b8:
13; CHECK: ptrue p0.b, pow2
14; CHECK-NEXT: ret
15  %out = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 0)
16  ret <vscale x 16 x i1> %out
17}
18
19define <vscale x 8 x i1> @ptrue_b16() {
20; CHECK-LABEL: ptrue_b16:
21; CHECK: ptrue p0.h, vl1
22; CHECK-NEXT: ret
23  %out = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 1)
24  ret <vscale x 8 x i1> %out
25}
26
27define <vscale x 4 x i1> @ptrue_b32() {
28; CHECK-LABEL: ptrue_b32:
29; CHECK: ptrue p0.s, mul3
30; CHECK-NEXT: ret
31  %out = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 30)
32  ret <vscale x 4 x i1> %out
33}
34
35define <vscale x 2 x i1> @ptrue_b64() {
36; CHECK-LABEL: ptrue_b64:
37; CHECK: ptrue p0.d
38; CHECK-NEXT: ret
39  %out = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
40  ret <vscale x 2 x i1> %out
41}
42
43declare <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 %pattern)
44declare <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 %pattern)
45declare <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 %pattern)
46declare <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 %pattern)
47