xref: /llvm-project/llvm/test/CodeGen/SystemZ/tdc-04.ll (revision a65ccc1b9fe740c9f65d9cf2b627de50278aad56)
1; Test the Test Data Class instruction logic operation conversion from
2; signbit extraction.
3;
4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
5; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
6;
7
8; Extract sign bit.
9define i32 @f1(float %x) {
10; CHECK-LABEL: f1
11; CHECK: tceb %f0, 1365
12  %cast = bitcast float %x to i32
13  %res = icmp slt i32 %cast, 0
14  %xres = zext i1 %res to i32
15  ret i32 %xres
16}
17
18; Extract negated sign bit.
19define i32 @f2(float %x) {
20; CHECK-LABEL: f2
21; CHECK: tceb %f0, 2730
22  %cast = bitcast float %x to i32
23  %res = icmp sgt i32 %cast, -1
24  %xres = zext i1 %res to i32
25  ret i32 %xres
26}
27
28; Extract sign bit.
29define i32 @f3(double %x) {
30; CHECK-LABEL: f3
31; CHECK: tcdb %f0, 1365
32  %cast = bitcast double %x to i64
33  %res = icmp slt i64 %cast, 0
34  %xres = zext i1 %res to i32
35  ret i32 %xres
36}
37
38; Extract negated sign bit.
39define i32 @f4(double %x) {
40; CHECK-LABEL: f4
41; CHECK: tcdb %f0, 2730
42  %cast = bitcast double %x to i64
43  %res = icmp sgt i64 %cast, -1
44  %xres = zext i1 %res to i32
45  ret i32 %xres
46}
47
48; Extract sign bit.
49define i32 @f5(fp128 %x) {
50; CHECK-LABEL: f5
51; CHECK: tcxb %f0, 1365
52  %cast = bitcast fp128 %x to i128
53  %res = icmp slt i128 %cast, 0
54  %xres = zext i1 %res to i32
55  ret i32 %xres
56}
57
58; Extract negated sign bit.
59define i32 @f6(fp128 %x) {
60; CHECK-LABEL: f6
61; CHECK: tcxb %f0, 2730
62  %cast = bitcast fp128 %x to i128
63  %res = icmp sgt i128 %cast, -1
64  %xres = zext i1 %res to i32
65  ret i32 %xres
66}
67
68; Wrong const.
69define i32 @f7(float %x) {
70; CHECK-LABEL: f7
71; CHECK-NOT: tceb
72  %cast = bitcast float %x to i32
73  %res = icmp slt i32 %cast, -1
74  %xres = zext i1 %res to i32
75  ret i32 %xres
76}
77
78; Wrong pred.
79define i32 @f8(float %x) {
80; CHECK-LABEL: f8
81; CHECK-NOT: tceb
82  %cast = bitcast float %x to i32
83  %res = icmp eq i32 %cast, 0
84  %xres = zext i1 %res to i32
85  ret i32 %xres
86}
87