[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-ptest-removal-match.ll
blobedd87e6a5a5ba887fbd5f2eab095685bb5543a13
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve2 %s -o - | FileCheck %s
5 ; MATCH
8 define i32 @match_nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
9 ; CHECK-LABEL: match_nxv16i8:
10 ; CHECK:       // %bb.0:
11 ; CHECK-NEXT:    match p0.b, p0/z, z0.b, z1.b
12 ; CHECK-NEXT:    cset w0, ne
13 ; CHECK-NEXT:    ret
14   %1 = tail call <vscale x 16 x i1> @llvm.aarch64.sve.match.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
15   %2 = tail call i1 @llvm.aarch64.sve.ptest.any(<vscale x 16 x i1> %pg, <vscale x 16 x i1> %1)
16   %conv = zext i1 %2 to i32
17   ret i32 %conv
20 define i32 @match_imm_nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
21 ; CHECK-LABEL: match_imm_nxv16i8:
22 ; CHECK:       // %bb.0:
23 ; CHECK-NEXT:    match p0.b, p0/z, z0.b, z1.b
24 ; CHECK-NEXT:    cset w0, ne
25 ; CHECK-NEXT:    ret
26   %1 = tail call <vscale x 16 x i1> @llvm.aarch64.sve.match.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
27   %2 = tail call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)
28   %3 = tail call i1 @llvm.aarch64.sve.ptest.any(<vscale x 16 x i1> %2, <vscale x 16 x i1> %1)
29   %conv = zext i1 %3 to i32
30   ret i32 %conv
34 ; NMATCH
37 define i32 @nmatch_nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
38 ; CHECK-LABEL: nmatch_nxv16i8:
39 ; CHECK:       // %bb.0:
40 ; CHECK-NEXT:    nmatch p0.b, p0/z, z0.b, z1.b
41 ; CHECK-NEXT:    cset w0, ne
42 ; CHECK-NEXT:    ret
43   %1 = tail call <vscale x 16 x i1> @llvm.aarch64.sve.nmatch.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
44   %2 = tail call i1 @llvm.aarch64.sve.ptest.any(<vscale x 16 x i1> %pg, <vscale x 16 x i1> %1)
45   %conv = zext i1 %2 to i32
46   ret i32 %conv
49 define i32 @nmatch_imm_nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) {
50 ; CHECK-LABEL: nmatch_imm_nxv16i8:
51 ; CHECK:       // %bb.0:
52 ; CHECK-NEXT:    nmatch p0.b, p0/z, z0.b, z1.b
53 ; CHECK-NEXT:    cset w0, ne
54 ; CHECK-NEXT:    ret
55   %1 = tail call <vscale x 16 x i1> @llvm.aarch64.sve.nmatch.nxv16i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b)
56   %2 = tail call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)
57   %3 = tail call i1 @llvm.aarch64.sve.ptest.any(<vscale x 16 x i1> %2, <vscale x 16 x i1> %1)
58   %conv = zext i1 %3 to i32
59   ret i32 %conv
62 declare <vscale x 16 x i1> @llvm.aarch64.sve.match.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
63 declare <vscale x 16 x i1> @llvm.aarch64.sve.nmatch.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>)
64 declare i1 @llvm.aarch64.sve.ptest.any(<vscale x 16 x i1>, <vscale x 16 x i1>)
65 declare <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32)