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