blob: 245c70e8905f9e925b83c75dcb87d7852f300df7 [file] [log] [blame]
Juergen Ributzkaaddb75a2014-08-21 20:57:57 +00001; RUN: llc -O0 -fast-isel-abort -verify-machineinstrs -mtriple=arm64-apple-darwin < %s | FileCheck %s
Tim Northover00ed9962014-03-29 10:18:08 +00002
3define i32 @icmp_eq_imm(i32 %a) nounwind ssp {
4entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +00005; CHECK-LABEL: icmp_eq_imm
6; CHECK: cmp w0, #31
7; CHECK-NEXT: cset w0, eq
Tim Northover00ed9962014-03-29 10:18:08 +00008 %cmp = icmp eq i32 %a, 31
9 %conv = zext i1 %cmp to i32
10 ret i32 %conv
11}
12
13define i32 @icmp_eq_neg_imm(i32 %a) nounwind ssp {
14entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +000015; CHECK-LABEL: icmp_eq_neg_imm
16; CHECK: cmn w0, #7
17; CHECK-NEXT: cset w0, eq
Tim Northover00ed9962014-03-29 10:18:08 +000018 %cmp = icmp eq i32 %a, -7
19 %conv = zext i1 %cmp to i32
20 ret i32 %conv
21}
22
Juergen Ributzkac0886dd2014-08-19 22:29:55 +000023define i32 @icmp_eq_i32(i32 %a, i32 %b) nounwind ssp {
Tim Northover00ed9962014-03-29 10:18:08 +000024entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +000025; CHECK-LABEL: icmp_eq_i32
26; CHECK: cmp w0, w1
27; CHECK-NEXT: cset w0, eq
Tim Northover00ed9962014-03-29 10:18:08 +000028 %cmp = icmp eq i32 %a, %b
29 %conv = zext i1 %cmp to i32
30 ret i32 %conv
31}
32
33define i32 @icmp_ne(i32 %a, i32 %b) nounwind ssp {
34entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +000035; CHECK-LABEL: icmp_ne
36; CHECK: cmp w0, w1
37; CHECK-NEXT: cset w0, ne
Tim Northover00ed9962014-03-29 10:18:08 +000038 %cmp = icmp ne i32 %a, %b
39 %conv = zext i1 %cmp to i32
40 ret i32 %conv
41}
42
Juergen Ributzka7ccebec2014-10-27 19:58:36 +000043define i32 @icmp_eq_ptr(i8* %a) {
44entry:
45; CHECK-LABEL: icmp_eq_ptr
46; CHECK: cmp x0, #0
47; CHECK-NEXT: cset {{.+}}, eq
48 %cmp = icmp eq i8* %a, null
49 %conv = zext i1 %cmp to i32
50 ret i32 %conv
51}
52
53define i32 @icmp_ne_ptr(i8* %a) {
54entry:
55; CHECK-LABEL: icmp_ne_ptr
56; CHECK: cmp x0, #0
57; CHECK-NEXT: cset {{.+}}, ne
58 %cmp = icmp ne i8* %a, null
59 %conv = zext i1 %cmp to i32
60 ret i32 %conv
61}
62
Tim Northover00ed9962014-03-29 10:18:08 +000063define i32 @icmp_ugt(i32 %a, i32 %b) nounwind ssp {
64entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +000065; CHECK-LABEL: icmp_ugt
66; CHECK: cmp w0, w1
67; CHECK-NEXT: cset w0, hi
Tim Northover00ed9962014-03-29 10:18:08 +000068 %cmp = icmp ugt i32 %a, %b
69 %conv = zext i1 %cmp to i32
70 ret i32 %conv
71}
72
73define i32 @icmp_uge(i32 %a, i32 %b) nounwind ssp {
74entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +000075; CHECK-LABEL: icmp_uge
76; CHECK: cmp w0, w1
77; CHECK-NEXT: cset w0, hs
Tim Northover00ed9962014-03-29 10:18:08 +000078 %cmp = icmp uge i32 %a, %b
79 %conv = zext i1 %cmp to i32
80 ret i32 %conv
81}
82
83define i32 @icmp_ult(i32 %a, i32 %b) nounwind ssp {
84entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +000085; CHECK-LABEL: icmp_ult
86; CHECK: cmp w0, w1
87; CHECK-NEXT: cset w0, lo
Tim Northover00ed9962014-03-29 10:18:08 +000088 %cmp = icmp ult i32 %a, %b
89 %conv = zext i1 %cmp to i32
90 ret i32 %conv
91}
92
93define i32 @icmp_ule(i32 %a, i32 %b) nounwind ssp {
94entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +000095; CHECK-LABEL: icmp_ule
96; CHECK: cmp w0, w1
97; CHECK-NEXT: cset w0, ls
Tim Northover00ed9962014-03-29 10:18:08 +000098 %cmp = icmp ule i32 %a, %b
99 %conv = zext i1 %cmp to i32
100 ret i32 %conv
101}
102
103define i32 @icmp_sgt(i32 %a, i32 %b) nounwind ssp {
104entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +0000105; CHECK-LABEL: icmp_sgt
106; CHECK: cmp w0, w1
107; CHECK-NEXT: cset w0, gt
Tim Northover00ed9962014-03-29 10:18:08 +0000108 %cmp = icmp sgt i32 %a, %b
109 %conv = zext i1 %cmp to i32
110 ret i32 %conv
111}
112
113define i32 @icmp_sge(i32 %a, i32 %b) nounwind ssp {
114entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +0000115; CHECK-LABEL: icmp_sge
116; CHECK: cmp w0, w1
117; CHECK-NEXT: cset w0, ge
Tim Northover00ed9962014-03-29 10:18:08 +0000118 %cmp = icmp sge i32 %a, %b
119 %conv = zext i1 %cmp to i32
120 ret i32 %conv
121}
122
123define i32 @icmp_slt(i32 %a, i32 %b) nounwind ssp {
124entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +0000125; CHECK-LABEL: icmp_slt
126; CHECK: cmp w0, w1
127; CHECK-NEXT: cset w0, lt
Tim Northover00ed9962014-03-29 10:18:08 +0000128 %cmp = icmp slt i32 %a, %b
129 %conv = zext i1 %cmp to i32
130 ret i32 %conv
131}
132
133define i32 @icmp_sle(i32 %a, i32 %b) nounwind ssp {
134entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +0000135; CHECK-LABEL: icmp_sle
136; CHECK: cmp w0, w1
137; CHECK-NEXT: cset w0, le
Tim Northover00ed9962014-03-29 10:18:08 +0000138 %cmp = icmp sle i32 %a, %b
139 %conv = zext i1 %cmp to i32
140 ret i32 %conv
141}
142
143define i32 @icmp_i64(i64 %a, i64 %b) nounwind ssp {
144entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +0000145; CHECK-LABEL: icmp_i64
146; CHECK: cmp x0, x1
147; CHECK-NEXT: cset w{{[0-9]+}}, le
Tim Northover00ed9962014-03-29 10:18:08 +0000148 %cmp = icmp sle i64 %a, %b
149 %conv = zext i1 %cmp to i32
150 ret i32 %conv
151}
152
153define zeroext i1 @icmp_eq_i16(i16 %a, i16 %b) nounwind ssp {
154entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +0000155; CHECK-LABEL: icmp_eq_i16
156; CHECK: sxth w0, w0
157; CHECK: cmp w0, w1, sxth
158; CHECK-NEXT: cset w0, eq
Tim Northover00ed9962014-03-29 10:18:08 +0000159 %cmp = icmp eq i16 %a, %b
160 ret i1 %cmp
161}
162
163define zeroext i1 @icmp_eq_i8(i8 %a, i8 %b) nounwind ssp {
164entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +0000165; CHECK-LABEL: icmp_eq_i8
166; CHECK: sxtb w0, w0
167; CHECK-NEXT: cmp w0, w1, sxtb
168; CHECK-NEXT: cset w0, eq
Tim Northover00ed9962014-03-29 10:18:08 +0000169 %cmp = icmp eq i8 %a, %b
170 ret i1 %cmp
171}
172
173define i32 @icmp_i16_unsigned(i16 %a, i16 %b) nounwind {
174entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +0000175; CHECK-LABEL: icmp_i16_unsigned
176; CHECK: uxth w0, w0
177; CHECK-NEXT: cmp w0, w1, uxth
178; CHECK-NEXT: cset w0, lo
Tim Northover00ed9962014-03-29 10:18:08 +0000179 %cmp = icmp ult i16 %a, %b
180 %conv2 = zext i1 %cmp to i32
181 ret i32 %conv2
182}
183
184define i32 @icmp_i8_signed(i8 %a, i8 %b) nounwind {
185entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +0000186; CHECK-LABEL: icmp_i8_signed
187; CHECK: sxtb w0, w0
188; CHECK-NEXT: cmp w0, w1, sxtb
189; CHECK-NEXT: cset w0, gt
Tim Northover00ed9962014-03-29 10:18:08 +0000190 %cmp = icmp sgt i8 %a, %b
191 %conv2 = zext i1 %cmp to i32
192 ret i32 %conv2
193}
194
Juergen Ributzkae1bb0552014-08-20 16:34:15 +0000195define i32 @icmp_i1_signed(i1 %a, i1 %b) nounwind {
196entry:
197; CHECK-LABEL: icmp_i1_signed
198; CHECK: sbfx [[REG1:w[0-9]+]], w0, #0, #1
199; CHECK-NEXT: sbfx [[REG2:w[0-9]+]], w1, #0, #1
200; CHECK-NEXT: cmp [[REG1]], [[REG2]]
201; CHECK-NEXT: cset w0, gt
202 %cmp = icmp sgt i1 %a, %b
203 %conv2 = zext i1 %cmp to i32
204 ret i32 %conv2
205}
Tim Northover00ed9962014-03-29 10:18:08 +0000206
207define i32 @icmp_i16_signed_const(i16 %a) nounwind {
208entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +0000209; CHECK-LABEL: icmp_i16_signed_const
210; CHECK: sxth w0, w0
211; CHECK-NEXT: cmn w0, #233
212; CHECK-NEXT: cset w0, lt
213; CHECK-NEXT: and w0, w0, #0x1
Tim Northover00ed9962014-03-29 10:18:08 +0000214 %cmp = icmp slt i16 %a, -233
215 %conv2 = zext i1 %cmp to i32
216 ret i32 %conv2
217}
218
219define i32 @icmp_i8_signed_const(i8 %a) nounwind {
220entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +0000221; CHECK-LABEL: icmp_i8_signed_const
222; CHECK: sxtb w0, w0
223; CHECK-NEXT: cmp w0, #124
224; CHECK-NEXT: cset w0, gt
225; CHECK-NEXT: and w0, w0, #0x1
Tim Northover00ed9962014-03-29 10:18:08 +0000226 %cmp = icmp sgt i8 %a, 124
227 %conv2 = zext i1 %cmp to i32
228 ret i32 %conv2
229}
230
231define i32 @icmp_i1_unsigned_const(i1 %a) nounwind {
232entry:
Juergen Ributzkac0886dd2014-08-19 22:29:55 +0000233; CHECK-LABEL: icmp_i1_unsigned_const
234; CHECK: and w0, w0, #0x1
235; CHECK-NEXT: cmp w0, #0
236; CHECK-NEXT: cset w0, lo
237; CHECK-NEXT: and w0, w0, #0x1
Tim Northover00ed9962014-03-29 10:18:08 +0000238 %cmp = icmp ult i1 %a, 0
239 %conv2 = zext i1 %cmp to i32
240 ret i32 %conv2
241}