[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve2-intrinsics-fp-widening-mul-acc.ll
blob97e6aeaa96e1f6aacdff346b0474805c4fa18ead
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
6 ; FMLALB (Vectors)
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:
11 ; CHECK:       // %bb.0:
12 ; CHECK-NEXT:    fmlalb z0.s, z1.h, z2.h
13 ; CHECK-NEXT:    ret
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
21 ; FMLALB (Indexed)
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:
26 ; CHECK:       // %bb.0:
27 ; CHECK-NEXT:    fmlalb z0.s, z1.h, z2.h[0]
28 ; CHECK-NEXT:    ret
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,
32                                                                          i32 0)
33   ret <vscale x 4 x float> %out
37 ; FMLALT (Vectors)
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:
42 ; CHECK:       // %bb.0:
43 ; CHECK-NEXT:    fmlalt z0.s, z1.h, z2.h
44 ; CHECK-NEXT:    ret
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
52 ; FMLALT (Indexed)
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:
57 ; CHECK:       // %bb.0:
58 ; CHECK-NEXT:    fmlalt z0.s, z1.h, z2.h[1]
59 ; CHECK-NEXT:    ret
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,
63                                                                          i32 1)
64   ret <vscale x 4 x float> %out
68 ; FMLSLB (Vectors)
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:
73 ; CHECK:       // %bb.0:
74 ; CHECK-NEXT:    fmlslb z0.s, z1.h, z2.h
75 ; CHECK-NEXT:    ret
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
83 ; FMLSLB (Indexed)
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:
88 ; CHECK:       // %bb.0:
89 ; CHECK-NEXT:    fmlslb z0.s, z1.h, z2.h[2]
90 ; CHECK-NEXT:    ret
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,
94                                                                          i32 2)
95   ret <vscale x 4 x float> %out
99 ; FMLSLT (Vectors)
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:
104 ; CHECK:       // %bb.0:
105 ; CHECK-NEXT:    fmlslt z0.s, z1.h, z2.h
106 ; CHECK-NEXT:    ret
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
114 ; FMLSLT (Indexed)
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:
119 ; CHECK:       // %bb.0:
120 ; CHECK-NEXT:    fmlslt z0.s, z1.h, z2.h[3]
121 ; CHECK-NEXT:    ret
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,
125                                                                          i32 3)
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)