blob: c2d8726addfbd55dba106050daef48cc4fa33141 [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
9; Test the fmin library function.
10define double @f1(double %dummy, double %val1, double %val2) {
11; CHECK-LABEL: f1:
12; CHECK: wfmindb %f0, %f2, %f4, 4
13; CHECK: br %r14
14 %ret = call double @fmin(double %val1, double %val2) readnone
15 ret double %ret
16}
17
18; Test the f64 minnum intrinsic.
19define double @f2(double %dummy, double %val1, double %val2) {
20; CHECK-LABEL: f2:
21; CHECK: wfmindb %f0, %f2, %f4, 4
22; CHECK: br %r14
23 %ret = call double @llvm.minnum.f64(double %val1, double %val2)
24 ret double %ret
25}
26
27; Test a f64 constant compare/select resulting in minnum.
28define double @f3(double %dummy, double %val) {
29; CHECK-LABEL: f3:
30; CHECK: lzdr [[REG:%f[0-9]+]]
31; CHECK: wfmindb %f0, %f2, [[REG]], 4
32; CHECK: br %r14
33 %cmp = fcmp olt double %val, 0.0
34 %ret = select i1 %cmp, double %val, double 0.0
35 ret double %ret
36}
37
38; Test a f64 constant compare/select resulting in minnan.
39define double @f4(double %dummy, double %val) {
40; CHECK-LABEL: f4:
41; CHECK: lzdr [[REG:%f[0-9]+]]
42; CHECK: wfmindb %f0, %f2, [[REG]], 1
43; CHECK: br %r14
44 %cmp = fcmp ult double %val, 0.0
45 %ret = select i1 %cmp, double %val, double 0.0
46 ret double %ret
47}
48
49; Test the v2f64 minnum intrinsic.
50define <2 x double> @f5(<2 x double> %dummy, <2 x double> %val1,
51 <2 x double> %val2) {
52; CHECK-LABEL: f5:
53; CHECK: vfmindb %v24, %v26, %v28, 4
54; CHECK: br %r14
55 %ret = call <2 x double> @llvm.minnum.v2f64(<2 x double> %val1, <2 x double> %val2)
56 ret <2 x double> %ret
57}
58