blob: b9b6ccb6baaf2f22229094d055c502b51ea47e47 [file] [log] [blame]
Stefan Pintilie3d763262018-07-09 13:36:14 +00001; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \
2; RUN: -enable-ppc-quad-precision -verify-machineinstrs < %s | FileCheck %s
3
4@a_qp = common global fp128 0xL00000000000000000000000000000000, align 16
5@b_qp = common global fp128 0xL00000000000000000000000000000000, align 16
6
7; Function Attrs: noinline nounwind optnone
8define signext i32 @greater_qp() {
9entry:
10 %0 = load fp128, fp128* @a_qp, align 16
11 %1 = load fp128, fp128* @b_qp, align 16
12 %cmp = fcmp ogt fp128 %0, %1
13 %conv = zext i1 %cmp to i32
14 ret i32 %conv
15; CHECK-LABEL: greater_qp
16; CHECK: xscmpuqp
17; CHECK: isel {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}, 1
18; CHECK: blr
19}
20
21; Function Attrs: noinline nounwind optnone
22define signext i32 @less_qp() {
23entry:
24 %0 = load fp128, fp128* @a_qp, align 16
25 %1 = load fp128, fp128* @b_qp, align 16
26 %cmp = fcmp olt fp128 %0, %1
27 %conv = zext i1 %cmp to i32
28 ret i32 %conv
29; CHECK-LABEL: less_qp
30; CHECK: xscmpuqp
31; CHECK: isel {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}, 0
32; CHECK: blr
33}
34
35; Function Attrs: noinline nounwind optnone
36define signext i32 @greater_eq_qp() {
37entry:
38 %0 = load fp128, fp128* @a_qp, align 16
39 %1 = load fp128, fp128* @b_qp, align 16
40 %cmp = fcmp oge fp128 %0, %1
41 %conv = zext i1 %cmp to i32
42 ret i32 %conv
43; CHECK-LABEL: greater_eq_qp
44; CHECK: xscmpuqp
45; CHECK: cror [[REG:[0-9]+]], {{[0-9]+}}, 0
46; CHECK: isel {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}, [[REG]]
47; CHECK: blr
48}
49
50; Function Attrs: noinline nounwind optnone
51define signext i32 @less_eq_qp() {
52entry:
53 %0 = load fp128, fp128* @a_qp, align 16
54 %1 = load fp128, fp128* @b_qp, align 16
55 %cmp = fcmp ole fp128 %0, %1
56 %conv = zext i1 %cmp to i32
57 ret i32 %conv
58; CHECK-LABEL: less_eq_qp
59; CHECK: xscmpuqp
60; CHECK: cror [[REG:[0-9]+]], {{[0-9]+}}, 1
61; CHECK: isel {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}, [[REG]]
62; CHECK: blr
63}
64
65; Function Attrs: noinline nounwind optnone
66define signext i32 @equal_qp() {
67entry:
68 %0 = load fp128, fp128* @a_qp, align 16
69 %1 = load fp128, fp128* @b_qp, align 16
70 %cmp = fcmp oeq fp128 %0, %1
71 %conv = zext i1 %cmp to i32
72 ret i32 %conv
73; CHECK-LABEL: equal_qp
74; CHECK: xscmpuqp
75; CHECK: isel {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}, 2
76; CHECK: blr
77}
78
79; Function Attrs: noinline nounwind optnone
80define signext i32 @not_greater_qp() {
81entry:
82 %0 = load fp128, fp128* @a_qp, align 16
83 %1 = load fp128, fp128* @b_qp, align 16
84 %cmp = fcmp ogt fp128 %0, %1
85 %lnot = xor i1 %cmp, true
86 %lnot.ext = zext i1 %lnot to i32
87 ret i32 %lnot.ext
88; CHECK-LABEL: not_greater_qp
89; CHECK: xscmpuqp
90; CHECK: isel {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}, 1
91; CHECK: blr
92}
93
94; Function Attrs: noinline nounwind optnone
95define signext i32 @not_less_qp() {
96entry:
97 %0 = load fp128, fp128* @a_qp, align 16
98 %1 = load fp128, fp128* @b_qp, align 16
99 %cmp = fcmp olt fp128 %0, %1
100 %lnot = xor i1 %cmp, true
101 %lnot.ext = zext i1 %lnot to i32
102 ret i32 %lnot.ext
103; CHECK-LABEL: not_less_qp
104; CHECK: xscmpuqp
105; CHECK: isel {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}, 0
106; CHECK: blr
107}
108
109; Function Attrs: noinline nounwind optnone
110define signext i32 @not_greater_eq_qp() {
111entry:
112 %0 = load fp128, fp128* @a_qp, align 16
113 %1 = load fp128, fp128* @b_qp, align 16
114 %cmp = fcmp oge fp128 %0, %1
115 %lnot = xor i1 %cmp, true
116 %lnot.ext = zext i1 %lnot to i32
117 ret i32 %lnot.ext
118; CHECK-LABEL: not_greater_eq_qp
119; CHECK: xscmpuqp
120; CHECK: crnor [[REG:[0-9]+]], 0, {{[0-9]+}}
121; CHECK: isel {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}, [[REG]]
122; CHECK: blr
123}
124
125; Function Attrs: noinline nounwind optnone
126define signext i32 @not_less_eq_qp() {
127entry:
128 %0 = load fp128, fp128* @a_qp, align 16
129 %1 = load fp128, fp128* @b_qp, align 16
130 %cmp = fcmp ole fp128 %0, %1
131 %lnot = xor i1 %cmp, true
132 %lnot.ext = zext i1 %lnot to i32
133 ret i32 %lnot.ext
134; CHECK-LABEL: not_less_eq_qp
135; CHECK: xscmpuqp
136; CHECK: crnor [[REG:[0-9]+]], 1, {{[0-9]+}}
137; CHECK: isel {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}, [[REG]]
138; CHECK: blr
139}
140
141; Function Attrs: noinline nounwind optnone
142define signext i32 @not_equal_qp() {
143entry:
144 %0 = load fp128, fp128* @a_qp, align 16
145 %1 = load fp128, fp128* @b_qp, align 16
146 %cmp = fcmp une fp128 %0, %1
147 %conv = zext i1 %cmp to i32
148 ret i32 %conv
149; CHECK-LABEL: not_equal_qp
150; CHECK: xscmpuqp
151; CHECK: isel {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}, 2
152; CHECK: blr
153}
154
155; Function Attrs: norecurse nounwind readonly
156define fp128 @greater_sel_qp() {
157entry:
158 %0 = load fp128, fp128* @a_qp, align 16
159 %1 = load fp128, fp128* @b_qp, align 16
160 %cmp = fcmp ogt fp128 %0, %1
161 %cond = select i1 %cmp, fp128 %0, fp128 %1
162 ret fp128 %cond
163; CHECK-LABEL: greater_sel_qp
164; CHECK: xscmpuqp [[REG:[0-9]+]]
165; CHECK: bgtlr [[REG]]
166; CHECK: blr
167}
168
169; Function Attrs: noinline nounwind optnone
170define fp128 @less_sel_qp() {
171entry:
172 %0 = load fp128, fp128* @a_qp, align 16
173 %1 = load fp128, fp128* @b_qp, align 16
174 %cmp = fcmp olt fp128 %0, %1
175 %cond = select i1 %cmp, fp128 %0, fp128 %1
176 ret fp128 %cond
177; CHECK-LABEL: less_sel_qp
178; CHECK: xscmpuqp [[REG:[0-9]+]]
179; CHECK: bltlr [[REG]]
180; CHECK: blr
181}
182
183; Function Attrs: noinline nounwind optnone
184define fp128 @greater_eq_sel_qp() {
185entry:
186 %0 = load fp128, fp128* @a_qp, align 16
187 %1 = load fp128, fp128* @b_qp, align 16
188 %cmp = fcmp oge fp128 %0, %1
189 %cond = select i1 %cmp, fp128 %0, fp128 %1
190 ret fp128 %cond
191; CHECK-LABEL: greater_eq_sel_qp
192; CHECK: xscmpuqp
193; CHECK: crnor [[REG:[0-9]+]], {{[0-9]+}}, 0
194; CHECK: bclr {{[0-9]+}}, [[REG]]
195; CHECK: blr
196}
197
198; Function Attrs: noinline nounwind optnone
199define fp128 @less_eq_sel_qp() {
200entry:
201 %0 = load fp128, fp128* @a_qp, align 16
202 %1 = load fp128, fp128* @b_qp, align 16
203 %cmp = fcmp ole fp128 %0, %1
204 %cond = select i1 %cmp, fp128 %0, fp128 %1
205 ret fp128 %cond
206; CHECK-LABEL: less_eq_sel_qp
207; CHECK: xscmpuqp
208; CHECK: crnor [[REG:[0-9]+]], {{[0-9]+}}, 1
209; CHECK: bclr {{[0-9]+}}, [[REG]]
210; CHECK: blr
211}
212
213; Function Attrs: noinline nounwind optnone
214define fp128 @equal_sel_qp() {
215entry:
216 %0 = load fp128, fp128* @a_qp, align 16
217 %1 = load fp128, fp128* @b_qp, align 16
218 %cmp = fcmp oeq fp128 %0, %1
219 %cond = select i1 %cmp, fp128 %0, fp128 %1
220 ret fp128 %cond
221; CHECK-LABEL: equal_sel_qp
222; CHECK: xscmpuqp [[REG:[0-9]+]]
223; CHECK: beqlr [[REG]]
224; CHECK: blr
225}