[X86] combineTargetShuffle - commute VPERMV3 shuffles so any load is on the RHS
[llvm-project.git] / llvm / test / CodeGen / SystemZ / vec-strict-round-01.ll
blobb82cb8082b7b8ca24f697aab09940bcb1e3f4795
1 ; Test strict v2f64 rounding.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
5 declare double @llvm.experimental.constrained.rint.f64(double, metadata, metadata)
6 declare double @llvm.experimental.constrained.nearbyint.f64(double, metadata, metadata)
7 declare double @llvm.experimental.constrained.floor.f64(double, metadata)
8 declare double @llvm.experimental.constrained.ceil.f64(double, metadata)
9 declare double @llvm.experimental.constrained.trunc.f64(double, metadata)
10 declare double @llvm.experimental.constrained.round.f64(double, metadata)
11 declare <2 x double> @llvm.experimental.constrained.rint.v2f64(<2 x double>, metadata, metadata)
12 declare <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double>, metadata, metadata)
13 declare <2 x double> @llvm.experimental.constrained.floor.v2f64(<2 x double>, metadata)
14 declare <2 x double> @llvm.experimental.constrained.ceil.v2f64(<2 x double>, metadata)
15 declare <2 x double> @llvm.experimental.constrained.trunc.v2f64(<2 x double>, metadata)
16 declare <2 x double> @llvm.experimental.constrained.round.v2f64(<2 x double>, metadata)
18 define <2 x double> @f1(<2 x double> %val) #0 {
19 ; CHECK-LABEL: f1:
20 ; CHECK: vfidb %v24, %v24, 0, 0
21 ; CHECK: br %r14
22   %res = call <2 x double> @llvm.experimental.constrained.rint.v2f64(
23                         <2 x double> %val,
24                         metadata !"round.dynamic",
25                         metadata !"fpexcept.strict") #0
26   ret <2 x double> %res
29 define <2 x double> @f2(<2 x double> %val) #0 {
30 ; CHECK-LABEL: f2:
31 ; CHECK: vfidb %v24, %v24, 4, 0
32 ; CHECK: br %r14
33   %res = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(
34                         <2 x double> %val,
35                         metadata !"round.dynamic",
36                         metadata !"fpexcept.strict") #0
37   ret <2 x double> %res
40 define <2 x double> @f3(<2 x double> %val) #0 {
41 ; CHECK-LABEL: f3:
42 ; CHECK: vfidb %v24, %v24, 4, 7
43 ; CHECK: br %r14
44   %res = call <2 x double> @llvm.experimental.constrained.floor.v2f64(
45                         <2 x double> %val,
46                         metadata !"fpexcept.strict") #0
47   ret <2 x double> %res
50 define <2 x double> @f4(<2 x double> %val) #0 {
51 ; CHECK-LABEL: f4:
52 ; CHECK: vfidb %v24, %v24, 4, 6
53 ; CHECK: br %r14
54   %res = call <2 x double> @llvm.experimental.constrained.ceil.v2f64(
55                         <2 x double> %val,
56                         metadata !"fpexcept.strict") #0
57   ret <2 x double> %res
60 define <2 x double> @f5(<2 x double> %val) #0 {
61 ; CHECK-LABEL: f5:
62 ; CHECK: vfidb %v24, %v24, 4, 5
63 ; CHECK: br %r14
64   %res = call <2 x double> @llvm.experimental.constrained.trunc.v2f64(
65                         <2 x double> %val,
66                         metadata !"fpexcept.strict") #0
67   ret <2 x double> %res
70 define <2 x double> @f6(<2 x double> %val) #0 {
71 ; CHECK-LABEL: f6:
72 ; CHECK: vfidb %v24, %v24, 4, 1
73 ; CHECK: br %r14
74   %res = call <2 x double> @llvm.experimental.constrained.round.v2f64(
75                         <2 x double> %val,
76                         metadata !"fpexcept.strict") #0
77   ret <2 x double> %res
80 define double @f7(<2 x double> %val) #0 {
81 ; CHECK-LABEL: f7:
82 ; CHECK: wfidb %f0, %v24, 0, 0
83 ; CHECK: br %r14
84   %scalar = extractelement <2 x double> %val, i32 0
85   %res = call double @llvm.experimental.constrained.rint.f64(
86                         double %scalar,
87                         metadata !"round.dynamic",
88                         metadata !"fpexcept.strict") #0
89   ret double %res
92 define double @f8(<2 x double> %val) #0 {
93 ; CHECK-LABEL: f8:
94 ; CHECK: wfidb %f0, %v24, 4, 0
95 ; CHECK: br %r14
96   %scalar = extractelement <2 x double> %val, i32 0
97   %res = call double @llvm.experimental.constrained.nearbyint.f64(
98                         double %scalar,
99                         metadata !"round.dynamic",
100                         metadata !"fpexcept.strict") #0
101   ret double %res
104 define double @f9(<2 x double> %val) #0 {
105 ; CHECK-LABEL: f9:
106 ; CHECK: wfidb %f0, %v24, 4, 7
107 ; CHECK: br %r14
108   %scalar = extractelement <2 x double> %val, i32 0
109   %res = call double @llvm.experimental.constrained.floor.f64(
110                         double %scalar,
111                         metadata !"fpexcept.strict") #0
112   ret double %res
116 define double @f10(<2 x double> %val) #0 {
117 ; CHECK-LABEL: f10:
118 ; CHECK: wfidb %f0, %v24, 4, 6
119 ; CHECK: br %r14
120   %scalar = extractelement <2 x double> %val, i32 0
121   %res = call double @llvm.experimental.constrained.ceil.f64(
122                         double %scalar,
123                         metadata !"fpexcept.strict") #0
124   ret double %res
127 define double @f11(<2 x double> %val) #0 {
128 ; CHECK-LABEL: f11:
129 ; CHECK: wfidb %f0, %v24, 4, 5
130 ; CHECK: br %r14
131   %scalar = extractelement <2 x double> %val, i32 0
132   %res = call double @llvm.experimental.constrained.trunc.f64(
133                         double %scalar,
134                         metadata !"fpexcept.strict") #0
135   ret double %res
138 define double @f12(<2 x double> %val) #0 {
139 ; CHECK-LABEL: f12:
140 ; CHECK: wfidb %f0, %v24, 4, 1
141 ; CHECK: br %r14
142   %scalar = extractelement <2 x double> %val, i32 0
143   %res = call double @llvm.experimental.constrained.round.f64(
144                         double %scalar,
145                         metadata !"fpexcept.strict") #0
146   ret double %res
149 attributes #0 = { strictfp }