blob: 178822277d1ac7285309aa6c8c85f6984c4204ba [file] [log] [blame]
Richard Sandifordf722a8e302013-10-16 11:10:55 +00001; Test SETCC for every floating-point condition.
2;
3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4
5; Test CC in { 0 }
6define i32 @f1(float %a, float %b) {
7; CHECK-LABEL: f1:
8; CHECK: ipm %r2
9; CHECK-NEXT: afi %r2, -268435456
10; CHECK-NEXT: srl %r2, 31
11; CHECK: br %r14
12 %cond = fcmp oeq float %a, %b
13 %res = zext i1 %cond to i32
14 ret i32 %res
15}
16
17; Test CC in { 1 }
18define i32 @f2(float %a, float %b) {
19; CHECK-LABEL: f2:
20; CHECK: ipm %r2
21; CHECK-NEXT: xilf %r2, 268435456
22; CHECK-NEXT: afi %r2, -268435456
23; CHECK-NEXT: srl %r2, 31
24; CHECK: br %r14
25 %cond = fcmp olt float %a, %b
26 %res = zext i1 %cond to i32
27 ret i32 %res
28}
29
30; Test CC in { 0, 1 }
31define i32 @f3(float %a, float %b) {
32; CHECK-LABEL: f3:
33; CHECK: ipm %r2
34; CHECK-NEXT: afi %r2, -536870912
35; CHECK-NEXT: srl %r2, 31
36; CHECK: br %r14
37 %cond = fcmp ole float %a, %b
38 %res = zext i1 %cond to i32
39 ret i32 %res
40}
41
42; Test CC in { 2 }
43define i32 @f4(float %a, float %b) {
44; CHECK-LABEL: f4:
45; CHECK: ipm %r2
46; CHECK-NEXT: xilf %r2, 268435456
47; CHECK-NEXT: afi %r2, 1342177280
48; CHECK-NEXT: srl %r2, 31
49; CHECK: br %r14
50 %cond = fcmp ogt float %a, %b
51 %res = zext i1 %cond to i32
52 ret i32 %res
53}
54
55; Test CC in { 0, 2 }
56define i32 @f5(float %a, float %b) {
57; CHECK-LABEL: f5:
58; CHECK: ipm [[REG:%r[0-5]]]
59; CHECK-NEXT: xilf [[REG]], 4294967295
60; CHECK-NEXT: risbg %r2, [[REG]], 63, 191, 36
61; CHECK: br %r14
62 %cond = fcmp oge float %a, %b
63 %res = zext i1 %cond to i32
64 ret i32 %res
65}
66
67; Test CC in { 1, 2 }
68define i32 @f6(float %a, float %b) {
69; CHECK-LABEL: f6:
70; CHECK: ipm [[REG:%r[0-5]]]
71; CHECK-NEXT: afi [[REG]], 268435456
72; CHECK-NEXT: risbg %r2, [[REG]], 63, 191, 35
73; CHECK: br %r14
74 %cond = fcmp one float %a, %b
75 %res = zext i1 %cond to i32
76 ret i32 %res
77}
78
79; Test CC in { 0, 1, 2 }
80define i32 @f7(float %a, float %b) {
81; CHECK-LABEL: f7:
82; CHECK: ipm %r2
83; CHECK-NEXT: afi %r2, -805306368
84; CHECK-NEXT: srl %r2, 31
85; CHECK: br %r14
86 %cond = fcmp ord float %a, %b
87 %res = zext i1 %cond to i32
88 ret i32 %res
89}
90
91; Test CC in { 3 }
92define i32 @f8(float %a, float %b) {
93; CHECK-LABEL: f8:
94; CHECK: ipm %r2
95; CHECK-NEXT: afi %r2, 1342177280
96; CHECK-NEXT: srl %r2, 31
97; CHECK: br %r14
98 %cond = fcmp uno float %a, %b
99 %res = zext i1 %cond to i32
100 ret i32 %res
101}
102
103; Test CC in { 0, 3 }
104define i32 @f9(float %a, float %b) {
105; CHECK-LABEL: f9:
106; CHECK: ipm [[REG:%r[0-5]]]
107; CHECK-NEXT: afi [[REG]], -268435456
108; CHECK-NEXT: risbg %r2, [[REG]], 63, 191, 35
109; CHECK: br %r14
110 %cond = fcmp ueq float %a, %b
111 %res = zext i1 %cond to i32
112 ret i32 %res
113}
114
115; Test CC in { 1, 3 }
116define i32 @f10(float %a, float %b) {
117; CHECK-LABEL: f10:
118; CHECK: ipm [[REG:%r[0-5]]]
119; CHECK-NEXT: risbg %r2, [[REG]], 63, 191, 36
120; CHECK: br %r14
121 %cond = fcmp ult float %a, %b
122 %res = zext i1 %cond to i32
123 ret i32 %res
124}
125
126; Test CC in { 0, 1, 3 }
127define i32 @f11(float %a, float %b) {
128; CHECK-LABEL: f11:
129; CHECK: ipm %r2
130; CHECK-NEXT: xilf %r2, 268435456
131; CHECK-NEXT: afi %r2, -805306368
132; CHECK-NEXT: srl %r2, 31
133; CHECK: br %r14
134 %cond = fcmp ule float %a, %b
135 %res = zext i1 %cond to i32
136 ret i32 %res
137}
138
139; Test CC in { 2, 3 }
140define i32 @f12(float %a, float %b) {
141; CHECK-LABEL: f12:
142; CHECK: ipm [[REG:%r[0-5]]]
143; CHECK-NEXT: risbg %r2, [[REG]], 63, 191, 35
144; CHECK: br %r14
145 %cond = fcmp ugt float %a, %b
146 %res = zext i1 %cond to i32
147 ret i32 %res
148}
149
150; Test CC in { 0, 2, 3 }
151define i32 @f13(float %a, float %b) {
152; CHECK-LABEL: f13:
153; CHECK: ipm %r2
154; CHECK-NEXT: xilf %r2, 268435456
155; CHECK-NEXT: afi %r2, 1879048192
156; CHECK-NEXT: srl %r2, 31
157; CHECK: br %r14
158 %cond = fcmp uge float %a, %b
159 %res = zext i1 %cond to i32
160 ret i32 %res
161}
162
163; Test CC in { 1, 2, 3 }
164define i32 @f14(float %a, float %b) {
165; CHECK-LABEL: f14:
166; CHECK: ipm %r2
167; CHECK-NEXT: afi %r2, 1879048192
168; CHECK-NEXT: srl %r2, 31
169; CHECK: br %r14
170 %cond = fcmp une float %a, %b
171 %res = zext i1 %cond to i32
172 ret i32 %res
173}