• 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-unknown-unknown | FileCheck %s
3
4define void @test64(i64 inreg %x) {
5; CHECK-LABEL: test64:
6; CHECK:       # %bb.0:
7; CHECK-NEXT:    pushq %rax
8; CHECK-NEXT:    .cfi_def_cfa_offset 16
9; CHECK-NEXT:    testl $2048, %edi # imm = 0x800
10; CHECK-NEXT:    jne .LBB0_2
11; CHECK-NEXT:  # %bb.1: # %yes
12; CHECK-NEXT:    callq bar
13; CHECK-NEXT:  .LBB0_2: # %no
14; CHECK-NEXT:    popq %rax
15; CHECK-NEXT:    .cfi_def_cfa_offset 8
16; CHECK-NEXT:    retq
17  %t = and i64 %x, 2048
18  %s = icmp eq i64 %t, 0
19  br i1 %s, label %yes, label %no
20
21yes:
22  call void @bar()
23  ret void
24no:
25  ret void
26}
27
28define void @test64_optsize(i64 inreg %x) optsize {
29; CHECK-LABEL: test64_optsize:
30; CHECK:       # %bb.0:
31; CHECK-NEXT:    pushq %rax
32; CHECK-NEXT:    .cfi_def_cfa_offset 16
33; CHECK-NEXT:    btl $11, %edi
34; CHECK-NEXT:    jb .LBB1_2
35; CHECK-NEXT:  # %bb.1: # %yes
36; CHECK-NEXT:    callq bar
37; CHECK-NEXT:  .LBB1_2: # %no
38; CHECK-NEXT:    popq %rax
39; CHECK-NEXT:    .cfi_def_cfa_offset 8
40; CHECK-NEXT:    retq
41  %t = and i64 %x, 2048
42  %s = icmp eq i64 %t, 0
43  br i1 %s, label %yes, label %no
44
45yes:
46  call void @bar()
47  ret void
48no:
49  ret void
50}
51
52; This test is identical to test64 above with only the destination of the br
53; reversed. This somehow causes the two functions to get slightly different
54; initial IR. One has an extra invert of the setcc. This previous caused one
55; the functions to use a BT while the other used a TEST due to another DAG
56; combine messing with an expected canonical form.
57define void @test64_2(i64 inreg %x) {
58; CHECK-LABEL: test64_2:
59; CHECK:       # %bb.0:
60; CHECK-NEXT:    pushq %rax
61; CHECK-NEXT:    .cfi_def_cfa_offset 16
62; CHECK-NEXT:    testl $2048, %edi # imm = 0x800
63; CHECK-NEXT:    je .LBB2_2
64; CHECK-NEXT:  # %bb.1: # %yes
65; CHECK-NEXT:    callq bar
66; CHECK-NEXT:  .LBB2_2: # %no
67; CHECK-NEXT:    popq %rax
68; CHECK-NEXT:    .cfi_def_cfa_offset 8
69; CHECK-NEXT:    retq
70  %t = and i64 %x, 2048
71  %s = icmp eq i64 %t, 0
72  br i1 %s, label %no, label %yes
73
74yes:
75  call void @bar()
76  ret void
77no:
78  ret void
79}
80
81define void @test64_optsize_2(i64 inreg %x) optsize {
82; CHECK-LABEL: test64_optsize_2:
83; CHECK:       # %bb.0:
84; CHECK-NEXT:    pushq %rax
85; CHECK-NEXT:    .cfi_def_cfa_offset 16
86; CHECK-NEXT:    btl $11, %edi
87; CHECK-NEXT:    jae .LBB3_2
88; CHECK-NEXT:  # %bb.1: # %yes
89; CHECK-NEXT:    callq bar
90; CHECK-NEXT:  .LBB3_2: # %no
91; CHECK-NEXT:    popq %rax
92; CHECK-NEXT:    .cfi_def_cfa_offset 8
93; CHECK-NEXT:    retq
94  %t = and i64 %x, 2048
95  %s = icmp eq i64 %t, 0
96  br i1 %s, label %no, label %yes
97
98yes:
99  call void @bar()
100  ret void
101no:
102  ret void
103}
104
105define void @test64_3(i64 inreg %x) {
106; CHECK-LABEL: test64_3:
107; CHECK:       # %bb.0:
108; CHECK-NEXT:    pushq %rax
109; CHECK-NEXT:    .cfi_def_cfa_offset 16
110; CHECK-NEXT:    btq $32, %rdi
111; CHECK-NEXT:    jb .LBB4_2
112; CHECK-NEXT:  # %bb.1: # %yes
113; CHECK-NEXT:    callq bar
114; CHECK-NEXT:  .LBB4_2: # %no
115; CHECK-NEXT:    popq %rax
116; CHECK-NEXT:    .cfi_def_cfa_offset 8
117; CHECK-NEXT:    retq
118  %t = and i64 %x, 4294967296
119  %s = icmp eq i64 %t, 0
120  br i1 %s, label %yes, label %no
121
122yes:
123  call void @bar()
124  ret void
125no:
126  ret void
127}
128
129define void @test64_optsize_3(i64 inreg %x) optsize {
130; CHECK-LABEL: test64_optsize_3:
131; CHECK:       # %bb.0:
132; CHECK-NEXT:    pushq %rax
133; CHECK-NEXT:    .cfi_def_cfa_offset 16
134; CHECK-NEXT:    btq $32, %rdi
135; CHECK-NEXT:    jb .LBB5_2
136; CHECK-NEXT:  # %bb.1: # %yes
137; CHECK-NEXT:    callq bar
138; CHECK-NEXT:  .LBB5_2: # %no
139; CHECK-NEXT:    popq %rax
140; CHECK-NEXT:    .cfi_def_cfa_offset 8
141; CHECK-NEXT:    retq
142  %t = and i64 %x, 4294967296
143  %s = icmp eq i64 %t, 0
144  br i1 %s, label %yes, label %no
145
146yes:
147  call void @bar()
148  ret void
149no:
150  ret void
151}
152
153define void @test64_4(i64 inreg %x) {
154; CHECK-LABEL: test64_4:
155; CHECK:       # %bb.0:
156; CHECK-NEXT:    pushq %rax
157; CHECK-NEXT:    .cfi_def_cfa_offset 16
158; CHECK-NEXT:    btq $32, %rdi
159; CHECK-NEXT:    jae .LBB6_2
160; CHECK-NEXT:  # %bb.1: # %yes
161; CHECK-NEXT:    callq bar
162; CHECK-NEXT:  .LBB6_2: # %no
163; CHECK-NEXT:    popq %rax
164; CHECK-NEXT:    .cfi_def_cfa_offset 8
165; CHECK-NEXT:    retq
166  %t = and i64 %x, 4294967296
167  %s = icmp eq i64 %t, 0
168  br i1 %s, label %no, label %yes
169
170yes:
171  call void @bar()
172  ret void
173no:
174  ret void
175}
176
177define void @test64_optsize_4(i64 inreg %x) optsize {
178; CHECK-LABEL: test64_optsize_4:
179; CHECK:       # %bb.0:
180; CHECK-NEXT:    pushq %rax
181; CHECK-NEXT:    .cfi_def_cfa_offset 16
182; CHECK-NEXT:    btq $32, %rdi
183; CHECK-NEXT:    jae .LBB7_2
184; CHECK-NEXT:  # %bb.1: # %yes
185; CHECK-NEXT:    callq bar
186; CHECK-NEXT:  .LBB7_2: # %no
187; CHECK-NEXT:    popq %rax
188; CHECK-NEXT:    .cfi_def_cfa_offset 8
189; CHECK-NEXT:    retq
190  %t = and i64 %x, 4294967296
191  %s = icmp eq i64 %t, 0
192  br i1 %s, label %no, label %yes
193
194yes:
195  call void @bar()
196  ret void
197no:
198  ret void
199}
200
201define void @test32(i32 inreg %x) {
202; CHECK-LABEL: test32:
203; CHECK:       # %bb.0:
204; CHECK-NEXT:    pushq %rax
205; CHECK-NEXT:    .cfi_def_cfa_offset 16
206; CHECK-NEXT:    testl $2048, %edi # imm = 0x800
207; CHECK-NEXT:    jne .LBB8_2
208; CHECK-NEXT:  # %bb.1: # %yes
209; CHECK-NEXT:    callq bar
210; CHECK-NEXT:  .LBB8_2: # %no
211; CHECK-NEXT:    popq %rax
212; CHECK-NEXT:    .cfi_def_cfa_offset 8
213; CHECK-NEXT:    retq
214  %t = and i32 %x, 2048
215  %s = icmp eq i32 %t, 0
216  br i1 %s, label %yes, label %no
217
218yes:
219  call void @bar()
220  ret void
221no:
222  ret void
223}
224
225define void @test32_optsize(i32 inreg %x) optsize {
226; CHECK-LABEL: test32_optsize:
227; CHECK:       # %bb.0:
228; CHECK-NEXT:    pushq %rax
229; CHECK-NEXT:    .cfi_def_cfa_offset 16
230; CHECK-NEXT:    btl $11, %edi
231; CHECK-NEXT:    jb .LBB9_2
232; CHECK-NEXT:  # %bb.1: # %yes
233; CHECK-NEXT:    callq bar
234; CHECK-NEXT:  .LBB9_2: # %no
235; CHECK-NEXT:    popq %rax
236; CHECK-NEXT:    .cfi_def_cfa_offset 8
237; CHECK-NEXT:    retq
238  %t = and i32 %x, 2048
239  %s = icmp eq i32 %t, 0
240  br i1 %s, label %yes, label %no
241
242yes:
243  call void @bar()
244  ret void
245no:
246  ret void
247}
248
249define void @test32_2(i32 inreg %x) {
250; CHECK-LABEL: test32_2:
251; CHECK:       # %bb.0:
252; CHECK-NEXT:    pushq %rax
253; CHECK-NEXT:    .cfi_def_cfa_offset 16
254; CHECK-NEXT:    testl $2048, %edi # imm = 0x800
255; CHECK-NEXT:    je .LBB10_2
256; CHECK-NEXT:  # %bb.1: # %yes
257; CHECK-NEXT:    callq bar
258; CHECK-NEXT:  .LBB10_2: # %no
259; CHECK-NEXT:    popq %rax
260; CHECK-NEXT:    .cfi_def_cfa_offset 8
261; CHECK-NEXT:    retq
262  %t = and i32 %x, 2048
263  %s = icmp eq i32 %t, 0
264  br i1 %s, label %no, label %yes
265
266yes:
267  call void @bar()
268  ret void
269no:
270  ret void
271}
272
273define void @test32_optsize_2(i32 inreg %x) optsize {
274; CHECK-LABEL: test32_optsize_2:
275; CHECK:       # %bb.0:
276; CHECK-NEXT:    pushq %rax
277; CHECK-NEXT:    .cfi_def_cfa_offset 16
278; CHECK-NEXT:    btl $11, %edi
279; CHECK-NEXT:    jae .LBB11_2
280; CHECK-NEXT:  # %bb.1: # %yes
281; CHECK-NEXT:    callq bar
282; CHECK-NEXT:  .LBB11_2: # %no
283; CHECK-NEXT:    popq %rax
284; CHECK-NEXT:    .cfi_def_cfa_offset 8
285; CHECK-NEXT:    retq
286  %t = and i32 %x, 2048
287  %s = icmp eq i32 %t, 0
288  br i1 %s, label %no, label %yes
289
290yes:
291  call void @bar()
292  ret void
293no:
294  ret void
295}
296
297define void @test16(i16 inreg %x) {
298; CHECK-LABEL: test16:
299; CHECK:       # %bb.0:
300; CHECK-NEXT:    pushq %rax
301; CHECK-NEXT:    .cfi_def_cfa_offset 16
302; CHECK-NEXT:    testl $2048, %edi # imm = 0x800
303; CHECK-NEXT:    jne .LBB12_2
304; CHECK-NEXT:  # %bb.1: # %yes
305; CHECK-NEXT:    callq bar
306; CHECK-NEXT:  .LBB12_2: # %no
307; CHECK-NEXT:    popq %rax
308; CHECK-NEXT:    .cfi_def_cfa_offset 8
309; CHECK-NEXT:    retq
310  %t = and i16 %x, 2048
311  %s = icmp eq i16 %t, 0
312  br i1 %s, label %yes, label %no
313
314yes:
315  call void @bar()
316  ret void
317no:
318  ret void
319}
320
321define void @test16_optsize(i16 inreg %x) optsize {
322; CHECK-LABEL: test16_optsize:
323; CHECK:       # %bb.0:
324; CHECK-NEXT:    pushq %rax
325; CHECK-NEXT:    .cfi_def_cfa_offset 16
326; CHECK-NEXT:    btl $11, %edi
327; CHECK-NEXT:    jb .LBB13_2
328; CHECK-NEXT:  # %bb.1: # %yes
329; CHECK-NEXT:    callq bar
330; CHECK-NEXT:  .LBB13_2: # %no
331; CHECK-NEXT:    popq %rax
332; CHECK-NEXT:    .cfi_def_cfa_offset 8
333; CHECK-NEXT:    retq
334  %t = and i16 %x, 2048
335  %s = icmp eq i16 %t, 0
336  br i1 %s, label %yes, label %no
337
338yes:
339  call void @bar()
340  ret void
341no:
342  ret void
343}
344
345define void @test16_2(i16 inreg %x) {
346; CHECK-LABEL: test16_2:
347; CHECK:       # %bb.0:
348; CHECK-NEXT:    pushq %rax
349; CHECK-NEXT:    .cfi_def_cfa_offset 16
350; CHECK-NEXT:    testl $2048, %edi # imm = 0x800
351; CHECK-NEXT:    je .LBB14_2
352; CHECK-NEXT:  # %bb.1: # %yes
353; CHECK-NEXT:    callq bar
354; CHECK-NEXT:  .LBB14_2: # %no
355; CHECK-NEXT:    popq %rax
356; CHECK-NEXT:    .cfi_def_cfa_offset 8
357; CHECK-NEXT:    retq
358  %t = and i16 %x, 2048
359  %s = icmp eq i16 %t, 0
360  br i1 %s, label %no, label %yes
361
362yes:
363  call void @bar()
364  ret void
365no:
366  ret void
367}
368
369define void @test16_optsize_2(i16 inreg %x) optsize {
370; CHECK-LABEL: test16_optsize_2:
371; CHECK:       # %bb.0:
372; CHECK-NEXT:    pushq %rax
373; CHECK-NEXT:    .cfi_def_cfa_offset 16
374; CHECK-NEXT:    btl $11, %edi
375; CHECK-NEXT:    jae .LBB15_2
376; CHECK-NEXT:  # %bb.1: # %yes
377; CHECK-NEXT:    callq bar
378; CHECK-NEXT:  .LBB15_2: # %no
379; CHECK-NEXT:    popq %rax
380; CHECK-NEXT:    .cfi_def_cfa_offset 8
381; CHECK-NEXT:    retq
382  %t = and i16 %x, 2048
383  %s = icmp eq i16 %t, 0
384  br i1 %s, label %no, label %yes
385
386yes:
387  call void @bar()
388  ret void
389no:
390  ret void
391}
392
393declare void @bar()
394