blob: b84ea6b6b4fb64170e86ed89069f0956de7cefde [file] [log] [blame]
Ulrich Weigand2b3482f2017-07-17 17:41:11 +00001; Test vector minimum on z14.
2;
3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s
4
5declare double @fmin(double, double)
6declare double @llvm.minnum.f64(double, double)
7declare <2 x double> @llvm.minnum.v2f64(<2 x double>, <2 x double>)
8
Ulrich Weigand33435c42017-07-17 17:42:48 +00009declare float @fminf(float, float)
10declare float @llvm.minnum.f32(float, float)
11declare <4 x float> @llvm.minnum.v4f32(<4 x float>, <4 x float>)
12
Ulrich Weigand2b3482f2017-07-17 17:41:11 +000013; Test the fmin library function.
14define double @f1(double %dummy, double %val1, double %val2) {
15; CHECK-LABEL: f1:
16; CHECK: wfmindb %f0, %f2, %f4, 4
17; CHECK: br %r14
18 %ret = call double @fmin(double %val1, double %val2) readnone
19 ret double %ret
20}
21
22; Test the f64 minnum intrinsic.
23define double @f2(double %dummy, double %val1, double %val2) {
24; CHECK-LABEL: f2:
25; CHECK: wfmindb %f0, %f2, %f4, 4
26; CHECK: br %r14
27 %ret = call double @llvm.minnum.f64(double %val1, double %val2)
28 ret double %ret
29}
30
31; Test a f64 constant compare/select resulting in minnum.
32define double @f3(double %dummy, double %val) {
33; CHECK-LABEL: f3:
34; CHECK: lzdr [[REG:%f[0-9]+]]
35; CHECK: wfmindb %f0, %f2, [[REG]], 4
36; CHECK: br %r14
37 %cmp = fcmp olt double %val, 0.0
38 %ret = select i1 %cmp, double %val, double 0.0
39 ret double %ret
40}
41
42; Test a f64 constant compare/select resulting in minnan.
43define double @f4(double %dummy, double %val) {
44; CHECK-LABEL: f4:
45; CHECK: lzdr [[REG:%f[0-9]+]]
46; CHECK: wfmindb %f0, %f2, [[REG]], 1
47; CHECK: br %r14
48 %cmp = fcmp ult double %val, 0.0
49 %ret = select i1 %cmp, double %val, double 0.0
50 ret double %ret
51}
52
53; Test the v2f64 minnum intrinsic.
54define <2 x double> @f5(<2 x double> %dummy, <2 x double> %val1,
55 <2 x double> %val2) {
56; CHECK-LABEL: f5:
57; CHECK: vfmindb %v24, %v26, %v28, 4
58; CHECK: br %r14
59 %ret = call <2 x double> @llvm.minnum.v2f64(<2 x double> %val1, <2 x double> %val2)
60 ret <2 x double> %ret
61}
62
Ulrich Weigand33435c42017-07-17 17:42:48 +000063; Test the fminf library function.
64define float @f11(float %dummy, float %val1, float %val2) {
65; CHECK-LABEL: f11:
66; CHECK: wfminsb %f0, %f2, %f4, 4
67; CHECK: br %r14
68 %ret = call float @fminf(float %val1, float %val2) readnone
69 ret float %ret
70}
71
72; Test the f32 minnum intrinsic.
73define float @f12(float %dummy, float %val1, float %val2) {
74; CHECK-LABEL: f12:
75; CHECK: wfminsb %f0, %f2, %f4, 4
76; CHECK: br %r14
77 %ret = call float @llvm.minnum.f32(float %val1, float %val2)
78 ret float %ret
79}
80
81; Test a f32 constant compare/select resulting in minnum.
82define float @f13(float %dummy, float %val) {
83; CHECK-LABEL: f13:
84; CHECK: lzer [[REG:%f[0-9]+]]
85; CHECK: wfminsb %f0, %f2, [[REG]], 4
86; CHECK: br %r14
87 %cmp = fcmp olt float %val, 0.0
88 %ret = select i1 %cmp, float %val, float 0.0
89 ret float %ret
90}
91
92; Test a f32 constant compare/select resulting in minnan.
93define float @f14(float %dummy, float %val) {
94; CHECK-LABEL: f14:
95; CHECK: lzer [[REG:%f[0-9]+]]
96; CHECK: wfminsb %f0, %f2, [[REG]], 1
97; CHECK: br %r14
98 %cmp = fcmp ult float %val, 0.0
99 %ret = select i1 %cmp, float %val, float 0.0
100 ret float %ret
101}
102
103; Test the v4f32 minnum intrinsic.
104define <4 x float> @f15(<4 x float> %dummy, <4 x float> %val1,
105 <4 x float> %val2) {
106; CHECK-LABEL: f15:
107; CHECK: vfminsb %v24, %v26, %v28, 4
108; CHECK: br %r14
109 %ret = call <4 x float> @llvm.minnum.v4f32(<4 x float> %val1, <4 x float> %val2)
110 ret <4 x float> %ret
111}
112