xref: /aosp_15_r20/external/llvm/test/CodeGen/SystemZ/vec-round-01.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Test v2f64 rounding.
2*9880d681SAndroid Build Coastguard Worker;
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.rint.f64(double)
6*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.nearbyint.f64(double)
7*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.floor.f64(double)
8*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.ceil.f64(double)
9*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.trunc.f64(double)
10*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.round.f64(double)
11*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.rint.v2f64(<2 x double>)
12*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.nearbyint.v2f64(<2 x double>)
13*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.floor.v2f64(<2 x double>)
14*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.ceil.v2f64(<2 x double>)
15*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.trunc.v2f64(<2 x double>)
16*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.round.v2f64(<2 x double>)
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f1(<2 x double> %val) {
19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1:
20*9880d681SAndroid Build Coastguard Worker; CHECK: vfidb %v24, %v24, 0, 0
21*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
22*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.rint.v2f64(<2 x double> %val)
23*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f2(<2 x double> %val) {
27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2:
28*9880d681SAndroid Build Coastguard Worker; CHECK: vfidb %v24, %v24, 4, 0
29*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
30*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %val)
31*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
32*9880d681SAndroid Build Coastguard Worker}
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f3(<2 x double> %val) {
35*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3:
36*9880d681SAndroid Build Coastguard Worker; CHECK: vfidb %v24, %v24, 4, 7
37*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
38*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.floor.v2f64(<2 x double> %val)
39*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f4(<2 x double> %val) {
43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4:
44*9880d681SAndroid Build Coastguard Worker; CHECK: vfidb %v24, %v24, 4, 6
45*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
46*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.ceil.v2f64(<2 x double> %val)
47*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f5(<2 x double> %val) {
51*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5:
52*9880d681SAndroid Build Coastguard Worker; CHECK: vfidb %v24, %v24, 4, 5
53*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
54*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.trunc.v2f64(<2 x double> %val)
55*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f6(<2 x double> %val) {
59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6:
60*9880d681SAndroid Build Coastguard Worker; CHECK: vfidb %v24, %v24, 4, 1
61*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
62*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.round.v2f64(<2 x double> %val)
63*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerdefine double @f7(<2 x double> %val) {
67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7:
68*9880d681SAndroid Build Coastguard Worker; CHECK: wfidb %f0, %v24, 0, 0
69*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
70*9880d681SAndroid Build Coastguard Worker  %scalar = extractelement <2 x double> %val, i32 0
71*9880d681SAndroid Build Coastguard Worker  %res = call double @llvm.rint.f64(double %scalar)
72*9880d681SAndroid Build Coastguard Worker  ret double %res
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdefine double @f8(<2 x double> %val) {
76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8:
77*9880d681SAndroid Build Coastguard Worker; CHECK: wfidb %f0, %v24, 4, 0
78*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
79*9880d681SAndroid Build Coastguard Worker  %scalar = extractelement <2 x double> %val, i32 0
80*9880d681SAndroid Build Coastguard Worker  %res = call double @llvm.nearbyint.f64(double %scalar)
81*9880d681SAndroid Build Coastguard Worker  ret double %res
82*9880d681SAndroid Build Coastguard Worker}
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerdefine double @f9(<2 x double> %val) {
85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9:
86*9880d681SAndroid Build Coastguard Worker; CHECK: wfidb %f0, %v24, 4, 7
87*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
88*9880d681SAndroid Build Coastguard Worker  %scalar = extractelement <2 x double> %val, i32 0
89*9880d681SAndroid Build Coastguard Worker  %res = call double @llvm.floor.f64(double %scalar)
90*9880d681SAndroid Build Coastguard Worker  ret double %res
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdefine double @f10(<2 x double> %val) {
94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10:
95*9880d681SAndroid Build Coastguard Worker; CHECK: wfidb %f0, %v24, 4, 6
96*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
97*9880d681SAndroid Build Coastguard Worker  %scalar = extractelement <2 x double> %val, i32 0
98*9880d681SAndroid Build Coastguard Worker  %res = call double @llvm.ceil.f64(double %scalar)
99*9880d681SAndroid Build Coastguard Worker  ret double %res
100*9880d681SAndroid Build Coastguard Worker}
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Workerdefine double @f11(<2 x double> %val) {
103*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11:
104*9880d681SAndroid Build Coastguard Worker; CHECK: wfidb %f0, %v24, 4, 5
105*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
106*9880d681SAndroid Build Coastguard Worker  %scalar = extractelement <2 x double> %val, i32 0
107*9880d681SAndroid Build Coastguard Worker  %res = call double @llvm.trunc.f64(double %scalar)
108*9880d681SAndroid Build Coastguard Worker  ret double %res
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Workerdefine double @f12(<2 x double> %val) {
112*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f12:
113*9880d681SAndroid Build Coastguard Worker; CHECK: wfidb %f0, %v24, 4, 1
114*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
115*9880d681SAndroid Build Coastguard Worker  %scalar = extractelement <2 x double> %val, i32 0
116*9880d681SAndroid Build Coastguard Worker  %res = call double @llvm.round.f64(double %scalar)
117*9880d681SAndroid Build Coastguard Worker  ret double %res
118*9880d681SAndroid Build Coastguard Worker}
119