• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; Test strict v4f32 rounding on z14.
2;
3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s
4
5declare float @llvm.experimental.constrained.rint.f32(float, metadata, metadata)
6declare float @llvm.experimental.constrained.nearbyint.f32(float, metadata, metadata)
7declare float @llvm.experimental.constrained.floor.f32(float, metadata)
8declare float @llvm.experimental.constrained.ceil.f32(float, metadata)
9declare float @llvm.experimental.constrained.trunc.f32(float, metadata)
10declare float @llvm.experimental.constrained.round.f32(float, metadata)
11declare <4 x float> @llvm.experimental.constrained.rint.v4f32(<4 x float>, metadata, metadata)
12declare <4 x float> @llvm.experimental.constrained.nearbyint.v4f32(<4 x float>, metadata, metadata)
13declare <4 x float> @llvm.experimental.constrained.floor.v4f32(<4 x float>, metadata)
14declare <4 x float> @llvm.experimental.constrained.ceil.v4f32(<4 x float>, metadata)
15declare <4 x float> @llvm.experimental.constrained.trunc.v4f32(<4 x float>, metadata)
16declare <4 x float> @llvm.experimental.constrained.round.v4f32(<4 x float>, metadata)
17
18define <4 x float> @f1(<4 x float> %val) #0 {
19; CHECK-LABEL: f1:
20; CHECK: vfisb %v24, %v24, 0, 0
21; CHECK: br %r14
22  %res = call <4 x float> @llvm.experimental.constrained.rint.v4f32(
23                        <4 x float> %val,
24                        metadata !"round.dynamic",
25                        metadata !"fpexcept.strict") #0
26  ret <4 x float> %res
27}
28
29define <4 x float> @f2(<4 x float> %val) #0 {
30; CHECK-LABEL: f2:
31; CHECK: vfisb %v24, %v24, 4, 0
32; CHECK: br %r14
33  %res = call <4 x float> @llvm.experimental.constrained.nearbyint.v4f32(
34                        <4 x float> %val,
35                        metadata !"round.dynamic",
36                        metadata !"fpexcept.strict") #0
37  ret <4 x float> %res
38}
39
40define <4 x float> @f3(<4 x float> %val) #0 {
41; CHECK-LABEL: f3:
42; CHECK: vfisb %v24, %v24, 4, 7
43; CHECK: br %r14
44  %res = call <4 x float> @llvm.experimental.constrained.floor.v4f32(
45                        <4 x float> %val,
46                        metadata !"fpexcept.strict") #0
47  ret <4 x float> %res
48}
49
50define <4 x float> @f4(<4 x float> %val) #0 {
51; CHECK-LABEL: f4:
52; CHECK: vfisb %v24, %v24, 4, 6
53; CHECK: br %r14
54  %res = call <4 x float> @llvm.experimental.constrained.ceil.v4f32(
55                        <4 x float> %val,
56                        metadata !"fpexcept.strict") #0
57  ret <4 x float> %res
58}
59
60define <4 x float> @f5(<4 x float> %val) #0 {
61; CHECK-LABEL: f5:
62; CHECK: vfisb %v24, %v24, 4, 5
63; CHECK: br %r14
64  %res = call <4 x float> @llvm.experimental.constrained.trunc.v4f32(
65                        <4 x float> %val,
66                        metadata !"fpexcept.strict") #0
67  ret <4 x float> %res
68}
69
70define <4 x float> @f6(<4 x float> %val) #0 {
71; CHECK-LABEL: f6:
72; CHECK: vfisb %v24, %v24, 4, 1
73; CHECK: br %r14
74  %res = call <4 x float> @llvm.experimental.constrained.round.v4f32(
75                        <4 x float> %val,
76                        metadata !"fpexcept.strict") #0
77  ret <4 x float> %res
78}
79
80define float @f7(<4 x float> %val) #0 {
81; CHECK-LABEL: f7:
82; CHECK: wfisb %f0, %v24, 0, 0
83; CHECK: br %r14
84  %scalar = extractelement <4 x float> %val, i32 0
85  %res = call float @llvm.experimental.constrained.rint.f32(
86                        float %scalar,
87                        metadata !"round.dynamic",
88                        metadata !"fpexcept.strict") #0
89  ret float %res
90}
91
92define float @f8(<4 x float> %val) #0 {
93; CHECK-LABEL: f8:
94; CHECK: wfisb %f0, %v24, 4, 0
95; CHECK: br %r14
96  %scalar = extractelement <4 x float> %val, i32 0
97  %res = call float @llvm.experimental.constrained.nearbyint.f32(
98                        float %scalar,
99                        metadata !"round.dynamic",
100                        metadata !"fpexcept.strict") #0
101  ret float %res
102}
103
104define float @f9(<4 x float> %val) #0 {
105; CHECK-LABEL: f9:
106; CHECK: wfisb %f0, %v24, 4, 7
107; CHECK: br %r14
108  %scalar = extractelement <4 x float> %val, i32 0
109  %res = call float @llvm.experimental.constrained.floor.f32(
110                        float %scalar,
111                        metadata !"fpexcept.strict") #0
112  ret float %res
113}
114
115define float @f10(<4 x float> %val) #0 {
116; CHECK-LABEL: f10:
117; CHECK: wfisb %f0, %v24, 4, 6
118; CHECK: br %r14
119  %scalar = extractelement <4 x float> %val, i32 0
120  %res = call float @llvm.experimental.constrained.ceil.f32(
121                        float %scalar,
122                        metadata !"fpexcept.strict") #0
123  ret float %res
124}
125
126define float @f11(<4 x float> %val) #0 {
127; CHECK-LABEL: f11:
128; CHECK: wfisb %f0, %v24, 4, 5
129; CHECK: br %r14
130  %scalar = extractelement <4 x float> %val, i32 0
131  %res = call float @llvm.experimental.constrained.trunc.f32(
132                        float %scalar,
133                        metadata !"fpexcept.strict") #0
134  ret float %res
135}
136
137define float @f12(<4 x float> %val) #0 {
138; CHECK-LABEL: f12:
139; CHECK: wfisb %f0, %v24, 4, 1
140; CHECK: br %r14
141  %scalar = extractelement <4 x float> %val, i32 0
142  %res = call float @llvm.experimental.constrained.round.f32(
143                        float %scalar,
144                        metadata !"fpexcept.strict") #0
145  ret float %res
146}
147
148attributes #0 = { strictfp }
149