• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=CHECK-LINUX64
3; RUN: llc < %s -mtriple=x86_64-win32 | FileCheck %s --check-prefix=CHECK-WIN32-64
4; RUN: llc < %s -mtriple=i686-- | FileCheck %s --check-prefix=CHECK-X86
5
6define void @g64xh(i64 inreg %x) nounwind {
7; CHECK-LINUX64-LABEL: g64xh:
8; CHECK-LINUX64:       # %bb.0:
9; CHECK-LINUX64-NEXT:    testl $2048, %edi # imm = 0x800
10; CHECK-LINUX64-NEXT:    jne .LBB0_2
11; CHECK-LINUX64-NEXT:  # %bb.1: # %yes
12; CHECK-LINUX64-NEXT:    pushq %rax
13; CHECK-LINUX64-NEXT:    callq bar
14; CHECK-LINUX64-NEXT:    popq %rax
15; CHECK-LINUX64-NEXT:  .LBB0_2: # %no
16; CHECK-LINUX64-NEXT:    retq
17;
18; CHECK-WIN32-64-LABEL: g64xh:
19; CHECK-WIN32-64:       # %bb.0:
20; CHECK-WIN32-64-NEXT:    subq $40, %rsp
21; CHECK-WIN32-64-NEXT:    testl $2048, %ecx # imm = 0x800
22; CHECK-WIN32-64-NEXT:    jne .LBB0_2
23; CHECK-WIN32-64-NEXT:  # %bb.1: # %yes
24; CHECK-WIN32-64-NEXT:    callq bar
25; CHECK-WIN32-64-NEXT:  .LBB0_2: # %no
26; CHECK-WIN32-64-NEXT:    addq $40, %rsp
27; CHECK-WIN32-64-NEXT:    retq
28;
29; CHECK-X86-LABEL: g64xh:
30; CHECK-X86:       # %bb.0:
31; CHECK-X86-NEXT:    testl $2048, %eax # imm = 0x800
32; CHECK-X86-NEXT:    jne .LBB0_2
33; CHECK-X86-NEXT:  # %bb.1: # %yes
34; CHECK-X86-NEXT:    calll bar
35; CHECK-X86-NEXT:  .LBB0_2: # %no
36; CHECK-X86-NEXT:    retl
37  %t = and i64 %x, 2048
38  %s = icmp eq i64 %t, 0
39  br i1 %s, label %yes, label %no
40
41yes:
42  call void @bar()
43  ret void
44no:
45  ret void
46}
47
48define void @g64xl(i64 inreg %x) nounwind {
49; CHECK-LINUX64-LABEL: g64xl:
50; CHECK-LINUX64:       # %bb.0:
51; CHECK-LINUX64-NEXT:    testb $8, %dil
52; CHECK-LINUX64-NEXT:    jne .LBB1_2
53; CHECK-LINUX64-NEXT:  # %bb.1: # %yes
54; CHECK-LINUX64-NEXT:    pushq %rax
55; CHECK-LINUX64-NEXT:    callq bar
56; CHECK-LINUX64-NEXT:    popq %rax
57; CHECK-LINUX64-NEXT:  .LBB1_2: # %no
58; CHECK-LINUX64-NEXT:    retq
59;
60; CHECK-WIN32-64-LABEL: g64xl:
61; CHECK-WIN32-64:       # %bb.0:
62; CHECK-WIN32-64-NEXT:    subq $40, %rsp
63; CHECK-WIN32-64-NEXT:    testb $8, %cl
64; CHECK-WIN32-64-NEXT:    jne .LBB1_2
65; CHECK-WIN32-64-NEXT:  # %bb.1: # %yes
66; CHECK-WIN32-64-NEXT:    callq bar
67; CHECK-WIN32-64-NEXT:  .LBB1_2: # %no
68; CHECK-WIN32-64-NEXT:    addq $40, %rsp
69; CHECK-WIN32-64-NEXT:    retq
70;
71; CHECK-X86-LABEL: g64xl:
72; CHECK-X86:       # %bb.0:
73; CHECK-X86-NEXT:    testb $8, %al
74; CHECK-X86-NEXT:    jne .LBB1_2
75; CHECK-X86-NEXT:  # %bb.1: # %yes
76; CHECK-X86-NEXT:    calll bar
77; CHECK-X86-NEXT:  .LBB1_2: # %no
78; CHECK-X86-NEXT:    retl
79  %t = and i64 %x, 8
80  %s = icmp eq i64 %t, 0
81  br i1 %s, label %yes, label %no
82
83yes:
84  call void @bar()
85  ret void
86no:
87  ret void
88}
89
90define void @g32xh(i32 inreg %x) nounwind {
91; CHECK-LINUX64-LABEL: g32xh:
92; CHECK-LINUX64:       # %bb.0:
93; CHECK-LINUX64-NEXT:    testl $2048, %edi # imm = 0x800
94; CHECK-LINUX64-NEXT:    jne .LBB2_2
95; CHECK-LINUX64-NEXT:  # %bb.1: # %yes
96; CHECK-LINUX64-NEXT:    pushq %rax
97; CHECK-LINUX64-NEXT:    callq bar
98; CHECK-LINUX64-NEXT:    popq %rax
99; CHECK-LINUX64-NEXT:  .LBB2_2: # %no
100; CHECK-LINUX64-NEXT:    retq
101;
102; CHECK-WIN32-64-LABEL: g32xh:
103; CHECK-WIN32-64:       # %bb.0:
104; CHECK-WIN32-64-NEXT:    subq $40, %rsp
105; CHECK-WIN32-64-NEXT:    testl $2048, %ecx # imm = 0x800
106; CHECK-WIN32-64-NEXT:    jne .LBB2_2
107; CHECK-WIN32-64-NEXT:  # %bb.1: # %yes
108; CHECK-WIN32-64-NEXT:    callq bar
109; CHECK-WIN32-64-NEXT:  .LBB2_2: # %no
110; CHECK-WIN32-64-NEXT:    addq $40, %rsp
111; CHECK-WIN32-64-NEXT:    retq
112;
113; CHECK-X86-LABEL: g32xh:
114; CHECK-X86:       # %bb.0:
115; CHECK-X86-NEXT:    testl $2048, %eax # imm = 0x800
116; CHECK-X86-NEXT:    jne .LBB2_2
117; CHECK-X86-NEXT:  # %bb.1: # %yes
118; CHECK-X86-NEXT:    calll bar
119; CHECK-X86-NEXT:  .LBB2_2: # %no
120; CHECK-X86-NEXT:    retl
121  %t = and i32 %x, 2048
122  %s = icmp eq i32 %t, 0
123  br i1 %s, label %yes, label %no
124
125yes:
126  call void @bar()
127  ret void
128no:
129  ret void
130}
131
132define void @g32xl(i32 inreg %x) nounwind {
133; CHECK-LINUX64-LABEL: g32xl:
134; CHECK-LINUX64:       # %bb.0:
135; CHECK-LINUX64-NEXT:    testb $8, %dil
136; CHECK-LINUX64-NEXT:    jne .LBB3_2
137; CHECK-LINUX64-NEXT:  # %bb.1: # %yes
138; CHECK-LINUX64-NEXT:    pushq %rax
139; CHECK-LINUX64-NEXT:    callq bar
140; CHECK-LINUX64-NEXT:    popq %rax
141; CHECK-LINUX64-NEXT:  .LBB3_2: # %no
142; CHECK-LINUX64-NEXT:    retq
143;
144; CHECK-WIN32-64-LABEL: g32xl:
145; CHECK-WIN32-64:       # %bb.0:
146; CHECK-WIN32-64-NEXT:    subq $40, %rsp
147; CHECK-WIN32-64-NEXT:    testb $8, %cl
148; CHECK-WIN32-64-NEXT:    jne .LBB3_2
149; CHECK-WIN32-64-NEXT:  # %bb.1: # %yes
150; CHECK-WIN32-64-NEXT:    callq bar
151; CHECK-WIN32-64-NEXT:  .LBB3_2: # %no
152; CHECK-WIN32-64-NEXT:    addq $40, %rsp
153; CHECK-WIN32-64-NEXT:    retq
154;
155; CHECK-X86-LABEL: g32xl:
156; CHECK-X86:       # %bb.0:
157; CHECK-X86-NEXT:    testb $8, %al
158; CHECK-X86-NEXT:    jne .LBB3_2
159; CHECK-X86-NEXT:  # %bb.1: # %yes
160; CHECK-X86-NEXT:    calll bar
161; CHECK-X86-NEXT:  .LBB3_2: # %no
162; CHECK-X86-NEXT:    retl
163  %t = and i32 %x, 8
164  %s = icmp eq i32 %t, 0
165  br i1 %s, label %yes, label %no
166
167yes:
168  call void @bar()
169  ret void
170no:
171  ret void
172}
173
174define void @g16xh(i16 inreg %x) nounwind {
175; CHECK-LINUX64-LABEL: g16xh:
176; CHECK-LINUX64:       # %bb.0:
177; CHECK-LINUX64-NEXT:    testl $2048, %edi # imm = 0x800
178; CHECK-LINUX64-NEXT:    jne .LBB4_2
179; CHECK-LINUX64-NEXT:  # %bb.1: # %yes
180; CHECK-LINUX64-NEXT:    pushq %rax
181; CHECK-LINUX64-NEXT:    callq bar
182; CHECK-LINUX64-NEXT:    popq %rax
183; CHECK-LINUX64-NEXT:  .LBB4_2: # %no
184; CHECK-LINUX64-NEXT:    retq
185;
186; CHECK-WIN32-64-LABEL: g16xh:
187; CHECK-WIN32-64:       # %bb.0:
188; CHECK-WIN32-64-NEXT:    subq $40, %rsp
189; CHECK-WIN32-64-NEXT:    # kill: def $cx killed $cx def $ecx
190; CHECK-WIN32-64-NEXT:    testl $2048, %ecx # imm = 0x800
191; CHECK-WIN32-64-NEXT:    jne .LBB4_2
192; CHECK-WIN32-64-NEXT:  # %bb.1: # %yes
193; CHECK-WIN32-64-NEXT:    callq bar
194; CHECK-WIN32-64-NEXT:  .LBB4_2: # %no
195; CHECK-WIN32-64-NEXT:    addq $40, %rsp
196; CHECK-WIN32-64-NEXT:    retq
197;
198; CHECK-X86-LABEL: g16xh:
199; CHECK-X86:       # %bb.0:
200; CHECK-X86-NEXT:    testl $2048, %eax # imm = 0x800
201; CHECK-X86-NEXT:    jne .LBB4_2
202; CHECK-X86-NEXT:  # %bb.1: # %yes
203; CHECK-X86-NEXT:    calll bar
204; CHECK-X86-NEXT:  .LBB4_2: # %no
205; CHECK-X86-NEXT:    retl
206  %t = and i16 %x, 2048
207  %s = icmp eq i16 %t, 0
208  br i1 %s, label %yes, label %no
209
210yes:
211  call void @bar()
212  ret void
213no:
214  ret void
215}
216
217define void @g16xl(i16 inreg %x) nounwind {
218; CHECK-LINUX64-LABEL: g16xl:
219; CHECK-LINUX64:       # %bb.0:
220; CHECK-LINUX64-NEXT:    testb $8, %dil
221; CHECK-LINUX64-NEXT:    jne .LBB5_2
222; CHECK-LINUX64-NEXT:  # %bb.1: # %yes
223; CHECK-LINUX64-NEXT:    pushq %rax
224; CHECK-LINUX64-NEXT:    callq bar
225; CHECK-LINUX64-NEXT:    popq %rax
226; CHECK-LINUX64-NEXT:  .LBB5_2: # %no
227; CHECK-LINUX64-NEXT:    retq
228;
229; CHECK-WIN32-64-LABEL: g16xl:
230; CHECK-WIN32-64:       # %bb.0:
231; CHECK-WIN32-64-NEXT:    subq $40, %rsp
232; CHECK-WIN32-64-NEXT:    # kill: def $cx killed $cx def $ecx
233; CHECK-WIN32-64-NEXT:    testb $8, %cl
234; CHECK-WIN32-64-NEXT:    jne .LBB5_2
235; CHECK-WIN32-64-NEXT:  # %bb.1: # %yes
236; CHECK-WIN32-64-NEXT:    callq bar
237; CHECK-WIN32-64-NEXT:  .LBB5_2: # %no
238; CHECK-WIN32-64-NEXT:    addq $40, %rsp
239; CHECK-WIN32-64-NEXT:    retq
240;
241; CHECK-X86-LABEL: g16xl:
242; CHECK-X86:       # %bb.0:
243; CHECK-X86-NEXT:    testb $8, %al
244; CHECK-X86-NEXT:    jne .LBB5_2
245; CHECK-X86-NEXT:  # %bb.1: # %yes
246; CHECK-X86-NEXT:    calll bar
247; CHECK-X86-NEXT:  .LBB5_2: # %no
248; CHECK-X86-NEXT:    retl
249  %t = and i16 %x, 8
250  %s = icmp eq i16 %t, 0
251  br i1 %s, label %yes, label %no
252
253yes:
254  call void @bar()
255  ret void
256no:
257  ret void
258}
259
260define void @g64x16(i64 inreg %x) nounwind {
261; CHECK-LINUX64-LABEL: g64x16:
262; CHECK-LINUX64:       # %bb.0:
263; CHECK-LINUX64-NEXT:    testl $32896, %edi # imm = 0x8080
264; CHECK-LINUX64-NEXT:    je .LBB6_1
265; CHECK-LINUX64-NEXT:  # %bb.2: # %no
266; CHECK-LINUX64-NEXT:    retq
267; CHECK-LINUX64-NEXT:  .LBB6_1: # %yes
268; CHECK-LINUX64-NEXT:    pushq %rax
269; CHECK-LINUX64-NEXT:    callq bar
270; CHECK-LINUX64-NEXT:    popq %rax
271; CHECK-LINUX64-NEXT:    retq
272;
273; CHECK-WIN32-64-LABEL: g64x16:
274; CHECK-WIN32-64:       # %bb.0:
275; CHECK-WIN32-64-NEXT:    subq $40, %rsp
276; CHECK-WIN32-64-NEXT:    testl $32896, %ecx # imm = 0x8080
277; CHECK-WIN32-64-NEXT:    je .LBB6_1
278; CHECK-WIN32-64-NEXT:  # %bb.2: # %no
279; CHECK-WIN32-64-NEXT:    addq $40, %rsp
280; CHECK-WIN32-64-NEXT:    retq
281; CHECK-WIN32-64-NEXT:  .LBB6_1: # %yes
282; CHECK-WIN32-64-NEXT:    callq bar
283; CHECK-WIN32-64-NEXT:    addq $40, %rsp
284; CHECK-WIN32-64-NEXT:    retq
285;
286; CHECK-X86-LABEL: g64x16:
287; CHECK-X86:       # %bb.0:
288; CHECK-X86-NEXT:    testl $32896, %eax # imm = 0x8080
289; CHECK-X86-NEXT:    je .LBB6_1
290; CHECK-X86-NEXT:  # %bb.2: # %no
291; CHECK-X86-NEXT:    retl
292; CHECK-X86-NEXT:  .LBB6_1: # %yes
293; CHECK-X86-NEXT:    calll bar
294; CHECK-X86-NEXT:    retl
295  %t = and i64 %x, 32896
296  %s = icmp eq i64 %t, 0
297  br i1 %s, label %yes, label %no
298
299yes:
300  call void @bar()
301  ret void
302no:
303  ret void
304}
305
306define void @g64x16minsize(i64 inreg %x) nounwind minsize {
307; CHECK-LINUX64-LABEL: g64x16minsize:
308; CHECK-LINUX64:       # %bb.0:
309; CHECK-LINUX64-NEXT:    testw $-32640, %di # imm = 0x8080
310; CHECK-LINUX64-NEXT:    je .LBB7_1
311; CHECK-LINUX64-NEXT:  # %bb.2: # %no
312; CHECK-LINUX64-NEXT:    retq
313; CHECK-LINUX64-NEXT:  .LBB7_1: # %yes
314; CHECK-LINUX64-NEXT:    pushq %rax
315; CHECK-LINUX64-NEXT:    callq bar
316; CHECK-LINUX64-NEXT:    popq %rax
317; CHECK-LINUX64-NEXT:    retq
318;
319; CHECK-WIN32-64-LABEL: g64x16minsize:
320; CHECK-WIN32-64:       # %bb.0:
321; CHECK-WIN32-64-NEXT:    subq $40, %rsp
322; CHECK-WIN32-64-NEXT:    testw $-32640, %cx # imm = 0x8080
323; CHECK-WIN32-64-NEXT:    jne .LBB7_2
324; CHECK-WIN32-64-NEXT:  # %bb.1: # %yes
325; CHECK-WIN32-64-NEXT:    callq bar
326; CHECK-WIN32-64-NEXT:  .LBB7_2: # %no
327; CHECK-WIN32-64-NEXT:    addq $40, %rsp
328; CHECK-WIN32-64-NEXT:    retq
329;
330; CHECK-X86-LABEL: g64x16minsize:
331; CHECK-X86:       # %bb.0:
332; CHECK-X86-NEXT:    testw $-32640, %ax # imm = 0x8080
333; CHECK-X86-NEXT:    je .LBB7_1
334; CHECK-X86-NEXT:  # %bb.2: # %no
335; CHECK-X86-NEXT:    retl
336; CHECK-X86-NEXT:  .LBB7_1: # %yes
337; CHECK-X86-NEXT:    calll bar
338; CHECK-X86-NEXT:    retl
339  %t = and i64 %x, 32896
340  %s = icmp eq i64 %t, 0
341  br i1 %s, label %yes, label %no
342
343yes:
344  call void @bar()
345  ret void
346no:
347  ret void
348}
349
350define void @g32x16(i32 inreg %x) nounwind {
351; CHECK-LINUX64-LABEL: g32x16:
352; CHECK-LINUX64:       # %bb.0:
353; CHECK-LINUX64-NEXT:    testl $32896, %edi # imm = 0x8080
354; CHECK-LINUX64-NEXT:    je .LBB8_1
355; CHECK-LINUX64-NEXT:  # %bb.2: # %no
356; CHECK-LINUX64-NEXT:    retq
357; CHECK-LINUX64-NEXT:  .LBB8_1: # %yes
358; CHECK-LINUX64-NEXT:    pushq %rax
359; CHECK-LINUX64-NEXT:    callq bar
360; CHECK-LINUX64-NEXT:    popq %rax
361; CHECK-LINUX64-NEXT:    retq
362;
363; CHECK-WIN32-64-LABEL: g32x16:
364; CHECK-WIN32-64:       # %bb.0:
365; CHECK-WIN32-64-NEXT:    subq $40, %rsp
366; CHECK-WIN32-64-NEXT:    testl $32896, %ecx # imm = 0x8080
367; CHECK-WIN32-64-NEXT:    je .LBB8_1
368; CHECK-WIN32-64-NEXT:  # %bb.2: # %no
369; CHECK-WIN32-64-NEXT:    addq $40, %rsp
370; CHECK-WIN32-64-NEXT:    retq
371; CHECK-WIN32-64-NEXT:  .LBB8_1: # %yes
372; CHECK-WIN32-64-NEXT:    callq bar
373; CHECK-WIN32-64-NEXT:    addq $40, %rsp
374; CHECK-WIN32-64-NEXT:    retq
375;
376; CHECK-X86-LABEL: g32x16:
377; CHECK-X86:       # %bb.0:
378; CHECK-X86-NEXT:    testl $32896, %eax # imm = 0x8080
379; CHECK-X86-NEXT:    je .LBB8_1
380; CHECK-X86-NEXT:  # %bb.2: # %no
381; CHECK-X86-NEXT:    retl
382; CHECK-X86-NEXT:  .LBB8_1: # %yes
383; CHECK-X86-NEXT:    calll bar
384; CHECK-X86-NEXT:    retl
385  %t = and i32 %x, 32896
386  %s = icmp eq i32 %t, 0
387  br i1 %s, label %yes, label %no
388
389yes:
390  call void @bar()
391  ret void
392no:
393  ret void
394}
395
396define void @g32x16minsize(i32 inreg %x) nounwind minsize {
397; CHECK-LINUX64-LABEL: g32x16minsize:
398; CHECK-LINUX64:       # %bb.0:
399; CHECK-LINUX64-NEXT:    testw $-32640, %di # imm = 0x8080
400; CHECK-LINUX64-NEXT:    je .LBB9_1
401; CHECK-LINUX64-NEXT:  # %bb.2: # %no
402; CHECK-LINUX64-NEXT:    retq
403; CHECK-LINUX64-NEXT:  .LBB9_1: # %yes
404; CHECK-LINUX64-NEXT:    pushq %rax
405; CHECK-LINUX64-NEXT:    callq bar
406; CHECK-LINUX64-NEXT:    popq %rax
407; CHECK-LINUX64-NEXT:    retq
408;
409; CHECK-WIN32-64-LABEL: g32x16minsize:
410; CHECK-WIN32-64:       # %bb.0:
411; CHECK-WIN32-64-NEXT:    subq $40, %rsp
412; CHECK-WIN32-64-NEXT:    testw $-32640, %cx # imm = 0x8080
413; CHECK-WIN32-64-NEXT:    jne .LBB9_2
414; CHECK-WIN32-64-NEXT:  # %bb.1: # %yes
415; CHECK-WIN32-64-NEXT:    callq bar
416; CHECK-WIN32-64-NEXT:  .LBB9_2: # %no
417; CHECK-WIN32-64-NEXT:    addq $40, %rsp
418; CHECK-WIN32-64-NEXT:    retq
419;
420; CHECK-X86-LABEL: g32x16minsize:
421; CHECK-X86:       # %bb.0:
422; CHECK-X86-NEXT:    testw $-32640, %ax # imm = 0x8080
423; CHECK-X86-NEXT:    je .LBB9_1
424; CHECK-X86-NEXT:  # %bb.2: # %no
425; CHECK-X86-NEXT:    retl
426; CHECK-X86-NEXT:  .LBB9_1: # %yes
427; CHECK-X86-NEXT:    calll bar
428; CHECK-X86-NEXT:    retl
429  %t = and i32 %x, 32896
430  %s = icmp eq i32 %t, 0
431  br i1 %s, label %yes, label %no
432
433yes:
434  call void @bar()
435  ret void
436no:
437  ret void
438}
439
440define void @g64x32(i64 inreg %x) nounwind {
441; CHECK-LINUX64-LABEL: g64x32:
442; CHECK-LINUX64:       # %bb.0:
443; CHECK-LINUX64-NEXT:    testl $268468352, %edi # imm = 0x10008080
444; CHECK-LINUX64-NEXT:    je .LBB10_1
445; CHECK-LINUX64-NEXT:  # %bb.2: # %no
446; CHECK-LINUX64-NEXT:    retq
447; CHECK-LINUX64-NEXT:  .LBB10_1: # %yes
448; CHECK-LINUX64-NEXT:    pushq %rax
449; CHECK-LINUX64-NEXT:    callq bar
450; CHECK-LINUX64-NEXT:    popq %rax
451; CHECK-LINUX64-NEXT:    retq
452;
453; CHECK-WIN32-64-LABEL: g64x32:
454; CHECK-WIN32-64:       # %bb.0:
455; CHECK-WIN32-64-NEXT:    subq $40, %rsp
456; CHECK-WIN32-64-NEXT:    testl $268468352, %ecx # imm = 0x10008080
457; CHECK-WIN32-64-NEXT:    je .LBB10_1
458; CHECK-WIN32-64-NEXT:  # %bb.2: # %no
459; CHECK-WIN32-64-NEXT:    addq $40, %rsp
460; CHECK-WIN32-64-NEXT:    retq
461; CHECK-WIN32-64-NEXT:  .LBB10_1: # %yes
462; CHECK-WIN32-64-NEXT:    callq bar
463; CHECK-WIN32-64-NEXT:    addq $40, %rsp
464; CHECK-WIN32-64-NEXT:    retq
465;
466; CHECK-X86-LABEL: g64x32:
467; CHECK-X86:       # %bb.0:
468; CHECK-X86-NEXT:    testl $268468352, %eax # imm = 0x10008080
469; CHECK-X86-NEXT:    je .LBB10_1
470; CHECK-X86-NEXT:  # %bb.2: # %no
471; CHECK-X86-NEXT:    retl
472; CHECK-X86-NEXT:  .LBB10_1: # %yes
473; CHECK-X86-NEXT:    calll bar
474; CHECK-X86-NEXT:    retl
475  %t = and i64 %x, 268468352
476  %s = icmp eq i64 %t, 0
477  br i1 %s, label %yes, label %no
478
479yes:
480  call void @bar()
481  ret void
482no:
483  ret void
484}
485
486define void @truncand32(i16 inreg %x) nounwind {
487; CHECK-LINUX64-LABEL: truncand32:
488; CHECK-LINUX64:       # %bb.0:
489; CHECK-LINUX64-NEXT:    testl $2049, %edi # imm = 0x801
490; CHECK-LINUX64-NEXT:    je .LBB11_1
491; CHECK-LINUX64-NEXT:  # %bb.2: # %no
492; CHECK-LINUX64-NEXT:    retq
493; CHECK-LINUX64-NEXT:  .LBB11_1: # %yes
494; CHECK-LINUX64-NEXT:    pushq %rax
495; CHECK-LINUX64-NEXT:    callq bar
496; CHECK-LINUX64-NEXT:    popq %rax
497; CHECK-LINUX64-NEXT:    retq
498;
499; CHECK-WIN32-64-LABEL: truncand32:
500; CHECK-WIN32-64:       # %bb.0:
501; CHECK-WIN32-64-NEXT:    subq $40, %rsp
502; CHECK-WIN32-64-NEXT:    # kill: def $cx killed $cx def $ecx
503; CHECK-WIN32-64-NEXT:    testl $2049, %ecx # imm = 0x801
504; CHECK-WIN32-64-NEXT:    je .LBB11_1
505; CHECK-WIN32-64-NEXT:  # %bb.2: # %no
506; CHECK-WIN32-64-NEXT:    addq $40, %rsp
507; CHECK-WIN32-64-NEXT:    retq
508; CHECK-WIN32-64-NEXT:  .LBB11_1: # %yes
509; CHECK-WIN32-64-NEXT:    callq bar
510; CHECK-WIN32-64-NEXT:    addq $40, %rsp
511; CHECK-WIN32-64-NEXT:    retq
512;
513; CHECK-X86-LABEL: truncand32:
514; CHECK-X86:       # %bb.0:
515; CHECK-X86-NEXT:    testl $2049, %eax # imm = 0x801
516; CHECK-X86-NEXT:    je .LBB11_1
517; CHECK-X86-NEXT:  # %bb.2: # %no
518; CHECK-X86-NEXT:    retl
519; CHECK-X86-NEXT:  .LBB11_1: # %yes
520; CHECK-X86-NEXT:    calll bar
521; CHECK-X86-NEXT:    retl
522  %t = and i16 %x, 2049
523  %s = icmp eq i16 %t, 0
524  br i1 %s, label %yes, label %no
525
526yes:
527  call void @bar()
528  ret void
529no:
530  ret void
531}
532
533define void @testw(i16 inreg %x) nounwind minsize {
534; CHECK-LINUX64-LABEL: testw:
535; CHECK-LINUX64:       # %bb.0:
536; CHECK-LINUX64-NEXT:    testw $2049, %di # imm = 0x801
537; CHECK-LINUX64-NEXT:    je .LBB12_1
538; CHECK-LINUX64-NEXT:  # %bb.2: # %no
539; CHECK-LINUX64-NEXT:    retq
540; CHECK-LINUX64-NEXT:  .LBB12_1: # %yes
541; CHECK-LINUX64-NEXT:    pushq %rax
542; CHECK-LINUX64-NEXT:    callq bar
543; CHECK-LINUX64-NEXT:    popq %rax
544; CHECK-LINUX64-NEXT:    retq
545;
546; CHECK-WIN32-64-LABEL: testw:
547; CHECK-WIN32-64:       # %bb.0:
548; CHECK-WIN32-64-NEXT:    subq $40, %rsp
549; CHECK-WIN32-64-NEXT:    # kill: def $cx killed $cx def $ecx
550; CHECK-WIN32-64-NEXT:    testw $2049, %cx # imm = 0x801
551; CHECK-WIN32-64-NEXT:    jne .LBB12_2
552; CHECK-WIN32-64-NEXT:  # %bb.1: # %yes
553; CHECK-WIN32-64-NEXT:    callq bar
554; CHECK-WIN32-64-NEXT:  .LBB12_2: # %no
555; CHECK-WIN32-64-NEXT:    addq $40, %rsp
556; CHECK-WIN32-64-NEXT:    retq
557;
558; CHECK-X86-LABEL: testw:
559; CHECK-X86:       # %bb.0:
560; CHECK-X86-NEXT:    testw $2049, %ax # imm = 0x801
561; CHECK-X86-NEXT:    je .LBB12_1
562; CHECK-X86-NEXT:  # %bb.2: # %no
563; CHECK-X86-NEXT:    retl
564; CHECK-X86-NEXT:  .LBB12_1: # %yes
565; CHECK-X86-NEXT:    calll bar
566; CHECK-X86-NEXT:    retl
567  %t = and i16 %x, 2049
568  %s = icmp eq i16 %t, 0
569  br i1 %s, label %yes, label %no
570
571yes:
572  call void @bar()
573  ret void
574no:
575  ret void
576}
577
578declare void @bar()
579