1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 < %s | FileCheck %s
3 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme < %s | FileCheck %s
9 define <vscale x 4 x float> @fmlalb_h(<vscale x 4 x float> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
10 ; CHECK-LABEL: fmlalb_h:
12 ; CHECK-NEXT: fmlalb z0.s, z1.h, z2.h
14 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmlalb.nxv4f32(<vscale x 4 x float> %a,
15 <vscale x 8 x half> %b,
16 <vscale x 8 x half> %c)
17 ret <vscale x 4 x float> %out
24 define <vscale x 4 x float> @fmlalb_lane_h(<vscale x 4 x float> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
25 ; CHECK-LABEL: fmlalb_lane_h:
27 ; CHECK-NEXT: fmlalb z0.s, z1.h, z2.h[0]
29 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmlalb.lane.nxv4f32(<vscale x 4 x float> %a,
30 <vscale x 8 x half> %b,
31 <vscale x 8 x half> %c,
33 ret <vscale x 4 x float> %out
40 define <vscale x 4 x float> @fmlalt_h(<vscale x 4 x float> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
41 ; CHECK-LABEL: fmlalt_h:
43 ; CHECK-NEXT: fmlalt z0.s, z1.h, z2.h
45 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmlalt.nxv4f32(<vscale x 4 x float> %a,
46 <vscale x 8 x half> %b,
47 <vscale x 8 x half> %c)
48 ret <vscale x 4 x float> %out
55 define <vscale x 4 x float> @fmlalt_lane_h(<vscale x 4 x float> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
56 ; CHECK-LABEL: fmlalt_lane_h:
58 ; CHECK-NEXT: fmlalt z0.s, z1.h, z2.h[1]
60 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmlalt.lane.nxv4f32(<vscale x 4 x float> %a,
61 <vscale x 8 x half> %b,
62 <vscale x 8 x half> %c,
64 ret <vscale x 4 x float> %out
71 define <vscale x 4 x float> @fmlslb_h(<vscale x 4 x float> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
72 ; CHECK-LABEL: fmlslb_h:
74 ; CHECK-NEXT: fmlslb z0.s, z1.h, z2.h
76 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmlslb.nxv4f32(<vscale x 4 x float> %a,
77 <vscale x 8 x half> %b,
78 <vscale x 8 x half> %c)
79 ret <vscale x 4 x float> %out
86 define <vscale x 4 x float> @fmlslb_lane_h(<vscale x 4 x float> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
87 ; CHECK-LABEL: fmlslb_lane_h:
89 ; CHECK-NEXT: fmlslb z0.s, z1.h, z2.h[2]
91 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmlslb.lane.nxv4f32(<vscale x 4 x float> %a,
92 <vscale x 8 x half> %b,
93 <vscale x 8 x half> %c,
95 ret <vscale x 4 x float> %out
102 define <vscale x 4 x float> @fmlslt_h(<vscale x 4 x float> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
103 ; CHECK-LABEL: fmlslt_h:
105 ; CHECK-NEXT: fmlslt z0.s, z1.h, z2.h
107 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmlslt.nxv4f32(<vscale x 4 x float> %a,
108 <vscale x 8 x half> %b,
109 <vscale x 8 x half> %c)
110 ret <vscale x 4 x float> %out
117 define <vscale x 4 x float> @fmlslt_lane_h(<vscale x 4 x float> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
118 ; CHECK-LABEL: fmlslt_lane_h:
120 ; CHECK-NEXT: fmlslt z0.s, z1.h, z2.h[3]
122 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmlslt.lane.nxv4f32(<vscale x 4 x float> %a,
123 <vscale x 8 x half> %b,
124 <vscale x 8 x half> %c,
126 ret <vscale x 4 x float> %out
129 declare <vscale x 4 x float> @llvm.aarch64.sve.fmlalb.nxv4f32(<vscale x 4 x float>, <vscale x 8 x half>, <vscale x 8 x half>)
130 declare <vscale x 4 x float> @llvm.aarch64.sve.fmlalb.lane.nxv4f32(<vscale x 4 x float>, <vscale x 8 x half>, <vscale x 8 x half>, i32)
131 declare <vscale x 4 x float> @llvm.aarch64.sve.fmlalt.nxv4f32(<vscale x 4 x float>, <vscale x 8 x half>, <vscale x 8 x half>)
132 declare <vscale x 4 x float> @llvm.aarch64.sve.fmlalt.lane.nxv4f32(<vscale x 4 x float>, <vscale x 8 x half>, <vscale x 8 x half>, i32)
134 declare <vscale x 4 x float> @llvm.aarch64.sve.fmlslb.nxv4f32(<vscale x 4 x float>, <vscale x 8 x half>, <vscale x 8 x half>)
135 declare <vscale x 4 x float> @llvm.aarch64.sve.fmlslb.lane.nxv4f32(<vscale x 4 x float>, <vscale x 8 x half>, <vscale x 8 x half>, i32)
136 declare <vscale x 4 x float> @llvm.aarch64.sve.fmlslt.nxv4f32(<vscale x 4 x float>, <vscale x 8 x half>, <vscale x 8 x half>)
137 declare <vscale x 4 x float> @llvm.aarch64.sve.fmlslt.lane.nxv4f32(<vscale x 4 x float>, <vscale x 8 x half>, <vscale x 8 x half>, i32)