xref: /aosp_15_r20/external/llvm/test/CodeGen/SystemZ/selectcc-02.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 { 1, 2, 3 }
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, 1879048192
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 0, i32 -1
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 { 0, 2, 3 }
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, 1879048192
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 0, i32 -1
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 { 2, 3 }
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: sll %r2, 2
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 0, i32 -1
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 { 0, 1, 3 }
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, -805306368
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 0, i32 -1
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 { 1, 3 }
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: sll %r2, 3
60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sra %r2, 31
61*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
62*9880d681SAndroid Build Coastguard Worker  %cond = fcmp oge float %a, %b
63*9880d681SAndroid Build Coastguard Worker  %res = select i1 %cond, i32 0, i32 -1
64*9880d681SAndroid Build Coastguard Worker  ret i32 %res
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; Test CC in { 0, 3 }
68*9880d681SAndroid Build Coastguard Workerdefine i32 @f6(float %a, float %b) {
69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6:
70*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: afi %r2, -268435456
72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sll %r2, 2
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sra %r2, 31
74*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
75*9880d681SAndroid Build Coastguard Worker  %cond = fcmp one float %a, %b
76*9880d681SAndroid Build Coastguard Worker  %res = select i1 %cond, i32 0, i32 -1
77*9880d681SAndroid Build Coastguard Worker  ret i32 %res
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker; Test CC in { 3 }
81*9880d681SAndroid Build Coastguard Workerdefine i32 @f7(float %a, float %b) {
82*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7:
83*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: afi %r2, 1342177280
85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sra %r2, 31
86*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
87*9880d681SAndroid Build Coastguard Worker  %cond = fcmp ord float %a, %b
88*9880d681SAndroid Build Coastguard Worker  %res = select i1 %cond, i32 0, i32 -1
89*9880d681SAndroid Build Coastguard Worker  ret i32 %res
90*9880d681SAndroid Build Coastguard Worker}
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker; Test CC in { 0, 1, 2 }
93*9880d681SAndroid Build Coastguard Workerdefine i32 @f8(float %a, float %b) {
94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8:
95*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: afi %r2, -805306368
97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sra %r2, 31
98*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
99*9880d681SAndroid Build Coastguard Worker  %cond = fcmp uno float %a, %b
100*9880d681SAndroid Build Coastguard Worker  %res = select i1 %cond, i32 0, i32 -1
101*9880d681SAndroid Build Coastguard Worker  ret i32 %res
102*9880d681SAndroid Build Coastguard Worker}
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Worker; Test CC in { 1, 2 }
105*9880d681SAndroid Build Coastguard Workerdefine i32 @f9(float %a, float %b) {
106*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9:
107*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: afi %r2, 268435456
109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sll %r2, 2
110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sra %r2, 31
111*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
112*9880d681SAndroid Build Coastguard Worker  %cond = fcmp ueq float %a, %b
113*9880d681SAndroid Build Coastguard Worker  %res = select i1 %cond, i32 0, i32 -1
114*9880d681SAndroid Build Coastguard Worker  ret i32 %res
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker; Test CC in { 0, 2 }
118*9880d681SAndroid Build Coastguard Workerdefine i32 @f10(float %a, float %b) {
119*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10:
120*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: xilf %r2, 4294967295
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 0, i32 -1
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 { 2 }
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, 1342177280
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 0, i32 -1
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 { 0, 1 }
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: afi %r2, -536870912
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 0, i32 -1
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 { 1 }
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, -268435456
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 0, i32 -1
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 { 0 }
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, -268435456
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 0, i32 -1
177*9880d681SAndroid Build Coastguard Worker  ret i32 %res
178*9880d681SAndroid Build Coastguard Worker}
179