blob: fea920f6ae16bdcf9bca81ab744dd0de94f5da49 [file] [log] [blame]
Stefan Pintilie3d763262018-07-09 13:36:14 +00001; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown \
Stefan Pintilie94259ba2018-07-12 20:18:57 +00002; RUN: -enable-ppc-quad-precision -verify-machineinstrs \
3; RUN: -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | FileCheck %s
Stefan Pintilie3d763262018-07-09 13:36:14 +00004
5@a_qp = common global fp128 0xL00000000000000000000000000000000, align 16
6@b_qp = common global fp128 0xL00000000000000000000000000000000, align 16
7
8; Function Attrs: noinline nounwind optnone
9define signext i32 @greater_qp() {
10entry:
11 %0 = load fp128, fp128* @a_qp, align 16
12 %1 = load fp128, fp128* @b_qp, align 16
13 %cmp = fcmp ogt fp128 %0, %1
14 %conv = zext i1 %cmp to i32
15 ret i32 %conv
16; CHECK-LABEL: greater_qp
17; CHECK: xscmpuqp
Stefan Pintilie94259ba2018-07-12 20:18:57 +000018; CHECK: isel r{{[0-9]+}}, r{{[0-9]+}}, r{{[0-9]+}}, gt
Stefan Pintilie3d763262018-07-09 13:36:14 +000019; CHECK: blr
20}
21
22; Function Attrs: noinline nounwind optnone
23define signext i32 @less_qp() {
24entry:
25 %0 = load fp128, fp128* @a_qp, align 16
26 %1 = load fp128, fp128* @b_qp, align 16
27 %cmp = fcmp olt fp128 %0, %1
28 %conv = zext i1 %cmp to i32
29 ret i32 %conv
30; CHECK-LABEL: less_qp
31; CHECK: xscmpuqp
Stefan Pintilie94259ba2018-07-12 20:18:57 +000032; CHECK: isel r{{[0-9]+}}, r{{[0-9]+}}, r{{[0-9]+}}, lt
Stefan Pintilie3d763262018-07-09 13:36:14 +000033; CHECK: blr
34}
35
36; Function Attrs: noinline nounwind optnone
37define signext i32 @greater_eq_qp() {
38entry:
39 %0 = load fp128, fp128* @a_qp, align 16
40 %1 = load fp128, fp128* @b_qp, align 16
41 %cmp = fcmp oge fp128 %0, %1
42 %conv = zext i1 %cmp to i32
43 ret i32 %conv
44; CHECK-LABEL: greater_eq_qp
45; CHECK: xscmpuqp
Stefan Pintilie94259ba2018-07-12 20:18:57 +000046; CHECK: cror 4*cr[[REG:[0-9]+]]+lt, un, lt
47; CHECK: isel r{{[0-9]+}}, 0, r{{[0-9]+}}, 4*cr[[REG]]+lt
Stefan Pintilie3d763262018-07-09 13:36:14 +000048; CHECK: blr
49}
50
51; Function Attrs: noinline nounwind optnone
52define signext i32 @less_eq_qp() {
53entry:
54 %0 = load fp128, fp128* @a_qp, align 16
55 %1 = load fp128, fp128* @b_qp, align 16
56 %cmp = fcmp ole fp128 %0, %1
57 %conv = zext i1 %cmp to i32
58 ret i32 %conv
59; CHECK-LABEL: less_eq_qp
60; CHECK: xscmpuqp
Stefan Pintilie94259ba2018-07-12 20:18:57 +000061; CHECK: cror 4*cr[[REG:[0-9]+]]+lt, un, gt
62; CHECK: isel r{{[0-9]+}}, 0, r{{[0-9]+}}, 4*cr[[REG]]+lt
Stefan Pintilie3d763262018-07-09 13:36:14 +000063; CHECK: blr
64}
65
66; Function Attrs: noinline nounwind optnone
67define signext i32 @equal_qp() {
68entry:
69 %0 = load fp128, fp128* @a_qp, align 16
70 %1 = load fp128, fp128* @b_qp, align 16
71 %cmp = fcmp oeq fp128 %0, %1
72 %conv = zext i1 %cmp to i32
73 ret i32 %conv
74; CHECK-LABEL: equal_qp
75; CHECK: xscmpuqp
Stefan Pintilie94259ba2018-07-12 20:18:57 +000076; CHECK: isel r{{[0-9]+}}, r{{[0-9]+}}, r{{[0-9]+}}, eq
Stefan Pintilie3d763262018-07-09 13:36:14 +000077; CHECK: blr
78}
79
80; Function Attrs: noinline nounwind optnone
81define signext i32 @not_greater_qp() {
82entry:
83 %0 = load fp128, fp128* @a_qp, align 16
84 %1 = load fp128, fp128* @b_qp, align 16
85 %cmp = fcmp ogt fp128 %0, %1
86 %lnot = xor i1 %cmp, true
87 %lnot.ext = zext i1 %lnot to i32
88 ret i32 %lnot.ext
89; CHECK-LABEL: not_greater_qp
90; CHECK: xscmpuqp
Stefan Pintilie94259ba2018-07-12 20:18:57 +000091; CHECK: isel r{{[0-9]+}}, 0, r{{[0-9]+}}, gt
Stefan Pintilie3d763262018-07-09 13:36:14 +000092; CHECK: blr
93}
94
95; Function Attrs: noinline nounwind optnone
96define signext i32 @not_less_qp() {
97entry:
98 %0 = load fp128, fp128* @a_qp, align 16
99 %1 = load fp128, fp128* @b_qp, align 16
100 %cmp = fcmp olt fp128 %0, %1
101 %lnot = xor i1 %cmp, true
102 %lnot.ext = zext i1 %lnot to i32
103 ret i32 %lnot.ext
104; CHECK-LABEL: not_less_qp
105; CHECK: xscmpuqp
Stefan Pintilie94259ba2018-07-12 20:18:57 +0000106; CHECK: isel r{{[0-9]+}}, 0, r{{[0-9]+}}, lt
Stefan Pintilie3d763262018-07-09 13:36:14 +0000107; CHECK: blr
108}
109
110; Function Attrs: noinline nounwind optnone
111define signext i32 @not_greater_eq_qp() {
112entry:
113 %0 = load fp128, fp128* @a_qp, align 16
114 %1 = load fp128, fp128* @b_qp, align 16
115 %cmp = fcmp oge fp128 %0, %1
116 %lnot = xor i1 %cmp, true
117 %lnot.ext = zext i1 %lnot to i32
118 ret i32 %lnot.ext
119; CHECK-LABEL: not_greater_eq_qp
120; CHECK: xscmpuqp
Stefan Pintilie94259ba2018-07-12 20:18:57 +0000121; CHECK: crnor 4*cr[[REG:[0-9]+]]+lt, lt, un
122; CHECK: isel r{{[0-9]+}}, 0, r{{[0-9]+}}, 4*cr[[REG]]+lt
Stefan Pintilie3d763262018-07-09 13:36:14 +0000123; CHECK: blr
124}
125
126; Function Attrs: noinline nounwind optnone
127define signext i32 @not_less_eq_qp() {
128entry:
129 %0 = load fp128, fp128* @a_qp, align 16
130 %1 = load fp128, fp128* @b_qp, align 16
131 %cmp = fcmp ole fp128 %0, %1
132 %lnot = xor i1 %cmp, true
133 %lnot.ext = zext i1 %lnot to i32
134 ret i32 %lnot.ext
135; CHECK-LABEL: not_less_eq_qp
136; CHECK: xscmpuqp
Stefan Pintilie94259ba2018-07-12 20:18:57 +0000137; CHECK: crnor 4*cr[[REG:[0-9]+]]+lt, gt, un
138; CHECK: isel r{{[0-9]+}}, 0, r{{[0-9]+}}, 4*cr[[REG]]+lt
Stefan Pintilie3d763262018-07-09 13:36:14 +0000139; CHECK: blr
140}
141
142; Function Attrs: noinline nounwind optnone
143define signext i32 @not_equal_qp() {
144entry:
145 %0 = load fp128, fp128* @a_qp, align 16
146 %1 = load fp128, fp128* @b_qp, align 16
147 %cmp = fcmp une fp128 %0, %1
148 %conv = zext i1 %cmp to i32
149 ret i32 %conv
150; CHECK-LABEL: not_equal_qp
151; CHECK: xscmpuqp
Stefan Pintilie94259ba2018-07-12 20:18:57 +0000152; CHECK: isel r{{[0-9]+}}, 0, r{{[0-9]+}}, eq
Stefan Pintilie3d763262018-07-09 13:36:14 +0000153; CHECK: blr
154}
155
156; Function Attrs: norecurse nounwind readonly
157define fp128 @greater_sel_qp() {
158entry:
159 %0 = load fp128, fp128* @a_qp, align 16
160 %1 = load fp128, fp128* @b_qp, align 16
161 %cmp = fcmp ogt fp128 %0, %1
162 %cond = select i1 %cmp, fp128 %0, fp128 %1
163 ret fp128 %cond
164; CHECK-LABEL: greater_sel_qp
Stefan Pintilie94259ba2018-07-12 20:18:57 +0000165; CHECK: xscmpuqp cr[[REG:[0-9]+]]
166; CHECK: bgtlr cr[[REG]]
Stefan Pintilie3d763262018-07-09 13:36:14 +0000167; CHECK: blr
168}
169
170; Function Attrs: noinline nounwind optnone
171define fp128 @less_sel_qp() {
172entry:
173 %0 = load fp128, fp128* @a_qp, align 16
174 %1 = load fp128, fp128* @b_qp, align 16
175 %cmp = fcmp olt fp128 %0, %1
176 %cond = select i1 %cmp, fp128 %0, fp128 %1
177 ret fp128 %cond
178; CHECK-LABEL: less_sel_qp
Stefan Pintilie94259ba2018-07-12 20:18:57 +0000179; CHECK: xscmpuqp cr[[REG:[0-9]+]]
180; CHECK: bltlr cr[[REG]]
Stefan Pintilie3d763262018-07-09 13:36:14 +0000181; CHECK: blr
182}
183
184; Function Attrs: noinline nounwind optnone
185define fp128 @greater_eq_sel_qp() {
186entry:
187 %0 = load fp128, fp128* @a_qp, align 16
188 %1 = load fp128, fp128* @b_qp, align 16
189 %cmp = fcmp oge fp128 %0, %1
190 %cond = select i1 %cmp, fp128 %0, fp128 %1
191 ret fp128 %cond
192; CHECK-LABEL: greater_eq_sel_qp
193; CHECK: xscmpuqp
Stefan Pintilie94259ba2018-07-12 20:18:57 +0000194; CHECK: crnor 4*cr[[REG:[0-9]+]]+lt, un, lt
195; CHECK: bclr {{[0-9]+}}, 4*cr[[REG]]+lt, 0
Stefan Pintilie3d763262018-07-09 13:36:14 +0000196; CHECK: blr
197}
198
199; Function Attrs: noinline nounwind optnone
200define fp128 @less_eq_sel_qp() {
201entry:
202 %0 = load fp128, fp128* @a_qp, align 16
203 %1 = load fp128, fp128* @b_qp, align 16
204 %cmp = fcmp ole fp128 %0, %1
205 %cond = select i1 %cmp, fp128 %0, fp128 %1
206 ret fp128 %cond
207; CHECK-LABEL: less_eq_sel_qp
208; CHECK: xscmpuqp
Stefan Pintilie94259ba2018-07-12 20:18:57 +0000209; CHECK: crnor 4*cr[[REG:[0-9]+]]+lt, un, gt
210; CHECK: bclr {{[0-9]+}}, 4*cr[[REG]]+lt, 0
Stefan Pintilie3d763262018-07-09 13:36:14 +0000211; CHECK: blr
212}
213
214; Function Attrs: noinline nounwind optnone
215define fp128 @equal_sel_qp() {
216entry:
217 %0 = load fp128, fp128* @a_qp, align 16
218 %1 = load fp128, fp128* @b_qp, align 16
219 %cmp = fcmp oeq fp128 %0, %1
220 %cond = select i1 %cmp, fp128 %0, fp128 %1
221 ret fp128 %cond
222; CHECK-LABEL: equal_sel_qp
Stefan Pintilie94259ba2018-07-12 20:18:57 +0000223; CHECK: xscmpuqp cr[[REG:[0-9]+]]
224; CHECK: beqlr cr[[REG]]
Stefan Pintilie3d763262018-07-09 13:36:14 +0000225; CHECK: blr
226}