xref: /llvm-project/llvm/test/CodeGen/SystemZ/fp-cmp-zero.ll (revision 1d1893097a6319a6402331a54a588b1a5d961808)
1*1d189309SJonas Paulsson; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s
2*1d189309SJonas Paulsson; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
3*1d189309SJonas Paulsson
4*1d189309SJonas Paulsson; Check comparisons with zero. If the tested value is live after the
5*1d189309SJonas Paulsson; comparison, load and test cannot be used to the same register.
6*1d189309SJonas Paulsson
7*1d189309SJonas Paulsson; Compared value is used afterwards.
8*1d189309SJonas Paulssondefine i64 @f1(i64 %a, i64 %b, float %V, ptr %dst) {
9*1d189309SJonas Paulsson; CHECK-LABEL: f1:
10*1d189309SJonas Paulsson; CHECK: ltebr %f1, %f0
11*1d189309SJonas Paulsson  %cond = fcmp oeq float %V, 0.0
12*1d189309SJonas Paulsson  %res = select i1 %cond, i64 %a, i64 %b
13*1d189309SJonas Paulsson  store volatile float %V, ptr %dst
14*1d189309SJonas Paulsson  ret i64 %res
15*1d189309SJonas Paulsson}
16*1d189309SJonas Paulsson
17*1d189309SJonas Paulssondefine i64 @f1m(i64 %a, i64 %b, float %V, ptr %dst) {
18*1d189309SJonas Paulsson; CHECK-LABEL: f1m:
19*1d189309SJonas Paulsson; CHECK: ltebr %f1, %f0
20*1d189309SJonas Paulsson  %cond = fcmp oeq float %V, -0.0
21*1d189309SJonas Paulsson  %res = select i1 %cond, i64 %a, i64 %b
22*1d189309SJonas Paulsson  store volatile float %V, ptr %dst
23*1d189309SJonas Paulsson  ret i64 %res
24*1d189309SJonas Paulsson}
25*1d189309SJonas Paulsson
26*1d189309SJonas Paulsson; Value only used in comparison.
27*1d189309SJonas Paulssondefine i64 @f2(i64 %a, i64 %b, float %V) {
28*1d189309SJonas Paulsson; CHECK-LABEL: f2:
29*1d189309SJonas Paulsson; CHECK: ltebr %f0, %f0
30*1d189309SJonas Paulsson  %cond = fcmp oeq float %V, 0.0
31*1d189309SJonas Paulsson  %res = select i1 %cond, i64 %a, i64 %b
32*1d189309SJonas Paulsson  ret i64 %res
33*1d189309SJonas Paulsson}
34*1d189309SJonas Paulsson
35*1d189309SJonas Paulssondefine i64 @f2m(i64 %a, i64 %b, float %V) {
36*1d189309SJonas Paulsson; CHECK-LABEL: f2m:
37*1d189309SJonas Paulsson; CHECK: ltebr %f0, %f0
38*1d189309SJonas Paulsson  %cond = fcmp oeq float %V, -0.0
39*1d189309SJonas Paulsson  %res = select i1 %cond, i64 %a, i64 %b
40*1d189309SJonas Paulsson  ret i64 %res
41*1d189309SJonas Paulsson}
42*1d189309SJonas Paulsson
43*1d189309SJonas Paulsson; Same for double
44*1d189309SJonas Paulssondefine i64 @f3(i64 %a, i64 %b, double %V, ptr %dst) {
45*1d189309SJonas Paulsson; CHECK-LABEL: f3:
46*1d189309SJonas Paulsson; CHECK: ltdbr %f1, %f0
47*1d189309SJonas Paulsson  %cond = fcmp oeq double %V, 0.0
48*1d189309SJonas Paulsson  %res = select i1 %cond, i64 %a, i64 %b
49*1d189309SJonas Paulsson  store volatile double %V, ptr %dst
50*1d189309SJonas Paulsson  ret i64 %res
51*1d189309SJonas Paulsson}
52*1d189309SJonas Paulsson
53*1d189309SJonas Paulssondefine i64 @f3m(i64 %a, i64 %b, double %V, ptr %dst) {
54*1d189309SJonas Paulsson; CHECK-LABEL: f3m:
55*1d189309SJonas Paulsson; CHECK: ltdbr %f1, %f0
56*1d189309SJonas Paulsson  %cond = fcmp oeq double %V, -0.0
57*1d189309SJonas Paulsson  %res = select i1 %cond, i64 %a, i64 %b
58*1d189309SJonas Paulsson  store volatile double %V, ptr %dst
59*1d189309SJonas Paulsson  ret i64 %res
60*1d189309SJonas Paulsson}
61*1d189309SJonas Paulsson
62*1d189309SJonas Paulssondefine i64 @f4(i64 %a, i64 %b, double %V) {
63*1d189309SJonas Paulsson; CHECK-LABEL: f4:
64*1d189309SJonas Paulsson; CHECK: ltdbr %f0, %f0
65*1d189309SJonas Paulsson  %cond = fcmp oeq double %V, 0.0
66*1d189309SJonas Paulsson  %res = select i1 %cond, i64 %a, i64 %b
67*1d189309SJonas Paulsson  ret i64 %res
68*1d189309SJonas Paulsson}
69*1d189309SJonas Paulsson
70*1d189309SJonas Paulssondefine i64 @f4m(i64 %a, i64 %b, double %V) {
71*1d189309SJonas Paulsson; CHECK-LABEL: f4m:
72*1d189309SJonas Paulsson; CHECK: ltdbr %f0, %f0
73*1d189309SJonas Paulsson  %cond = fcmp oeq double %V, -0.0
74*1d189309SJonas Paulsson  %res = select i1 %cond, i64 %a, i64 %b
75*1d189309SJonas Paulsson  ret i64 %res
76*1d189309SJonas Paulsson}
77*1d189309SJonas Paulsson
78*1d189309SJonas Paulsson; Same for fp128
79*1d189309SJonas Paulssondefine i64 @f5(i64 %a, i64 %b, fp128 %V, ptr %dst) {
80*1d189309SJonas Paulsson; CHECK-LABEL: f5:
81*1d189309SJonas Paulsson; CHECK: ltxbr %f1, %f0
82*1d189309SJonas Paulsson  %cond = fcmp oeq fp128 %V, 0xL00000000000000008000000000000000
83*1d189309SJonas Paulsson  %res = select i1 %cond, i64 %a, i64 %b
84*1d189309SJonas Paulsson  store volatile fp128 %V, ptr %dst
85*1d189309SJonas Paulsson  ret i64 %res
86*1d189309SJonas Paulsson}
87*1d189309SJonas Paulsson
88*1d189309SJonas Paulssondefine i64 @f6(i64 %a, i64 %b, fp128 %V) {
89*1d189309SJonas Paulsson; CHECK-LABEL: f6:
90*1d189309SJonas Paulsson; CHECK: ltxbr %f0, %f0
91*1d189309SJonas Paulsson  %cond = fcmp oeq fp128 %V, 0xL00000000000000008000000000000000
92*1d189309SJonas Paulsson  %res = select i1 %cond, i64 %a, i64 %b
93*1d189309SJonas Paulsson  ret i64 %res
94*1d189309SJonas Paulsson}
95