xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfsqrt-constrained-sdnode.ll (revision 1cb599835ccf7ee8b2d1d5a7f3107e19a26fc6f5)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \
3; RUN:     -verify-machineinstrs < %s | FileCheck %s
4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \
5; RUN:     -verify-machineinstrs < %s | FileCheck %s
6
7declare <2 x half> @llvm.experimental.constrained.sqrt.v2f16(<2 x half>, metadata, metadata)
8
9define <2 x half> @vfsqrt_v2f16(<2 x half> %v) strictfp {
10; CHECK-LABEL: vfsqrt_v2f16:
11; CHECK:       # %bb.0:
12; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
13; CHECK-NEXT:    vfsqrt.v v8, v8
14; CHECK-NEXT:    ret
15  %r = call <2 x half> @llvm.experimental.constrained.sqrt.v2f16(<2 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
16  ret <2 x half> %r
17}
18
19declare <4 x half> @llvm.experimental.constrained.sqrt.v4f16(<4 x half>, metadata, metadata)
20
21define <4 x half> @vfsqrt_v4f16(<4 x half> %v) strictfp {
22; CHECK-LABEL: vfsqrt_v4f16:
23; CHECK:       # %bb.0:
24; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
25; CHECK-NEXT:    vfsqrt.v v8, v8
26; CHECK-NEXT:    ret
27  %r = call <4 x half> @llvm.experimental.constrained.sqrt.v4f16(<4 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
28  ret <4 x half> %r
29}
30
31declare <8 x half> @llvm.experimental.constrained.sqrt.v8f16(<8 x half>, metadata, metadata)
32
33define <8 x half> @vfsqrt_v8f16(<8 x half> %v) strictfp {
34; CHECK-LABEL: vfsqrt_v8f16:
35; CHECK:       # %bb.0:
36; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
37; CHECK-NEXT:    vfsqrt.v v8, v8
38; CHECK-NEXT:    ret
39  %r = call <8 x half> @llvm.experimental.constrained.sqrt.v8f16(<8 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
40  ret <8 x half> %r
41}
42
43declare <16 x half> @llvm.experimental.constrained.sqrt.v16f16(<16 x half>, metadata, metadata)
44
45define <16 x half> @vfsqrt_v16f16(<16 x half> %v) strictfp {
46; CHECK-LABEL: vfsqrt_v16f16:
47; CHECK:       # %bb.0:
48; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
49; CHECK-NEXT:    vfsqrt.v v8, v8
50; CHECK-NEXT:    ret
51  %r = call <16 x half> @llvm.experimental.constrained.sqrt.v16f16(<16 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
52  ret <16 x half> %r
53}
54
55declare <32 x half> @llvm.experimental.constrained.sqrt.v32f16(<32 x half>, metadata, metadata)
56
57define <32 x half> @vfsqrt_v32f16(<32 x half> %v) strictfp {
58; CHECK-LABEL: vfsqrt_v32f16:
59; CHECK:       # %bb.0:
60; CHECK-NEXT:    li a0, 32
61; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
62; CHECK-NEXT:    vfsqrt.v v8, v8
63; CHECK-NEXT:    ret
64  %r = call <32 x half> @llvm.experimental.constrained.sqrt.v32f16(<32 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
65  ret <32 x half> %r
66}
67
68declare <2 x float> @llvm.experimental.constrained.sqrt.v2f32(<2 x float>, metadata, metadata)
69
70define <2 x float> @vfsqrt_v2f32(<2 x float> %v) strictfp {
71; CHECK-LABEL: vfsqrt_v2f32:
72; CHECK:       # %bb.0:
73; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
74; CHECK-NEXT:    vfsqrt.v v8, v8
75; CHECK-NEXT:    ret
76  %r = call <2 x float> @llvm.experimental.constrained.sqrt.v2f32(<2 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
77  ret <2 x float> %r
78}
79
80declare <4 x float> @llvm.experimental.constrained.sqrt.v4f32(<4 x float>, metadata, metadata)
81
82define <4 x float> @vfsqrt_v4f32(<4 x float> %v) strictfp {
83; CHECK-LABEL: vfsqrt_v4f32:
84; CHECK:       # %bb.0:
85; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
86; CHECK-NEXT:    vfsqrt.v v8, v8
87; CHECK-NEXT:    ret
88  %r = call <4 x float> @llvm.experimental.constrained.sqrt.v4f32(<4 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
89  ret <4 x float> %r
90}
91
92declare <8 x float> @llvm.experimental.constrained.sqrt.v8f32(<8 x float>, metadata, metadata)
93
94define <8 x float> @vfsqrt_v8f32(<8 x float> %v) strictfp {
95; CHECK-LABEL: vfsqrt_v8f32:
96; CHECK:       # %bb.0:
97; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
98; CHECK-NEXT:    vfsqrt.v v8, v8
99; CHECK-NEXT:    ret
100  %r = call <8 x float> @llvm.experimental.constrained.sqrt.v8f32(<8 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
101  ret <8 x float> %r
102}
103
104declare <16 x float> @llvm.experimental.constrained.sqrt.v16f32(<16 x float>, metadata, metadata)
105
106define <16 x float> @vfsqrt_v16f32(<16 x float> %v) strictfp {
107; CHECK-LABEL: vfsqrt_v16f32:
108; CHECK:       # %bb.0:
109; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
110; CHECK-NEXT:    vfsqrt.v v8, v8
111; CHECK-NEXT:    ret
112  %r = call <16 x float> @llvm.experimental.constrained.sqrt.v16f32(<16 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
113  ret <16 x float> %r
114}
115
116declare <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double>, metadata, metadata)
117
118define <2 x double> @vfsqrt_v2f64(<2 x double> %v) strictfp {
119; CHECK-LABEL: vfsqrt_v2f64:
120; CHECK:       # %bb.0:
121; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
122; CHECK-NEXT:    vfsqrt.v v8, v8
123; CHECK-NEXT:    ret
124  %r = call <2 x double> @llvm.experimental.constrained.sqrt.v2f64(<2 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
125  ret <2 x double> %r
126}
127
128declare <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double>, metadata, metadata)
129
130define <4 x double> @vfsqrt_v4f64(<4 x double> %v) strictfp {
131; CHECK-LABEL: vfsqrt_v4f64:
132; CHECK:       # %bb.0:
133; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
134; CHECK-NEXT:    vfsqrt.v v8, v8
135; CHECK-NEXT:    ret
136  %r = call <4 x double> @llvm.experimental.constrained.sqrt.v4f64(<4 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
137  ret <4 x double> %r
138}
139
140declare <8 x double> @llvm.experimental.constrained.sqrt.v8f64(<8 x double>, metadata, metadata)
141
142define <8 x double> @vfsqrt_v8f64(<8 x double> %v) strictfp {
143; CHECK-LABEL: vfsqrt_v8f64:
144; CHECK:       # %bb.0:
145; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
146; CHECK-NEXT:    vfsqrt.v v8, v8
147; CHECK-NEXT:    ret
148  %r = call <8 x double> @llvm.experimental.constrained.sqrt.v8f64(<8 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")
149  ret <8 x double> %r
150}
151