[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve2p1-intrinsics-bfminnm.ll
blob90132224e022332726469142d3d6d116ed620834
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2p1 -mattr=+sve-b16b16 -mattr=+use-experimental-zeroing-pseudos -verify-machineinstrs < %s \
3 ; RUN: | FileCheck %s
5 define <vscale x 8 x bfloat> @bfminnm_pred(<vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b){
6 ; CHECK-LABEL: bfminnm_pred:
7 ; CHECK:       // %bb.0:
8 ; CHECK-NEXT:    bfminnm z0.h, p0/m, z0.h, z1.h
9 ; CHECK-NEXT:    ret
10   %res = call <vscale x 8 x bfloat> @llvm.aarch64.sve.fminnm.nxv8bf16(<vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b)
11   ret <vscale x 8 x bfloat> %res
14 define <vscale x 8 x bfloat> @bfminnm(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b){
15 ; CHECK-LABEL: bfminnm:
16 ; CHECK:       // %bb.0:
17 ; CHECK-NEXT:    ptrue p0.h
18 ; CHECK-NEXT:    bfminnm z0.h, p0/m, z0.h, z1.h
19 ; CHECK-NEXT:    ret
20   %elt = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
21   %res = call <vscale x 8 x bfloat> @llvm.aarch64.sve.fminnm.nxv8bf16(<vscale x 8 x i1> %elt, <vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b)
22   ret <vscale x 8 x bfloat> %res
25 define <vscale x 8 x bfloat> @bfminnm_zeroing(<vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) {
26 ; CHECK-LABEL: bfminnm_zeroing:
27 ; CHECK:       // %bb.0:
28 ; CHECK-NEXT:    movprfx z0.h, p0/z, z0.h
29 ; CHECK-NEXT:    bfminnm z0.h, p0/m, z0.h, z1.h
30 ; CHECK-NEXT:    ret
31   %a_z = select <vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> zeroinitializer
32   %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.fminnm.nxv8bf16(<vscale x 8 x i1> %pg,
33                                                             <vscale x 8 x bfloat> %a_z,
34                                                             <vscale x 8 x bfloat> %b)
35   ret <vscale x 8 x bfloat> %out
38 define <vscale x 8 x bfloat> @bfminnm_u_pred(<vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b){
39 ; CHECK-LABEL: bfminnm_u_pred:
40 ; CHECK:       // %bb.0:
41 ; CHECK-NEXT:    bfminnm z0.h, p0/m, z0.h, z1.h
42 ; CHECK-NEXT:    ret
43   %res = call <vscale x 8 x bfloat> @llvm.aarch64.sve.fminnm.u.nxv8bf16(<vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b)
44   ret <vscale x 8 x bfloat> %res
47 define <vscale x 8 x bfloat> @bfminnm_u(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b){
48 ; CHECK-LABEL: bfminnm_u:
49 ; CHECK:       // %bb.0:
50 ; CHECK-NEXT:    ptrue p0.h
51 ; CHECK-NEXT:    bfminnm z0.h, p0/m, z0.h, z1.h
52 ; CHECK-NEXT:    ret
53   %elt = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
54   %res = call <vscale x 8 x bfloat> @llvm.aarch64.sve.fminnm.u.nxv8bf16(<vscale x 8 x i1> %elt, <vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b)
55   ret <vscale x 8 x bfloat> %res
58 define <vscale x 8 x bfloat> @bfminnm_u_zeroing(<vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) {
59 ; CHECK-LABEL: bfminnm_u_zeroing:
60 ; CHECK:       // %bb.0:
61 ; CHECK-NEXT:    mov z2.h, #0 // =0x0
62 ; CHECK-NEXT:    sel z0.h, p0, z0.h, z2.h
63 ; CHECK-NEXT:    bfminnm z0.h, p0/m, z0.h, z1.h
64 ; CHECK-NEXT:    ret
65   %a_z = select <vscale x 8 x i1> %pg, <vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> zeroinitializer
66   %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.fminnm.u.nxv8bf16(<vscale x 8 x i1> %pg,
67                                                             <vscale x 8 x bfloat> %a_z,
68                                                             <vscale x 8 x bfloat> %b)
69   ret <vscale x 8 x bfloat> %out
72 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.fminnm.nxv8bf16(<vscale x 8 x i1>, <vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
73 declare <vscale x 8 x bfloat> @llvm.aarch64.sve.fminnm.u.nxv8bf16(<vscale x 8 x i1>, <vscale x 8 x bfloat>, <vscale x 8 x bfloat>)
74 declare <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 immarg)