xref: /llvm-project/llvm/test/CodeGen/X86/cmp16.ll (revision 02e4186d0b3508e79d78b0ec844518b13a3fe9ea)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2; RUN: llc < %s -mtriple=i686-- | FileCheck %s --check-prefixes=X86,X86-GENERIC
3; RUN: llc < %s -mtriple=x86_64-- | FileCheck %s --check-prefixes=X64,X64-GENERIC
4; RUN: llc < %s -mtriple=i686-- -mattr=+fast-imm16 | FileCheck %s --check-prefixes=X86,X86-FAST
5; RUN: llc < %s -mtriple=x86_64-- -mattr=+fast-imm16 | FileCheck %s --check-prefixes=X64,X64-FAST
6; RUN: llc < %s -mtriple=i686-- -mcpu=atom | FileCheck %s --check-prefixes=X86,X86-ATOM
7; RUN: llc < %s -mtriple=x86_64-- -mcpu=atom | FileCheck %s --check-prefixes=X64,X64-ATOM
8; RUN: llc < %s -mtriple=x86_64-- -mcpu=slm | FileCheck %s --check-prefixes=X64,X64-FAST
9; RUN: llc < %s -mtriple=x86_64-- -mcpu=knl | FileCheck %s --check-prefixes=X64,X64-FAST
10; RUN: llc < %s -mtriple=x86_64-- -mcpu=btver1 | FileCheck %s --check-prefixes=X64,X64-FAST
11; RUN: llc < %s -mtriple=x86_64-- -mcpu=btver2 | FileCheck %s --check-prefixes=X64,X64-FAST
12; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver1 | FileCheck %s --check-prefixes=X64,X64-FAST
13; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver2 | FileCheck %s --check-prefixes=X64,X64-FAST
14; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver3 | FileCheck %s --check-prefixes=X64,X64-FAST
15; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver4 | FileCheck %s --check-prefixes=X64,X64-FAST
16; RUN: llc < %s -mtriple=x86_64-- -mcpu=znver5 | FileCheck %s --check-prefixes=X64,X64-FAST
17
18define i1 @cmp16_reg_eq_reg(i16 %a0, i16 %a1) {
19; X86-GENERIC-LABEL: cmp16_reg_eq_reg:
20; X86-GENERIC:       # %bb.0:
21; X86-GENERIC-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
22; X86-GENERIC-NEXT:    cmpw {{[0-9]+}}(%esp), %ax
23; X86-GENERIC-NEXT:    sete %al
24; X86-GENERIC-NEXT:    retl
25;
26; X64-GENERIC-LABEL: cmp16_reg_eq_reg:
27; X64-GENERIC:       # %bb.0:
28; X64-GENERIC-NEXT:    cmpw %si, %di
29; X64-GENERIC-NEXT:    sete %al
30; X64-GENERIC-NEXT:    retq
31;
32; X86-FAST-LABEL: cmp16_reg_eq_reg:
33; X86-FAST:       # %bb.0:
34; X86-FAST-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
35; X86-FAST-NEXT:    cmpw {{[0-9]+}}(%esp), %ax
36; X86-FAST-NEXT:    sete %al
37; X86-FAST-NEXT:    retl
38;
39; X64-FAST-LABEL: cmp16_reg_eq_reg:
40; X64-FAST:       # %bb.0:
41; X64-FAST-NEXT:    cmpw %si, %di
42; X64-FAST-NEXT:    sete %al
43; X64-FAST-NEXT:    retq
44;
45; X86-ATOM-LABEL: cmp16_reg_eq_reg:
46; X86-ATOM:       # %bb.0:
47; X86-ATOM-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
48; X86-ATOM-NEXT:    cmpw {{[0-9]+}}(%esp), %ax
49; X86-ATOM-NEXT:    sete %al
50; X86-ATOM-NEXT:    nop
51; X86-ATOM-NEXT:    nop
52; X86-ATOM-NEXT:    retl
53;
54; X64-ATOM-LABEL: cmp16_reg_eq_reg:
55; X64-ATOM:       # %bb.0:
56; X64-ATOM-NEXT:    cmpw %si, %di
57; X64-ATOM-NEXT:    sete %al
58; X64-ATOM-NEXT:    nop
59; X64-ATOM-NEXT:    nop
60; X64-ATOM-NEXT:    nop
61; X64-ATOM-NEXT:    nop
62; X64-ATOM-NEXT:    retq
63  %cmp = icmp eq i16 %a0, %a1
64  ret i1 %cmp
65}
66define i1 @cmp16_reg_eq_imm8(i16 %a0) {
67; X86-GENERIC-LABEL: cmp16_reg_eq_imm8:
68; X86-GENERIC:       # %bb.0:
69; X86-GENERIC-NEXT:    cmpw $15, {{[0-9]+}}(%esp)
70; X86-GENERIC-NEXT:    sete %al
71; X86-GENERIC-NEXT:    retl
72;
73; X64-GENERIC-LABEL: cmp16_reg_eq_imm8:
74; X64-GENERIC:       # %bb.0:
75; X64-GENERIC-NEXT:    cmpw $15, %di
76; X64-GENERIC-NEXT:    sete %al
77; X64-GENERIC-NEXT:    retq
78;
79; X86-FAST-LABEL: cmp16_reg_eq_imm8:
80; X86-FAST:       # %bb.0:
81; X86-FAST-NEXT:    cmpw $15, {{[0-9]+}}(%esp)
82; X86-FAST-NEXT:    sete %al
83; X86-FAST-NEXT:    retl
84;
85; X64-FAST-LABEL: cmp16_reg_eq_imm8:
86; X64-FAST:       # %bb.0:
87; X64-FAST-NEXT:    cmpw $15, %di
88; X64-FAST-NEXT:    sete %al
89; X64-FAST-NEXT:    retq
90;
91; X86-ATOM-LABEL: cmp16_reg_eq_imm8:
92; X86-ATOM:       # %bb.0:
93; X86-ATOM-NEXT:    cmpw $15, {{[0-9]+}}(%esp)
94; X86-ATOM-NEXT:    sete %al
95; X86-ATOM-NEXT:    nop
96; X86-ATOM-NEXT:    nop
97; X86-ATOM-NEXT:    nop
98; X86-ATOM-NEXT:    nop
99; X86-ATOM-NEXT:    retl
100;
101; X64-ATOM-LABEL: cmp16_reg_eq_imm8:
102; X64-ATOM:       # %bb.0:
103; X64-ATOM-NEXT:    cmpw $15, %di
104; X64-ATOM-NEXT:    sete %al
105; X64-ATOM-NEXT:    nop
106; X64-ATOM-NEXT:    nop
107; X64-ATOM-NEXT:    nop
108; X64-ATOM-NEXT:    nop
109; X64-ATOM-NEXT:    retq
110  %cmp = icmp eq i16 %a0, 15
111  ret i1 %cmp
112}
113
114define i1 @cmp16_reg_eq_imm16(i16 %a0) {
115; X86-GENERIC-LABEL: cmp16_reg_eq_imm16:
116; X86-GENERIC:       # %bb.0:
117; X86-GENERIC-NEXT:    cmpw $1024, {{[0-9]+}}(%esp) # imm = 0x400
118; X86-GENERIC-NEXT:    sete %al
119; X86-GENERIC-NEXT:    retl
120;
121; X64-GENERIC-LABEL: cmp16_reg_eq_imm16:
122; X64-GENERIC:       # %bb.0:
123; X64-GENERIC-NEXT:    movzwl %di, %eax
124; X64-GENERIC-NEXT:    cmpl $1024, %eax # imm = 0x400
125; X64-GENERIC-NEXT:    sete %al
126; X64-GENERIC-NEXT:    retq
127;
128; X86-FAST-LABEL: cmp16_reg_eq_imm16:
129; X86-FAST:       # %bb.0:
130; X86-FAST-NEXT:    cmpw $1024, {{[0-9]+}}(%esp) # imm = 0x400
131; X86-FAST-NEXT:    sete %al
132; X86-FAST-NEXT:    retl
133;
134; X64-FAST-LABEL: cmp16_reg_eq_imm16:
135; X64-FAST:       # %bb.0:
136; X64-FAST-NEXT:    cmpw $1024, %di # imm = 0x400
137; X64-FAST-NEXT:    sete %al
138; X64-FAST-NEXT:    retq
139;
140; X86-ATOM-LABEL: cmp16_reg_eq_imm16:
141; X86-ATOM:       # %bb.0:
142; X86-ATOM-NEXT:    cmpw $1024, {{[0-9]+}}(%esp) # imm = 0x400
143; X86-ATOM-NEXT:    sete %al
144; X86-ATOM-NEXT:    nop
145; X86-ATOM-NEXT:    nop
146; X86-ATOM-NEXT:    nop
147; X86-ATOM-NEXT:    nop
148; X86-ATOM-NEXT:    retl
149;
150; X64-ATOM-LABEL: cmp16_reg_eq_imm16:
151; X64-ATOM:       # %bb.0:
152; X64-ATOM-NEXT:    cmpw $1024, %di # imm = 0x400
153; X64-ATOM-NEXT:    sete %al
154; X64-ATOM-NEXT:    nop
155; X64-ATOM-NEXT:    nop
156; X64-ATOM-NEXT:    nop
157; X64-ATOM-NEXT:    nop
158; X64-ATOM-NEXT:    retq
159  %cmp = icmp eq i16 %a0, 1024
160  ret i1 %cmp
161}
162
163define i1 @cmp16_reg_eq_imm16_minsize(i16 %a0) minsize {
164; X86-LABEL: cmp16_reg_eq_imm16_minsize:
165; X86:       # %bb.0:
166; X86-NEXT:    cmpw $1024, {{[0-9]+}}(%esp) # imm = 0x400
167; X86-NEXT:    sete %al
168; X86-NEXT:    retl
169;
170; X64-LABEL: cmp16_reg_eq_imm16_minsize:
171; X64:       # %bb.0:
172; X64-NEXT:    cmpw $1024, %di # imm = 0x400
173; X64-NEXT:    sete %al
174; X64-NEXT:    retq
175  %cmp = icmp eq i16 %a0, 1024
176  ret i1 %cmp
177}
178
179define i1 @cmp16_reg_eq_imm16_optsize(i16 %a0) optsize {
180; X86-LABEL: cmp16_reg_eq_imm16_optsize:
181; X86:       # %bb.0:
182; X86-NEXT:    cmpw $1024, {{[0-9]+}}(%esp) # imm = 0x400
183; X86-NEXT:    sete %al
184; X86-NEXT:    retl
185;
186; X64-GENERIC-LABEL: cmp16_reg_eq_imm16_optsize:
187; X64-GENERIC:       # %bb.0:
188; X64-GENERIC-NEXT:    movzwl %di, %eax
189; X64-GENERIC-NEXT:    cmpl $1024, %eax # imm = 0x400
190; X64-GENERIC-NEXT:    sete %al
191; X64-GENERIC-NEXT:    retq
192;
193; X64-FAST-LABEL: cmp16_reg_eq_imm16_optsize:
194; X64-FAST:       # %bb.0:
195; X64-FAST-NEXT:    cmpw $1024, %di # imm = 0x400
196; X64-FAST-NEXT:    sete %al
197; X64-FAST-NEXT:    retq
198;
199; X64-ATOM-LABEL: cmp16_reg_eq_imm16_optsize:
200; X64-ATOM:       # %bb.0:
201; X64-ATOM-NEXT:    cmpw $1024, %di # imm = 0x400
202; X64-ATOM-NEXT:    sete %al
203; X64-ATOM-NEXT:    retq
204  %cmp = icmp eq i16 %a0, 1024
205  ret i1 %cmp
206}
207
208define i1 @cmp16_reg_sgt_imm8(i16 %a0) {
209; X86-GENERIC-LABEL: cmp16_reg_sgt_imm8:
210; X86-GENERIC:       # %bb.0:
211; X86-GENERIC-NEXT:    cmpw $16, {{[0-9]+}}(%esp)
212; X86-GENERIC-NEXT:    setge %al
213; X86-GENERIC-NEXT:    retl
214;
215; X64-GENERIC-LABEL: cmp16_reg_sgt_imm8:
216; X64-GENERIC:       # %bb.0:
217; X64-GENERIC-NEXT:    cmpw $16, %di
218; X64-GENERIC-NEXT:    setge %al
219; X64-GENERIC-NEXT:    retq
220;
221; X86-FAST-LABEL: cmp16_reg_sgt_imm8:
222; X86-FAST:       # %bb.0:
223; X86-FAST-NEXT:    cmpw $16, {{[0-9]+}}(%esp)
224; X86-FAST-NEXT:    setge %al
225; X86-FAST-NEXT:    retl
226;
227; X64-FAST-LABEL: cmp16_reg_sgt_imm8:
228; X64-FAST:       # %bb.0:
229; X64-FAST-NEXT:    cmpw $16, %di
230; X64-FAST-NEXT:    setge %al
231; X64-FAST-NEXT:    retq
232;
233; X86-ATOM-LABEL: cmp16_reg_sgt_imm8:
234; X86-ATOM:       # %bb.0:
235; X86-ATOM-NEXT:    cmpw $16, {{[0-9]+}}(%esp)
236; X86-ATOM-NEXT:    setge %al
237; X86-ATOM-NEXT:    nop
238; X86-ATOM-NEXT:    nop
239; X86-ATOM-NEXT:    nop
240; X86-ATOM-NEXT:    nop
241; X86-ATOM-NEXT:    retl
242;
243; X64-ATOM-LABEL: cmp16_reg_sgt_imm8:
244; X64-ATOM:       # %bb.0:
245; X64-ATOM-NEXT:    cmpw $16, %di
246; X64-ATOM-NEXT:    setge %al
247; X64-ATOM-NEXT:    nop
248; X64-ATOM-NEXT:    nop
249; X64-ATOM-NEXT:    nop
250; X64-ATOM-NEXT:    nop
251; X64-ATOM-NEXT:    retq
252  %cmp = icmp sgt i16 %a0, 15
253  ret i1 %cmp
254}
255
256define i1 @cmp16_reg_sgt_imm16(i16 %a0) {
257; X86-GENERIC-LABEL: cmp16_reg_sgt_imm16:
258; X86-GENERIC:       # %bb.0:
259; X86-GENERIC-NEXT:    cmpw $-1023, {{[0-9]+}}(%esp) # imm = 0xFC01
260; X86-GENERIC-NEXT:    setge %al
261; X86-GENERIC-NEXT:    retl
262;
263; X64-GENERIC-LABEL: cmp16_reg_sgt_imm16:
264; X64-GENERIC:       # %bb.0:
265; X64-GENERIC-NEXT:    movswl %di, %eax
266; X64-GENERIC-NEXT:    cmpl $-1023, %eax # imm = 0xFC01
267; X64-GENERIC-NEXT:    setge %al
268; X64-GENERIC-NEXT:    retq
269;
270; X86-FAST-LABEL: cmp16_reg_sgt_imm16:
271; X86-FAST:       # %bb.0:
272; X86-FAST-NEXT:    cmpw $-1023, {{[0-9]+}}(%esp) # imm = 0xFC01
273; X86-FAST-NEXT:    setge %al
274; X86-FAST-NEXT:    retl
275;
276; X64-FAST-LABEL: cmp16_reg_sgt_imm16:
277; X64-FAST:       # %bb.0:
278; X64-FAST-NEXT:    cmpw $-1023, %di # imm = 0xFC01
279; X64-FAST-NEXT:    setge %al
280; X64-FAST-NEXT:    retq
281;
282; X86-ATOM-LABEL: cmp16_reg_sgt_imm16:
283; X86-ATOM:       # %bb.0:
284; X86-ATOM-NEXT:    cmpw $-1023, {{[0-9]+}}(%esp) # imm = 0xFC01
285; X86-ATOM-NEXT:    setge %al
286; X86-ATOM-NEXT:    nop
287; X86-ATOM-NEXT:    nop
288; X86-ATOM-NEXT:    nop
289; X86-ATOM-NEXT:    nop
290; X86-ATOM-NEXT:    retl
291;
292; X64-ATOM-LABEL: cmp16_reg_sgt_imm16:
293; X64-ATOM:       # %bb.0:
294; X64-ATOM-NEXT:    cmpw $-1023, %di # imm = 0xFC01
295; X64-ATOM-NEXT:    setge %al
296; X64-ATOM-NEXT:    nop
297; X64-ATOM-NEXT:    nop
298; X64-ATOM-NEXT:    nop
299; X64-ATOM-NEXT:    nop
300; X64-ATOM-NEXT:    retq
301  %cmp = icmp sgt i16 %a0, -1024
302  ret i1 %cmp
303}
304
305define i1 @cmp16_reg_sgt_imm16_minsize(i16 %a0) minsize {
306; X86-LABEL: cmp16_reg_sgt_imm16_minsize:
307; X86:       # %bb.0:
308; X86-NEXT:    cmpw $-1023, {{[0-9]+}}(%esp) # imm = 0xFC01
309; X86-NEXT:    setge %al
310; X86-NEXT:    retl
311;
312; X64-LABEL: cmp16_reg_sgt_imm16_minsize:
313; X64:       # %bb.0:
314; X64-NEXT:    cmpw $-1023, %di # imm = 0xFC01
315; X64-NEXT:    setge %al
316; X64-NEXT:    retq
317  %cmp = icmp sgt i16 %a0, -1024
318  ret i1 %cmp
319}
320
321define i1 @cmp16_reg_sgt_imm16_optsize(i16 %a0) optsize {
322; X86-LABEL: cmp16_reg_sgt_imm16_optsize:
323; X86:       # %bb.0:
324; X86-NEXT:    cmpw $-1023, {{[0-9]+}}(%esp) # imm = 0xFC01
325; X86-NEXT:    setge %al
326; X86-NEXT:    retl
327;
328; X64-GENERIC-LABEL: cmp16_reg_sgt_imm16_optsize:
329; X64-GENERIC:       # %bb.0:
330; X64-GENERIC-NEXT:    movswl %di, %eax
331; X64-GENERIC-NEXT:    cmpl $-1023, %eax # imm = 0xFC01
332; X64-GENERIC-NEXT:    setge %al
333; X64-GENERIC-NEXT:    retq
334;
335; X64-FAST-LABEL: cmp16_reg_sgt_imm16_optsize:
336; X64-FAST:       # %bb.0:
337; X64-FAST-NEXT:    cmpw $-1023, %di # imm = 0xFC01
338; X64-FAST-NEXT:    setge %al
339; X64-FAST-NEXT:    retq
340;
341; X64-ATOM-LABEL: cmp16_reg_sgt_imm16_optsize:
342; X64-ATOM:       # %bb.0:
343; X64-ATOM-NEXT:    cmpw $-1023, %di # imm = 0xFC01
344; X64-ATOM-NEXT:    setge %al
345; X64-ATOM-NEXT:    retq
346  %cmp = icmp sgt i16 %a0, -1024
347  ret i1 %cmp
348}
349
350define i1 @cmp16_reg_uge_imm16(i16 %a0) {
351; X86-GENERIC-LABEL: cmp16_reg_uge_imm16:
352; X86-GENERIC:       # %bb.0:
353; X86-GENERIC-NEXT:    cmpw $-1024, {{[0-9]+}}(%esp) # imm = 0xFC00
354; X86-GENERIC-NEXT:    setae %al
355; X86-GENERIC-NEXT:    retl
356;
357; X64-GENERIC-LABEL: cmp16_reg_uge_imm16:
358; X64-GENERIC:       # %bb.0:
359; X64-GENERIC-NEXT:    movzwl %di, %eax
360; X64-GENERIC-NEXT:    cmpl $64512, %eax # imm = 0xFC00
361; X64-GENERIC-NEXT:    setae %al
362; X64-GENERIC-NEXT:    retq
363;
364; X86-FAST-LABEL: cmp16_reg_uge_imm16:
365; X86-FAST:       # %bb.0:
366; X86-FAST-NEXT:    cmpw $-1024, {{[0-9]+}}(%esp) # imm = 0xFC00
367; X86-FAST-NEXT:    setae %al
368; X86-FAST-NEXT:    retl
369;
370; X64-FAST-LABEL: cmp16_reg_uge_imm16:
371; X64-FAST:       # %bb.0:
372; X64-FAST-NEXT:    cmpw $-1024, %di # imm = 0xFC00
373; X64-FAST-NEXT:    setae %al
374; X64-FAST-NEXT:    retq
375;
376; X86-ATOM-LABEL: cmp16_reg_uge_imm16:
377; X86-ATOM:       # %bb.0:
378; X86-ATOM-NEXT:    cmpw $-1024, {{[0-9]+}}(%esp) # imm = 0xFC00
379; X86-ATOM-NEXT:    setae %al
380; X86-ATOM-NEXT:    nop
381; X86-ATOM-NEXT:    nop
382; X86-ATOM-NEXT:    nop
383; X86-ATOM-NEXT:    nop
384; X86-ATOM-NEXT:    retl
385;
386; X64-ATOM-LABEL: cmp16_reg_uge_imm16:
387; X64-ATOM:       # %bb.0:
388; X64-ATOM-NEXT:    cmpw $-1024, %di # imm = 0xFC00
389; X64-ATOM-NEXT:    setae %al
390; X64-ATOM-NEXT:    nop
391; X64-ATOM-NEXT:    nop
392; X64-ATOM-NEXT:    nop
393; X64-ATOM-NEXT:    nop
394; X64-ATOM-NEXT:    retq
395  %cmp = icmp uge i16 %a0, -1024
396  ret i1 %cmp
397}
398
399define i1 @cmp16_reg_uge_imm16_minsize(i16 %a0) minsize {
400; X86-LABEL: cmp16_reg_uge_imm16_minsize:
401; X86:       # %bb.0:
402; X86-NEXT:    cmpw $-1024, {{[0-9]+}}(%esp) # imm = 0xFC00
403; X86-NEXT:    setae %al
404; X86-NEXT:    retl
405;
406; X64-LABEL: cmp16_reg_uge_imm16_minsize:
407; X64:       # %bb.0:
408; X64-NEXT:    cmpw $-1024, %di # imm = 0xFC00
409; X64-NEXT:    setae %al
410; X64-NEXT:    retq
411  %cmp = icmp uge i16 %a0, -1024
412  ret i1 %cmp
413}
414
415define i1 @cmp16_reg_uge_imm16_optsize(i16 %a0) optsize {
416; X86-LABEL: cmp16_reg_uge_imm16_optsize:
417; X86:       # %bb.0:
418; X86-NEXT:    cmpw $-1024, {{[0-9]+}}(%esp) # imm = 0xFC00
419; X86-NEXT:    setae %al
420; X86-NEXT:    retl
421;
422; X64-GENERIC-LABEL: cmp16_reg_uge_imm16_optsize:
423; X64-GENERIC:       # %bb.0:
424; X64-GENERIC-NEXT:    movzwl %di, %eax
425; X64-GENERIC-NEXT:    cmpl $64512, %eax # imm = 0xFC00
426; X64-GENERIC-NEXT:    setae %al
427; X64-GENERIC-NEXT:    retq
428;
429; X64-FAST-LABEL: cmp16_reg_uge_imm16_optsize:
430; X64-FAST:       # %bb.0:
431; X64-FAST-NEXT:    cmpw $-1024, %di # imm = 0xFC00
432; X64-FAST-NEXT:    setae %al
433; X64-FAST-NEXT:    retq
434;
435; X64-ATOM-LABEL: cmp16_reg_uge_imm16_optsize:
436; X64-ATOM:       # %bb.0:
437; X64-ATOM-NEXT:    cmpw $-1024, %di # imm = 0xFC00
438; X64-ATOM-NEXT:    setae %al
439; X64-ATOM-NEXT:    retq
440  %cmp = icmp uge i16 %a0, -1024
441  ret i1 %cmp
442}
443
444define i1 @cmp16_load_ne_load(ptr %p0, ptr %p1) {
445; X86-GENERIC-LABEL: cmp16_load_ne_load:
446; X86-GENERIC:       # %bb.0:
447; X86-GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
448; X86-GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
449; X86-GENERIC-NEXT:    movzwl (%ecx), %ecx
450; X86-GENERIC-NEXT:    cmpw (%eax), %cx
451; X86-GENERIC-NEXT:    setne %al
452; X86-GENERIC-NEXT:    retl
453;
454; X64-GENERIC-LABEL: cmp16_load_ne_load:
455; X64-GENERIC:       # %bb.0:
456; X64-GENERIC-NEXT:    movzwl (%rdi), %eax
457; X64-GENERIC-NEXT:    cmpw (%rsi), %ax
458; X64-GENERIC-NEXT:    setne %al
459; X64-GENERIC-NEXT:    retq
460;
461; X86-FAST-LABEL: cmp16_load_ne_load:
462; X86-FAST:       # %bb.0:
463; X86-FAST-NEXT:    movl {{[0-9]+}}(%esp), %eax
464; X86-FAST-NEXT:    movl {{[0-9]+}}(%esp), %ecx
465; X86-FAST-NEXT:    movzwl (%ecx), %ecx
466; X86-FAST-NEXT:    cmpw (%eax), %cx
467; X86-FAST-NEXT:    setne %al
468; X86-FAST-NEXT:    retl
469;
470; X64-FAST-LABEL: cmp16_load_ne_load:
471; X64-FAST:       # %bb.0:
472; X64-FAST-NEXT:    movzwl (%rdi), %eax
473; X64-FAST-NEXT:    cmpw (%rsi), %ax
474; X64-FAST-NEXT:    setne %al
475; X64-FAST-NEXT:    retq
476;
477; X86-ATOM-LABEL: cmp16_load_ne_load:
478; X86-ATOM:       # %bb.0:
479; X86-ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx
480; X86-ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax
481; X86-ATOM-NEXT:    movzwl (%ecx), %ecx
482; X86-ATOM-NEXT:    cmpw (%eax), %cx
483; X86-ATOM-NEXT:    setne %al
484; X86-ATOM-NEXT:    retl
485;
486; X64-ATOM-LABEL: cmp16_load_ne_load:
487; X64-ATOM:       # %bb.0:
488; X64-ATOM-NEXT:    movzwl (%rdi), %eax
489; X64-ATOM-NEXT:    cmpw (%rsi), %ax
490; X64-ATOM-NEXT:    setne %al
491; X64-ATOM-NEXT:    nop
492; X64-ATOM-NEXT:    nop
493; X64-ATOM-NEXT:    retq
494  %ld0 = load i16, ptr %p0
495  %ld1 = load i16, ptr %p1
496  %cmp = icmp ne i16 %ld0, %ld1
497  ret i1 %cmp
498}
499
500define i1 @cmp16_load_ne_imm8(ptr %p0) {
501; X86-GENERIC-LABEL: cmp16_load_ne_imm8:
502; X86-GENERIC:       # %bb.0:
503; X86-GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
504; X86-GENERIC-NEXT:    cmpw $15, (%eax)
505; X86-GENERIC-NEXT:    setne %al
506; X86-GENERIC-NEXT:    retl
507;
508; X64-GENERIC-LABEL: cmp16_load_ne_imm8:
509; X64-GENERIC:       # %bb.0:
510; X64-GENERIC-NEXT:    cmpw $15, (%rdi)
511; X64-GENERIC-NEXT:    setne %al
512; X64-GENERIC-NEXT:    retq
513;
514; X86-FAST-LABEL: cmp16_load_ne_imm8:
515; X86-FAST:       # %bb.0:
516; X86-FAST-NEXT:    movl {{[0-9]+}}(%esp), %eax
517; X86-FAST-NEXT:    cmpw $15, (%eax)
518; X86-FAST-NEXT:    setne %al
519; X86-FAST-NEXT:    retl
520;
521; X64-FAST-LABEL: cmp16_load_ne_imm8:
522; X64-FAST:       # %bb.0:
523; X64-FAST-NEXT:    cmpw $15, (%rdi)
524; X64-FAST-NEXT:    setne %al
525; X64-FAST-NEXT:    retq
526;
527; X86-ATOM-LABEL: cmp16_load_ne_imm8:
528; X86-ATOM:       # %bb.0:
529; X86-ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax
530; X86-ATOM-NEXT:    cmpw $15, (%eax)
531; X86-ATOM-NEXT:    setne %al
532; X86-ATOM-NEXT:    nop
533; X86-ATOM-NEXT:    nop
534; X86-ATOM-NEXT:    retl
535;
536; X64-ATOM-LABEL: cmp16_load_ne_imm8:
537; X64-ATOM:       # %bb.0:
538; X64-ATOM-NEXT:    cmpw $15, (%rdi)
539; X64-ATOM-NEXT:    setne %al
540; X64-ATOM-NEXT:    nop
541; X64-ATOM-NEXT:    nop
542; X64-ATOM-NEXT:    nop
543; X64-ATOM-NEXT:    nop
544; X64-ATOM-NEXT:    retq
545  %ld = load i16, ptr %p0
546  %cmp = icmp ne i16 %ld, 15
547  ret i1 %cmp
548}
549
550define i1 @cmp16_load_ne_imm16(ptr %p0) {
551; X86-GENERIC-LABEL: cmp16_load_ne_imm16:
552; X86-GENERIC:       # %bb.0:
553; X86-GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
554; X86-GENERIC-NEXT:    cmpw $512, (%eax) # imm = 0x200
555; X86-GENERIC-NEXT:    setne %al
556; X86-GENERIC-NEXT:    retl
557;
558; X64-GENERIC-LABEL: cmp16_load_ne_imm16:
559; X64-GENERIC:       # %bb.0:
560; X64-GENERIC-NEXT:    cmpw $512, (%rdi) # imm = 0x200
561; X64-GENERIC-NEXT:    setne %al
562; X64-GENERIC-NEXT:    retq
563;
564; X86-FAST-LABEL: cmp16_load_ne_imm16:
565; X86-FAST:       # %bb.0:
566; X86-FAST-NEXT:    movl {{[0-9]+}}(%esp), %eax
567; X86-FAST-NEXT:    cmpw $512, (%eax) # imm = 0x200
568; X86-FAST-NEXT:    setne %al
569; X86-FAST-NEXT:    retl
570;
571; X64-FAST-LABEL: cmp16_load_ne_imm16:
572; X64-FAST:       # %bb.0:
573; X64-FAST-NEXT:    cmpw $512, (%rdi) # imm = 0x200
574; X64-FAST-NEXT:    setne %al
575; X64-FAST-NEXT:    retq
576;
577; X86-ATOM-LABEL: cmp16_load_ne_imm16:
578; X86-ATOM:       # %bb.0:
579; X86-ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax
580; X86-ATOM-NEXT:    cmpw $512, (%eax) # imm = 0x200
581; X86-ATOM-NEXT:    setne %al
582; X86-ATOM-NEXT:    nop
583; X86-ATOM-NEXT:    nop
584; X86-ATOM-NEXT:    retl
585;
586; X64-ATOM-LABEL: cmp16_load_ne_imm16:
587; X64-ATOM:       # %bb.0:
588; X64-ATOM-NEXT:    cmpw $512, (%rdi) # imm = 0x200
589; X64-ATOM-NEXT:    setne %al
590; X64-ATOM-NEXT:    nop
591; X64-ATOM-NEXT:    nop
592; X64-ATOM-NEXT:    nop
593; X64-ATOM-NEXT:    nop
594; X64-ATOM-NEXT:    retq
595  %ld = load i16, ptr %p0
596  %cmp = icmp ne i16 %ld, 512
597  ret i1 %cmp
598}
599
600define i1 @cmp16_load_slt_imm8(ptr %p0) {
601; X86-GENERIC-LABEL: cmp16_load_slt_imm8:
602; X86-GENERIC:       # %bb.0:
603; X86-GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
604; X86-GENERIC-NEXT:    cmpw $15, (%eax)
605; X86-GENERIC-NEXT:    setl %al
606; X86-GENERIC-NEXT:    retl
607;
608; X64-GENERIC-LABEL: cmp16_load_slt_imm8:
609; X64-GENERIC:       # %bb.0:
610; X64-GENERIC-NEXT:    cmpw $15, (%rdi)
611; X64-GENERIC-NEXT:    setl %al
612; X64-GENERIC-NEXT:    retq
613;
614; X86-FAST-LABEL: cmp16_load_slt_imm8:
615; X86-FAST:       # %bb.0:
616; X86-FAST-NEXT:    movl {{[0-9]+}}(%esp), %eax
617; X86-FAST-NEXT:    cmpw $15, (%eax)
618; X86-FAST-NEXT:    setl %al
619; X86-FAST-NEXT:    retl
620;
621; X64-FAST-LABEL: cmp16_load_slt_imm8:
622; X64-FAST:       # %bb.0:
623; X64-FAST-NEXT:    cmpw $15, (%rdi)
624; X64-FAST-NEXT:    setl %al
625; X64-FAST-NEXT:    retq
626;
627; X86-ATOM-LABEL: cmp16_load_slt_imm8:
628; X86-ATOM:       # %bb.0:
629; X86-ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax
630; X86-ATOM-NEXT:    cmpw $15, (%eax)
631; X86-ATOM-NEXT:    setl %al
632; X86-ATOM-NEXT:    nop
633; X86-ATOM-NEXT:    nop
634; X86-ATOM-NEXT:    retl
635;
636; X64-ATOM-LABEL: cmp16_load_slt_imm8:
637; X64-ATOM:       # %bb.0:
638; X64-ATOM-NEXT:    cmpw $15, (%rdi)
639; X64-ATOM-NEXT:    setl %al
640; X64-ATOM-NEXT:    nop
641; X64-ATOM-NEXT:    nop
642; X64-ATOM-NEXT:    nop
643; X64-ATOM-NEXT:    nop
644; X64-ATOM-NEXT:    retq
645  %ld = load i16, ptr %p0
646  %cmp = icmp slt i16 %ld, 15
647  ret i1 %cmp
648}
649
650define i1 @cmp16_load_slt_imm16(ptr %p0) {
651; X86-GENERIC-LABEL: cmp16_load_slt_imm16:
652; X86-GENERIC:       # %bb.0:
653; X86-GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
654; X86-GENERIC-NEXT:    cmpw $512, (%eax) # imm = 0x200
655; X86-GENERIC-NEXT:    setl %al
656; X86-GENERIC-NEXT:    retl
657;
658; X64-GENERIC-LABEL: cmp16_load_slt_imm16:
659; X64-GENERIC:       # %bb.0:
660; X64-GENERIC-NEXT:    cmpw $512, (%rdi) # imm = 0x200
661; X64-GENERIC-NEXT:    setl %al
662; X64-GENERIC-NEXT:    retq
663;
664; X86-FAST-LABEL: cmp16_load_slt_imm16:
665; X86-FAST:       # %bb.0:
666; X86-FAST-NEXT:    movl {{[0-9]+}}(%esp), %eax
667; X86-FAST-NEXT:    cmpw $512, (%eax) # imm = 0x200
668; X86-FAST-NEXT:    setl %al
669; X86-FAST-NEXT:    retl
670;
671; X64-FAST-LABEL: cmp16_load_slt_imm16:
672; X64-FAST:       # %bb.0:
673; X64-FAST-NEXT:    cmpw $512, (%rdi) # imm = 0x200
674; X64-FAST-NEXT:    setl %al
675; X64-FAST-NEXT:    retq
676;
677; X86-ATOM-LABEL: cmp16_load_slt_imm16:
678; X86-ATOM:       # %bb.0:
679; X86-ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax
680; X86-ATOM-NEXT:    cmpw $512, (%eax) # imm = 0x200
681; X86-ATOM-NEXT:    setl %al
682; X86-ATOM-NEXT:    nop
683; X86-ATOM-NEXT:    nop
684; X86-ATOM-NEXT:    retl
685;
686; X64-ATOM-LABEL: cmp16_load_slt_imm16:
687; X64-ATOM:       # %bb.0:
688; X64-ATOM-NEXT:    cmpw $512, (%rdi) # imm = 0x200
689; X64-ATOM-NEXT:    setl %al
690; X64-ATOM-NEXT:    nop
691; X64-ATOM-NEXT:    nop
692; X64-ATOM-NEXT:    nop
693; X64-ATOM-NEXT:    nop
694; X64-ATOM-NEXT:    retq
695  %ld = load i16, ptr %p0
696  %cmp = icmp slt i16 %ld, 512
697  ret i1 %cmp
698}
699
700define i1 @cmp16_load_slt_imm16_minsize(ptr %p0) minsize {
701; X86-LABEL: cmp16_load_slt_imm16_minsize:
702; X86:       # %bb.0:
703; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
704; X86-NEXT:    cmpw $512, (%eax) # imm = 0x200
705; X86-NEXT:    setl %al
706; X86-NEXT:    retl
707;
708; X64-LABEL: cmp16_load_slt_imm16_minsize:
709; X64:       # %bb.0:
710; X64-NEXT:    cmpw $512, (%rdi) # imm = 0x200
711; X64-NEXT:    setl %al
712; X64-NEXT:    retq
713  %ld = load i16, ptr %p0
714  %cmp = icmp slt i16 %ld, 512
715  ret i1 %cmp
716}
717
718define i1 @cmp16_load_slt_imm16_optsize(ptr %p0) optsize {
719; X86-LABEL: cmp16_load_slt_imm16_optsize:
720; X86:       # %bb.0:
721; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
722; X86-NEXT:    cmpw $512, (%eax) # imm = 0x200
723; X86-NEXT:    setl %al
724; X86-NEXT:    retl
725;
726; X64-LABEL: cmp16_load_slt_imm16_optsize:
727; X64:       # %bb.0:
728; X64-NEXT:    cmpw $512, (%rdi) # imm = 0x200
729; X64-NEXT:    setl %al
730; X64-NEXT:    retq
731  %ld = load i16, ptr %p0
732  %cmp = icmp slt i16 %ld, 512
733  ret i1 %cmp
734}
735
736define i1 @cmp16_load_ule_imm8(ptr %p0) {
737; X86-GENERIC-LABEL: cmp16_load_ule_imm8:
738; X86-GENERIC:       # %bb.0:
739; X86-GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
740; X86-GENERIC-NEXT:    cmpw $16, (%eax)
741; X86-GENERIC-NEXT:    setb %al
742; X86-GENERIC-NEXT:    retl
743;
744; X64-GENERIC-LABEL: cmp16_load_ule_imm8:
745; X64-GENERIC:       # %bb.0:
746; X64-GENERIC-NEXT:    cmpw $16, (%rdi)
747; X64-GENERIC-NEXT:    setb %al
748; X64-GENERIC-NEXT:    retq
749;
750; X86-FAST-LABEL: cmp16_load_ule_imm8:
751; X86-FAST:       # %bb.0:
752; X86-FAST-NEXT:    movl {{[0-9]+}}(%esp), %eax
753; X86-FAST-NEXT:    cmpw $16, (%eax)
754; X86-FAST-NEXT:    setb %al
755; X86-FAST-NEXT:    retl
756;
757; X64-FAST-LABEL: cmp16_load_ule_imm8:
758; X64-FAST:       # %bb.0:
759; X64-FAST-NEXT:    cmpw $16, (%rdi)
760; X64-FAST-NEXT:    setb %al
761; X64-FAST-NEXT:    retq
762;
763; X86-ATOM-LABEL: cmp16_load_ule_imm8:
764; X86-ATOM:       # %bb.0:
765; X86-ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax
766; X86-ATOM-NEXT:    cmpw $16, (%eax)
767; X86-ATOM-NEXT:    setb %al
768; X86-ATOM-NEXT:    nop
769; X86-ATOM-NEXT:    nop
770; X86-ATOM-NEXT:    retl
771;
772; X64-ATOM-LABEL: cmp16_load_ule_imm8:
773; X64-ATOM:       # %bb.0:
774; X64-ATOM-NEXT:    cmpw $16, (%rdi)
775; X64-ATOM-NEXT:    setb %al
776; X64-ATOM-NEXT:    nop
777; X64-ATOM-NEXT:    nop
778; X64-ATOM-NEXT:    nop
779; X64-ATOM-NEXT:    nop
780; X64-ATOM-NEXT:    retq
781  %ld = load i16, ptr %p0
782  %cmp = icmp ule i16 %ld, 15
783  ret i1 %cmp
784}
785
786define i1 @cmp16_load_ule_imm16(ptr %p0) {
787; X86-GENERIC-LABEL: cmp16_load_ule_imm16:
788; X86-GENERIC:       # %bb.0:
789; X86-GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
790; X86-GENERIC-NEXT:    cmpw $513, (%eax) # imm = 0x201
791; X86-GENERIC-NEXT:    setb %al
792; X86-GENERIC-NEXT:    retl
793;
794; X64-GENERIC-LABEL: cmp16_load_ule_imm16:
795; X64-GENERIC:       # %bb.0:
796; X64-GENERIC-NEXT:    cmpw $513, (%rdi) # imm = 0x201
797; X64-GENERIC-NEXT:    setb %al
798; X64-GENERIC-NEXT:    retq
799;
800; X86-FAST-LABEL: cmp16_load_ule_imm16:
801; X86-FAST:       # %bb.0:
802; X86-FAST-NEXT:    movl {{[0-9]+}}(%esp), %eax
803; X86-FAST-NEXT:    cmpw $513, (%eax) # imm = 0x201
804; X86-FAST-NEXT:    setb %al
805; X86-FAST-NEXT:    retl
806;
807; X64-FAST-LABEL: cmp16_load_ule_imm16:
808; X64-FAST:       # %bb.0:
809; X64-FAST-NEXT:    cmpw $513, (%rdi) # imm = 0x201
810; X64-FAST-NEXT:    setb %al
811; X64-FAST-NEXT:    retq
812;
813; X86-ATOM-LABEL: cmp16_load_ule_imm16:
814; X86-ATOM:       # %bb.0:
815; X86-ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax
816; X86-ATOM-NEXT:    cmpw $513, (%eax) # imm = 0x201
817; X86-ATOM-NEXT:    setb %al
818; X86-ATOM-NEXT:    nop
819; X86-ATOM-NEXT:    nop
820; X86-ATOM-NEXT:    retl
821;
822; X64-ATOM-LABEL: cmp16_load_ule_imm16:
823; X64-ATOM:       # %bb.0:
824; X64-ATOM-NEXT:    cmpw $513, (%rdi) # imm = 0x201
825; X64-ATOM-NEXT:    setb %al
826; X64-ATOM-NEXT:    nop
827; X64-ATOM-NEXT:    nop
828; X64-ATOM-NEXT:    nop
829; X64-ATOM-NEXT:    nop
830; X64-ATOM-NEXT:    retq
831  %ld = load i16, ptr %p0
832  %cmp = icmp ule i16 %ld, 512
833  ret i1 %cmp
834}
835
836define i1 @cmp16_load_ule_imm16_minsize(ptr %p0) minsize {
837; X86-LABEL: cmp16_load_ule_imm16_minsize:
838; X86:       # %bb.0:
839; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
840; X86-NEXT:    cmpw $513, (%eax) # imm = 0x201
841; X86-NEXT:    setb %al
842; X86-NEXT:    retl
843;
844; X64-LABEL: cmp16_load_ule_imm16_minsize:
845; X64:       # %bb.0:
846; X64-NEXT:    cmpw $513, (%rdi) # imm = 0x201
847; X64-NEXT:    setb %al
848; X64-NEXT:    retq
849  %ld = load i16, ptr %p0
850  %cmp = icmp ule i16 %ld, 512
851  ret i1 %cmp
852}
853
854define i1 @cmp16_load_ule_imm16_optsize(ptr %p0) optsize {
855; X86-LABEL: cmp16_load_ule_imm16_optsize:
856; X86:       # %bb.0:
857; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
858; X86-NEXT:    cmpw $513, (%eax) # imm = 0x201
859; X86-NEXT:    setb %al
860; X86-NEXT:    retl
861;
862; X64-LABEL: cmp16_load_ule_imm16_optsize:
863; X64:       # %bb.0:
864; X64-NEXT:    cmpw $513, (%rdi) # imm = 0x201
865; X64-NEXT:    setb %al
866; X64-NEXT:    retq
867  %ld = load i16, ptr %p0
868  %cmp = icmp ule i16 %ld, 512
869  ret i1 %cmp
870}
871