[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / llvm / test / CodeGen / SystemZ / vec-strict-round-02.ll
blob701dd5b2302f2c3a3d1e281f9de2541639ef71ba
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)
8 declare float @llvm.experimental.constrained.ceil.f32(float, metadata)
9 declare float @llvm.experimental.constrained.trunc.f32(float, metadata)
10 declare float @llvm.experimental.constrained.round.f32(float, 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)
14 declare <4 x float> @llvm.experimental.constrained.ceil.v4f32(<4 x float>, metadata)
15 declare <4 x float> @llvm.experimental.constrained.trunc.v4f32(<4 x float>, metadata)
16 declare <4 x float> @llvm.experimental.constrained.round.v4f32(<4 x float>, metadata)
18 define <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
29 define <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
40 define <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
50 define <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
60 define <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
70 define <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
80 define 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
92 define 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
104 define 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
115 define 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
126 define 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
137 define 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
148 attributes #0 = { strictfp }