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