[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / SystemZ / vec-strict-round-02.ll
blob2ee9b10ccdf08128c6f166f7ebf7ef797e27442d
1 ; Test strict v4f32 rounding on z14.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s
5 declare float @llvm.experimental.constrained.rint.f32(float, metadata, metadata)
6 declare float @llvm.experimental.constrained.nearbyint.f32(float, metadata, metadata)
7 declare float @llvm.experimental.constrained.floor.f32(float, metadata, metadata)
8 declare float @llvm.experimental.constrained.ceil.f32(float, metadata, metadata)
9 declare float @llvm.experimental.constrained.trunc.f32(float, metadata, metadata)
10 declare float @llvm.experimental.constrained.round.f32(float, metadata, metadata)
11 declare <4 x float> @llvm.experimental.constrained.rint.v4f32(<4 x float>, metadata, metadata)
12 declare <4 x float> @llvm.experimental.constrained.nearbyint.v4f32(<4 x float>, metadata, metadata)
13 declare <4 x float> @llvm.experimental.constrained.floor.v4f32(<4 x float>, metadata, metadata)
14 declare <4 x float> @llvm.experimental.constrained.ceil.v4f32(<4 x float>, metadata, metadata)
15 declare <4 x float> @llvm.experimental.constrained.trunc.v4f32(<4 x float>, metadata, metadata)
16 declare <4 x float> @llvm.experimental.constrained.round.v4f32(<4 x float>, metadata, metadata)
18 define <4 x float> @f1(<4 x float> %val) {
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")
26   ret <4 x float> %res
29 define <4 x float> @f2(<4 x float> %val) {
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")
37   ret <4 x float> %res
40 define <4 x float> @f3(<4 x float> %val) {
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 !"round.dynamic",
47                         metadata !"fpexcept.strict")
48   ret <4 x float> %res
51 define <4 x float> @f4(<4 x float> %val) {
52 ; CHECK-LABEL: f4:
53 ; CHECK: vfisb %v24, %v24, 4, 6
54 ; CHECK: br %r14
55   %res = call <4 x float> @llvm.experimental.constrained.ceil.v4f32(
56                         <4 x float> %val,
57                         metadata !"round.dynamic",
58                         metadata !"fpexcept.strict")
59   ret <4 x float> %res
62 define <4 x float> @f5(<4 x float> %val) {
63 ; CHECK-LABEL: f5:
64 ; CHECK: vfisb %v24, %v24, 4, 5
65 ; CHECK: br %r14
66   %res = call <4 x float> @llvm.experimental.constrained.trunc.v4f32(
67                         <4 x float> %val,
68                         metadata !"round.dynamic",
69                         metadata !"fpexcept.strict")
70   ret <4 x float> %res
73 define <4 x float> @f6(<4 x float> %val) {
74 ; CHECK-LABEL: f6:
75 ; CHECK: vfisb %v24, %v24, 4, 1
76 ; CHECK: br %r14
77   %res = call <4 x float> @llvm.experimental.constrained.round.v4f32(
78                         <4 x float> %val,
79                         metadata !"round.dynamic",
80                         metadata !"fpexcept.strict")
81   ret <4 x float> %res
84 define float @f7(<4 x float> %val) {
85 ; CHECK-LABEL: f7:
86 ; CHECK: wfisb %f0, %v24, 0, 0
87 ; CHECK: br %r14
88   %scalar = extractelement <4 x float> %val, i32 0
89   %res = call float @llvm.experimental.constrained.rint.f32(
90                         float %scalar,
91                         metadata !"round.dynamic",
92                         metadata !"fpexcept.strict")
93   ret float %res
96 define float @f8(<4 x float> %val) {
97 ; CHECK-LABEL: f8:
98 ; CHECK: wfisb %f0, %v24, 4, 0
99 ; CHECK: br %r14
100   %scalar = extractelement <4 x float> %val, i32 0
101   %res = call float @llvm.experimental.constrained.nearbyint.f32(
102                         float %scalar,
103                         metadata !"round.dynamic",
104                         metadata !"fpexcept.strict")
105   ret float %res
108 define float @f9(<4 x float> %val) {
109 ; CHECK-LABEL: f9:
110 ; CHECK: wfisb %f0, %v24, 4, 7
111 ; CHECK: br %r14
112   %scalar = extractelement <4 x float> %val, i32 0
113   %res = call float @llvm.experimental.constrained.floor.f32(
114                         float %scalar,
115                         metadata !"round.dynamic",
116                         metadata !"fpexcept.strict")
117   ret float %res
120 define float @f10(<4 x float> %val) {
121 ; CHECK-LABEL: f10:
122 ; CHECK: wfisb %f0, %v24, 4, 6
123 ; CHECK: br %r14
124   %scalar = extractelement <4 x float> %val, i32 0
125   %res = call float @llvm.experimental.constrained.ceil.f32(
126                         float %scalar,
127                         metadata !"round.dynamic",
128                         metadata !"fpexcept.strict")
129   ret float %res
132 define float @f11(<4 x float> %val) {
133 ; CHECK-LABEL: f11:
134 ; CHECK: wfisb %f0, %v24, 4, 5
135 ; CHECK: br %r14
136   %scalar = extractelement <4 x float> %val, i32 0
137   %res = call float @llvm.experimental.constrained.trunc.f32(
138                         float %scalar,
139                         metadata !"round.dynamic",
140                         metadata !"fpexcept.strict")
141   ret float %res
144 define float @f12(<4 x float> %val) {
145 ; CHECK-LABEL: f12:
146 ; CHECK: wfisb %f0, %v24, 4, 1
147 ; CHECK: br %r14
148   %scalar = extractelement <4 x float> %val, i32 0
149   %res = call float @llvm.experimental.constrained.round.f32(
150                         float %scalar,
151                         metadata !"round.dynamic",
152                         metadata !"fpexcept.strict")
153   ret float %res