xref: /llvm-project/llvm/test/CodeGen/X86/mul-constant-result.ll (revision e3cf80c5c1fe55efd8216575ccadea0ab087e79c)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefix=X86
3
4; Incremental updates of the instruction depths should be enough for this test
5; case.
6; RUN: llc < %s -mtriple=x86_64-unknown -mcpu=haswell -machine-combiner-inc-threshold=0| FileCheck %s --check-prefix=X64-HSW
7
8; Function Attrs: norecurse nounwind readnone uwtable
9define i32 @mult(i32, i32) local_unnamed_addr #0 {
10; X86-LABEL: mult:
11; X86:       # %bb.0:
12; X86-NEXT:    pushl %esi
13; X86-NEXT:    .cfi_def_cfa_offset 8
14; X86-NEXT:    .cfi_offset %esi, -8
15; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
16; X86-NEXT:    cmpl $2, %edx
17; X86-NEXT:    movl $1, %eax
18; X86-NEXT:    movl $1, %esi
19; X86-NEXT:    jge .LBB0_2
20; X86-NEXT:  # %bb.1:
21; X86-NEXT:    movl %edx, %esi
22; X86-NEXT:  .LBB0_2:
23; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx
24; X86-NEXT:    testl %edx, %edx
25; X86-NEXT:    je .LBB0_4
26; X86-NEXT:  # %bb.3:
27; X86-NEXT:    movl %esi, %eax
28; X86-NEXT:  .LBB0_4:
29; X86-NEXT:    decl %ecx
30; X86-NEXT:    cmpl $31, %ecx
31; X86-NEXT:    ja .LBB0_35
32; X86-NEXT:  # %bb.5:
33; X86-NEXT:    jmpl *.LJTI0_0(,%ecx,4)
34; X86-NEXT:  .LBB0_6:
35; X86-NEXT:    addl %eax, %eax
36; X86-NEXT:    popl %esi
37; X86-NEXT:    .cfi_def_cfa_offset 4
38; X86-NEXT:    retl
39; X86-NEXT:  .LBB0_7:
40; X86-NEXT:    .cfi_def_cfa_offset 8
41; X86-NEXT:    leal (%eax,%eax,8), %ecx
42; X86-NEXT:    leal (%ecx,%ecx,2), %ecx
43; X86-NEXT:    jmp .LBB0_9
44; X86-NEXT:  .LBB0_8:
45; X86-NEXT:    movl %eax, %ecx
46; X86-NEXT:    shll $4, %ecx
47; X86-NEXT:    jmp .LBB0_9
48; X86-NEXT:  .LBB0_10:
49; X86-NEXT:    leal (%eax,%eax,4), %eax
50; X86-NEXT:    jmp .LBB0_18
51; X86-NEXT:  .LBB0_11:
52; X86-NEXT:    shll $2, %eax
53; X86-NEXT:    jmp .LBB0_18
54; X86-NEXT:  .LBB0_13:
55; X86-NEXT:    leal (%eax,%eax,2), %ecx
56; X86-NEXT:    jmp .LBB0_14
57; X86-NEXT:  .LBB0_15:
58; X86-NEXT:    addl %eax, %eax
59; X86-NEXT:    jmp .LBB0_12
60; X86-NEXT:  .LBB0_16:
61; X86-NEXT:    leal (%eax,%eax,4), %ecx
62; X86-NEXT:    leal (%ecx,%ecx,4), %ecx
63; X86-NEXT:    jmp .LBB0_9
64; X86-NEXT:  .LBB0_17:
65; X86-NEXT:    leal (%eax,%eax,4), %eax
66; X86-NEXT:    jmp .LBB0_12
67; X86-NEXT:  .LBB0_19:
68; X86-NEXT:    shll $4, %eax
69; X86-NEXT:    popl %esi
70; X86-NEXT:    .cfi_def_cfa_offset 4
71; X86-NEXT:    retl
72; X86-NEXT:  .LBB0_20:
73; X86-NEXT:    .cfi_def_cfa_offset 8
74; X86-NEXT:    shll $2, %eax
75; X86-NEXT:    popl %esi
76; X86-NEXT:    .cfi_def_cfa_offset 4
77; X86-NEXT:    retl
78; X86-NEXT:  .LBB0_21:
79; X86-NEXT:    .cfi_def_cfa_offset 8
80; X86-NEXT:    shll $3, %eax
81; X86-NEXT:    popl %esi
82; X86-NEXT:    .cfi_def_cfa_offset 4
83; X86-NEXT:    retl
84; X86-NEXT:  .LBB0_22:
85; X86-NEXT:    .cfi_def_cfa_offset 8
86; X86-NEXT:    shll $5, %eax
87; X86-NEXT:    popl %esi
88; X86-NEXT:    .cfi_def_cfa_offset 4
89; X86-NEXT:    retl
90; X86-NEXT:  .LBB0_23:
91; X86-NEXT:    .cfi_def_cfa_offset 8
92; X86-NEXT:    addl %eax, %eax
93; X86-NEXT:  .LBB0_33:
94; X86-NEXT:    leal (%eax,%eax,8), %eax
95; X86-NEXT:    popl %esi
96; X86-NEXT:    .cfi_def_cfa_offset 4
97; X86-NEXT:    retl
98; X86-NEXT:  .LBB0_24:
99; X86-NEXT:    .cfi_def_cfa_offset 8
100; X86-NEXT:    leal (%eax,%eax,4), %ecx
101; X86-NEXT:  .LBB0_14:
102; X86-NEXT:    leal (%eax,%ecx,4), %eax
103; X86-NEXT:    popl %esi
104; X86-NEXT:    .cfi_def_cfa_offset 4
105; X86-NEXT:    retl
106; X86-NEXT:  .LBB0_25:
107; X86-NEXT:    .cfi_def_cfa_offset 8
108; X86-NEXT:    addl %eax, %eax
109; X86-NEXT:    jmp .LBB0_18
110; X86-NEXT:  .LBB0_26:
111; X86-NEXT:    leal (%eax,%eax,4), %ecx
112; X86-NEXT:    leal (%eax,%ecx,4), %ecx
113; X86-NEXT:    jmp .LBB0_9
114; X86-NEXT:  .LBB0_27:
115; X86-NEXT:    leal (%eax,%eax), %ecx
116; X86-NEXT:    shll $4, %eax
117; X86-NEXT:    jmp .LBB0_28
118; X86-NEXT:  .LBB0_29:
119; X86-NEXT:    leal (,%eax,8), %ecx
120; X86-NEXT:    jmp .LBB0_38
121; X86-NEXT:  .LBB0_30:
122; X86-NEXT:    leal (%eax,%eax,8), %ecx
123; X86-NEXT:    jmp .LBB0_32
124; X86-NEXT:  .LBB0_31:
125; X86-NEXT:    leal (%eax,%eax,4), %ecx
126; X86-NEXT:  .LBB0_32:
127; X86-NEXT:    leal (%eax,%ecx,2), %eax
128; X86-NEXT:    popl %esi
129; X86-NEXT:    .cfi_def_cfa_offset 4
130; X86-NEXT:    retl
131; X86-NEXT:  .LBB0_34:
132; X86-NEXT:    .cfi_def_cfa_offset 8
133; X86-NEXT:    movl %eax, %ecx
134; X86-NEXT:    shll $5, %ecx
135; X86-NEXT:    jmp .LBB0_38
136; X86-NEXT:  .LBB0_35:
137; X86-NEXT:    xorl %eax, %eax
138; X86-NEXT:  .LBB0_36:
139; X86-NEXT:    popl %esi
140; X86-NEXT:    .cfi_def_cfa_offset 4
141; X86-NEXT:    retl
142; X86-NEXT:  .LBB0_37:
143; X86-NEXT:    .cfi_def_cfa_offset 8
144; X86-NEXT:    leal (%eax,%eax,2), %ecx
145; X86-NEXT:    shll $3, %ecx
146; X86-NEXT:  .LBB0_38:
147; X86-NEXT:    subl %eax, %ecx
148; X86-NEXT:    movl %ecx, %eax
149; X86-NEXT:    popl %esi
150; X86-NEXT:    .cfi_def_cfa_offset 4
151; X86-NEXT:    retl
152; X86-NEXT:  .LBB0_39:
153; X86-NEXT:    .cfi_def_cfa_offset 8
154; X86-NEXT:    shll $2, %eax
155; X86-NEXT:  .LBB0_12:
156; X86-NEXT:    leal (%eax,%eax,4), %eax
157; X86-NEXT:    popl %esi
158; X86-NEXT:    .cfi_def_cfa_offset 4
159; X86-NEXT:    retl
160; X86-NEXT:  .LBB0_40:
161; X86-NEXT:    .cfi_def_cfa_offset 8
162; X86-NEXT:    shll $3, %eax
163; X86-NEXT:    jmp .LBB0_18
164; X86-NEXT:  .LBB0_41:
165; X86-NEXT:    leal (%eax,%eax,8), %ecx
166; X86-NEXT:    leal (%ecx,%ecx,2), %ecx
167; X86-NEXT:    addl %eax, %eax
168; X86-NEXT:  .LBB0_9:
169; X86-NEXT:    addl %ecx, %eax
170; X86-NEXT:    popl %esi
171; X86-NEXT:    .cfi_def_cfa_offset 4
172; X86-NEXT:    retl
173; X86-NEXT:  .LBB0_42:
174; X86-NEXT:    .cfi_def_cfa_offset 8
175; X86-NEXT:    leal (%eax,%eax), %ecx
176; X86-NEXT:    shll $5, %eax
177; X86-NEXT:  .LBB0_28:
178; X86-NEXT:    subl %ecx, %eax
179; X86-NEXT:    popl %esi
180; X86-NEXT:    .cfi_def_cfa_offset 4
181; X86-NEXT:    retl
182; X86-NEXT:  .LBB0_43:
183; X86-NEXT:    .cfi_def_cfa_offset 8
184; X86-NEXT:    leal (%eax,%eax,8), %eax
185; X86-NEXT:  .LBB0_18:
186; X86-NEXT:    leal (%eax,%eax,2), %eax
187; X86-NEXT:    popl %esi
188; X86-NEXT:    .cfi_def_cfa_offset 4
189; X86-NEXT:    retl
190;
191; X64-HSW-LABEL: mult:
192; X64-HSW:       # %bb.0:
193; X64-HSW-NEXT:    # kill: def $edi killed $edi def $rdi
194; X64-HSW-NEXT:    cmpl $2, %esi
195; X64-HSW-NEXT:    movl $1, %ecx
196; X64-HSW-NEXT:    movl %esi, %eax
197; X64-HSW-NEXT:    cmovgel %ecx, %eax
198; X64-HSW-NEXT:    testl %esi, %esi
199; X64-HSW-NEXT:    cmovel %ecx, %eax
200; X64-HSW-NEXT:    decl %edi
201; X64-HSW-NEXT:    cmpl $31, %edi
202; X64-HSW-NEXT:    ja .LBB0_31
203; X64-HSW-NEXT:  # %bb.1:
204; X64-HSW-NEXT:    jmpq *.LJTI0_0(,%rdi,8)
205; X64-HSW-NEXT:  .LBB0_2:
206; X64-HSW-NEXT:    addl %eax, %eax
207; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
208; X64-HSW-NEXT:    retq
209; X64-HSW-NEXT:  .LBB0_3:
210; X64-HSW-NEXT:    leal (%rax,%rax,8), %ecx
211; X64-HSW-NEXT:    leal (%rcx,%rcx,2), %ecx
212; X64-HSW-NEXT:    jmp .LBB0_22
213; X64-HSW-NEXT:  .LBB0_4:
214; X64-HSW-NEXT:    movl %eax, %ecx
215; X64-HSW-NEXT:    shll $4, %ecx
216; X64-HSW-NEXT:    jmp .LBB0_22
217; X64-HSW-NEXT:  .LBB0_5:
218; X64-HSW-NEXT:    leal (%rax,%rax,4), %eax
219; X64-HSW-NEXT:  .LBB0_13:
220; X64-HSW-NEXT:    leal (%rax,%rax,2), %eax
221; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
222; X64-HSW-NEXT:    retq
223; X64-HSW-NEXT:  .LBB0_6:
224; X64-HSW-NEXT:    shll $2, %eax
225; X64-HSW-NEXT:    leal (%rax,%rax,2), %eax
226; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
227; X64-HSW-NEXT:    retq
228; X64-HSW-NEXT:  .LBB0_8:
229; X64-HSW-NEXT:    leal (%rax,%rax,2), %ecx
230; X64-HSW-NEXT:    leal (%rax,%rcx,4), %eax
231; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
232; X64-HSW-NEXT:    retq
233; X64-HSW-NEXT:  .LBB0_10:
234; X64-HSW-NEXT:    addl %eax, %eax
235; X64-HSW-NEXT:  .LBB0_7:
236; X64-HSW-NEXT:    leal (%rax,%rax,4), %eax
237; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
238; X64-HSW-NEXT:    retq
239; X64-HSW-NEXT:  .LBB0_11:
240; X64-HSW-NEXT:    leal (%rax,%rax,4), %ecx
241; X64-HSW-NEXT:    leal (%rcx,%rcx,4), %ecx
242; X64-HSW-NEXT:    jmp .LBB0_22
243; X64-HSW-NEXT:  .LBB0_12:
244; X64-HSW-NEXT:    leal (%rax,%rax,4), %eax
245; X64-HSW-NEXT:    leal (%rax,%rax,4), %eax
246; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
247; X64-HSW-NEXT:    retq
248; X64-HSW-NEXT:  .LBB0_14:
249; X64-HSW-NEXT:    shll $4, %eax
250; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
251; X64-HSW-NEXT:    retq
252; X64-HSW-NEXT:  .LBB0_15:
253; X64-HSW-NEXT:    shll $2, %eax
254; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
255; X64-HSW-NEXT:    retq
256; X64-HSW-NEXT:  .LBB0_16:
257; X64-HSW-NEXT:    shll $3, %eax
258; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
259; X64-HSW-NEXT:    retq
260; X64-HSW-NEXT:  .LBB0_17:
261; X64-HSW-NEXT:    shll $5, %eax
262; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
263; X64-HSW-NEXT:    retq
264; X64-HSW-NEXT:  .LBB0_18:
265; X64-HSW-NEXT:    addl %eax, %eax
266; X64-HSW-NEXT:  .LBB0_29:
267; X64-HSW-NEXT:    leal (%rax,%rax,8), %eax
268; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
269; X64-HSW-NEXT:    retq
270; X64-HSW-NEXT:  .LBB0_19:
271; X64-HSW-NEXT:    leal (%rax,%rax,4), %ecx
272; X64-HSW-NEXT:    leal (%rax,%rcx,4), %eax
273; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
274; X64-HSW-NEXT:    retq
275; X64-HSW-NEXT:  .LBB0_20:
276; X64-HSW-NEXT:    addl %eax, %eax
277; X64-HSW-NEXT:    leal (%rax,%rax,2), %eax
278; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
279; X64-HSW-NEXT:    retq
280; X64-HSW-NEXT:  .LBB0_21:
281; X64-HSW-NEXT:    leal (%rax,%rax,4), %ecx
282; X64-HSW-NEXT:    leal (%rax,%rcx,4), %ecx
283; X64-HSW-NEXT:  .LBB0_22:
284; X64-HSW-NEXT:    addl %eax, %ecx
285; X64-HSW-NEXT:    movl %ecx, %eax
286; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
287; X64-HSW-NEXT:    retq
288; X64-HSW-NEXT:  .LBB0_23:
289; X64-HSW-NEXT:    leal (%rax,%rax), %ecx
290; X64-HSW-NEXT:    shll $4, %eax
291; X64-HSW-NEXT:    subl %ecx, %eax
292; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
293; X64-HSW-NEXT:    retq
294; X64-HSW-NEXT:  .LBB0_25:
295; X64-HSW-NEXT:    leal (,%rax,8), %ecx
296; X64-HSW-NEXT:    jmp .LBB0_34
297; X64-HSW-NEXT:  .LBB0_26:
298; X64-HSW-NEXT:    leal (%rax,%rax,8), %ecx
299; X64-HSW-NEXT:    leal (%rax,%rcx,2), %eax
300; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
301; X64-HSW-NEXT:    retq
302; X64-HSW-NEXT:  .LBB0_27:
303; X64-HSW-NEXT:    leal (%rax,%rax,4), %ecx
304; X64-HSW-NEXT:    leal (%rax,%rcx,2), %eax
305; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
306; X64-HSW-NEXT:    retq
307; X64-HSW-NEXT:  .LBB0_30:
308; X64-HSW-NEXT:    movl %eax, %ecx
309; X64-HSW-NEXT:    shll $5, %ecx
310; X64-HSW-NEXT:    jmp .LBB0_34
311; X64-HSW-NEXT:  .LBB0_31:
312; X64-HSW-NEXT:    xorl %eax, %eax
313; X64-HSW-NEXT:  .LBB0_32:
314; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
315; X64-HSW-NEXT:    retq
316; X64-HSW-NEXT:  .LBB0_33:
317; X64-HSW-NEXT:    leal (%rax,%rax,2), %ecx
318; X64-HSW-NEXT:    shll $3, %ecx
319; X64-HSW-NEXT:  .LBB0_34:
320; X64-HSW-NEXT:    subl %eax, %ecx
321; X64-HSW-NEXT:    movl %ecx, %eax
322; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
323; X64-HSW-NEXT:    retq
324; X64-HSW-NEXT:  .LBB0_36:
325; X64-HSW-NEXT:    shll $2, %eax
326; X64-HSW-NEXT:    leal (%rax,%rax,4), %eax
327; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
328; X64-HSW-NEXT:    retq
329; X64-HSW-NEXT:  .LBB0_37:
330; X64-HSW-NEXT:    shll $3, %eax
331; X64-HSW-NEXT:    leal (%rax,%rax,2), %eax
332; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
333; X64-HSW-NEXT:    retq
334; X64-HSW-NEXT:  .LBB0_38:
335; X64-HSW-NEXT:    leal (%rax,%rax,8), %ecx
336; X64-HSW-NEXT:    leal (%rcx,%rcx,2), %ecx
337; X64-HSW-NEXT:    addl %eax, %eax
338; X64-HSW-NEXT:    addl %ecx, %eax
339; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
340; X64-HSW-NEXT:    retq
341; X64-HSW-NEXT:  .LBB0_39:
342; X64-HSW-NEXT:    leal (%rax,%rax), %ecx
343; X64-HSW-NEXT:    shll $5, %eax
344; X64-HSW-NEXT:    subl %ecx, %eax
345; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
346; X64-HSW-NEXT:    retq
347; X64-HSW-NEXT:  .LBB0_40:
348; X64-HSW-NEXT:    leal (%rax,%rax,8), %eax
349; X64-HSW-NEXT:    leal (%rax,%rax,2), %eax
350; X64-HSW-NEXT:    # kill: def $eax killed $eax killed $rax
351; X64-HSW-NEXT:    retq
352  %3 = icmp eq i32 %1, 0
353  %4 = icmp sgt i32 %1, 1
354  %5 = or i1 %3, %4
355  %6 = select i1 %5, i32 1, i32 %1
356  switch i32 %0, label %69 [
357    i32 1, label %70
358    i32 2, label %7
359    i32 3, label %9
360    i32 4, label %11
361    i32 5, label %13
362    i32 6, label %15
363    i32 7, label %17
364    i32 8, label %19
365    i32 9, label %21
366    i32 10, label %23
367    i32 11, label %25
368    i32 12, label %27
369    i32 13, label %29
370    i32 14, label %31
371    i32 15, label %33
372    i32 16, label %35
373    i32 17, label %37
374    i32 18, label %39
375    i32 19, label %41
376    i32 20, label %43
377    i32 21, label %45
378    i32 22, label %47
379    i32 23, label %49
380    i32 24, label %51
381    i32 25, label %53
382    i32 26, label %55
383    i32 27, label %57
384    i32 28, label %59
385    i32 29, label %61
386    i32 30, label %63
387    i32 31, label %65
388    i32 32, label %67
389  ]
390
391; <label>:7:                                      ; preds = %2
392  %8 = shl nsw i32 %6, 1
393  br label %70
394
395; <label>:9:                                      ; preds = %2
396  %10 = mul nsw i32 %6, 3
397  br label %70
398
399; <label>:11:                                     ; preds = %2
400  %12 = shl nsw i32 %6, 2
401  br label %70
402
403; <label>:13:                                     ; preds = %2
404  %14 = mul nsw i32 %6, 5
405  br label %70
406
407; <label>:15:                                     ; preds = %2
408  %16 = mul nsw i32 %6, 6
409  br label %70
410
411; <label>:17:                                     ; preds = %2
412  %18 = mul nsw i32 %6, 7
413  br label %70
414
415; <label>:19:                                     ; preds = %2
416  %20 = shl nsw i32 %6, 3
417  br label %70
418
419; <label>:21:                                     ; preds = %2
420  %22 = mul nsw i32 %6, 9
421  br label %70
422
423; <label>:23:                                     ; preds = %2
424  %24 = mul nsw i32 %6, 10
425  br label %70
426
427; <label>:25:                                     ; preds = %2
428  %26 = mul nsw i32 %6, 11
429  br label %70
430
431; <label>:27:                                     ; preds = %2
432  %28 = mul nsw i32 %6, 12
433  br label %70
434
435; <label>:29:                                     ; preds = %2
436  %30 = mul nsw i32 %6, 13
437  br label %70
438
439; <label>:31:                                     ; preds = %2
440  %32 = mul nsw i32 %6, 14
441  br label %70
442
443; <label>:33:                                     ; preds = %2
444  %34 = mul nsw i32 %6, 15
445  br label %70
446
447; <label>:35:                                     ; preds = %2
448  %36 = shl nsw i32 %6, 4
449  br label %70
450
451; <label>:37:                                     ; preds = %2
452  %38 = mul nsw i32 %6, 17
453  br label %70
454
455; <label>:39:                                     ; preds = %2
456  %40 = mul nsw i32 %6, 18
457  br label %70
458
459; <label>:41:                                     ; preds = %2
460  %42 = mul nsw i32 %6, 19
461  br label %70
462
463; <label>:43:                                     ; preds = %2
464  %44 = mul nsw i32 %6, 20
465  br label %70
466
467; <label>:45:                                     ; preds = %2
468  %46 = mul nsw i32 %6, 21
469  br label %70
470
471; <label>:47:                                     ; preds = %2
472  %48 = mul nsw i32 %6, 22
473  br label %70
474
475; <label>:49:                                     ; preds = %2
476  %50 = mul nsw i32 %6, 23
477  br label %70
478
479; <label>:51:                                     ; preds = %2
480  %52 = mul nsw i32 %6, 24
481  br label %70
482
483; <label>:53:                                     ; preds = %2
484  %54 = mul nsw i32 %6, 25
485  br label %70
486
487; <label>:55:                                     ; preds = %2
488  %56 = mul nsw i32 %6, 26
489  br label %70
490
491; <label>:57:                                     ; preds = %2
492  %58 = mul nsw i32 %6, 27
493  br label %70
494
495; <label>:59:                                     ; preds = %2
496  %60 = mul nsw i32 %6, 28
497  br label %70
498
499; <label>:61:                                     ; preds = %2
500  %62 = mul nsw i32 %6, 29
501  br label %70
502
503; <label>:63:                                     ; preds = %2
504  %64 = mul nsw i32 %6, 30
505  br label %70
506
507; <label>:65:                                     ; preds = %2
508  %66 = mul nsw i32 %6, 31
509  br label %70
510
511; <label>:67:                                     ; preds = %2
512  %68 = shl nsw i32 %6, 5
513  br label %70
514
515; <label>:69:                                     ; preds = %2
516  br label %70
517
518; <label>:70:                                     ; preds = %2, %69, %67, %65, %63, %61, %59, %57, %55, %53, %51, %49, %47, %45, %43, %41, %39, %37, %35, %33, %31, %29, %27, %25, %23, %21, %19, %17, %15, %13, %11, %9, %7
519  %71 = phi i32 [ %8, %7 ], [ %10, %9 ], [ %12, %11 ], [ %14, %13 ], [ %16, %15 ], [ %18, %17 ], [ %20, %19 ], [ %22, %21 ], [ %24, %23 ], [ %26, %25 ], [ %28, %27 ], [ %30, %29 ], [ %32, %31 ], [ %34, %33 ], [ %36, %35 ], [ %38, %37 ], [ %40, %39 ], [ %42, %41 ], [ %44, %43 ], [ %46, %45 ], [ %48, %47 ], [ %50, %49 ], [ %52, %51 ], [ %54, %53 ], [ %56, %55 ], [ %58, %57 ], [ %60, %59 ], [ %62, %61 ], [ %64, %63 ], [ %66, %65 ], [ %68, %67 ], [ 0, %69 ], [ %6, %2 ]
520  ret i32 %71
521}
522
523; Function Attrs: norecurse nounwind readnone uwtable
524define i32 @foo() local_unnamed_addr #0 {
525; X86-LABEL: foo:
526; X86:       # %bb.0:
527; X86-NEXT:    pushl %ebp
528; X86-NEXT:    .cfi_def_cfa_offset 8
529; X86-NEXT:    pushl %ebx
530; X86-NEXT:    .cfi_def_cfa_offset 12
531; X86-NEXT:    pushl %edi
532; X86-NEXT:    .cfi_def_cfa_offset 16
533; X86-NEXT:    pushl %esi
534; X86-NEXT:    .cfi_def_cfa_offset 20
535; X86-NEXT:    .cfi_offset %esi, -20
536; X86-NEXT:    .cfi_offset %edi, -16
537; X86-NEXT:    .cfi_offset %ebx, -12
538; X86-NEXT:    .cfi_offset %ebp, -8
539; X86-NEXT:    pushl $0
540; X86-NEXT:    .cfi_adjust_cfa_offset 4
541; X86-NEXT:    pushl $1
542; X86-NEXT:    .cfi_adjust_cfa_offset 4
543; X86-NEXT:    calll mult@PLT
544; X86-NEXT:    addl $8, %esp
545; X86-NEXT:    .cfi_adjust_cfa_offset -8
546; X86-NEXT:    movl %eax, %esi
547; X86-NEXT:    xorl $1, %esi
548; X86-NEXT:    pushl $1
549; X86-NEXT:    .cfi_adjust_cfa_offset 4
550; X86-NEXT:    pushl $2
551; X86-NEXT:    .cfi_adjust_cfa_offset 4
552; X86-NEXT:    calll mult@PLT
553; X86-NEXT:    addl $8, %esp
554; X86-NEXT:    .cfi_adjust_cfa_offset -8
555; X86-NEXT:    movl %eax, %edi
556; X86-NEXT:    xorl $2, %edi
557; X86-NEXT:    orl %esi, %edi
558; X86-NEXT:    pushl $1
559; X86-NEXT:    .cfi_adjust_cfa_offset 4
560; X86-NEXT:    pushl $3
561; X86-NEXT:    .cfi_adjust_cfa_offset 4
562; X86-NEXT:    calll mult@PLT
563; X86-NEXT:    addl $8, %esp
564; X86-NEXT:    .cfi_adjust_cfa_offset -8
565; X86-NEXT:    movl %eax, %ebx
566; X86-NEXT:    xorl $3, %ebx
567; X86-NEXT:    pushl $2
568; X86-NEXT:    .cfi_adjust_cfa_offset 4
569; X86-NEXT:    pushl $4
570; X86-NEXT:    .cfi_adjust_cfa_offset 4
571; X86-NEXT:    calll mult@PLT
572; X86-NEXT:    addl $8, %esp
573; X86-NEXT:    .cfi_adjust_cfa_offset -8
574; X86-NEXT:    movl %eax, %esi
575; X86-NEXT:    xorl $4, %esi
576; X86-NEXT:    orl %ebx, %esi
577; X86-NEXT:    orl %edi, %esi
578; X86-NEXT:    pushl $2
579; X86-NEXT:    .cfi_adjust_cfa_offset 4
580; X86-NEXT:    pushl $5
581; X86-NEXT:    .cfi_adjust_cfa_offset 4
582; X86-NEXT:    calll mult@PLT
583; X86-NEXT:    addl $8, %esp
584; X86-NEXT:    .cfi_adjust_cfa_offset -8
585; X86-NEXT:    movl %eax, %edi
586; X86-NEXT:    xorl $5, %edi
587; X86-NEXT:    pushl $3
588; X86-NEXT:    .cfi_adjust_cfa_offset 4
589; X86-NEXT:    pushl $6
590; X86-NEXT:    .cfi_adjust_cfa_offset 4
591; X86-NEXT:    calll mult@PLT
592; X86-NEXT:    addl $8, %esp
593; X86-NEXT:    .cfi_adjust_cfa_offset -8
594; X86-NEXT:    movl %eax, %ebx
595; X86-NEXT:    xorl $6, %ebx
596; X86-NEXT:    orl %edi, %ebx
597; X86-NEXT:    pushl $3
598; X86-NEXT:    .cfi_adjust_cfa_offset 4
599; X86-NEXT:    pushl $7
600; X86-NEXT:    .cfi_adjust_cfa_offset 4
601; X86-NEXT:    calll mult@PLT
602; X86-NEXT:    addl $8, %esp
603; X86-NEXT:    .cfi_adjust_cfa_offset -8
604; X86-NEXT:    movl %eax, %edi
605; X86-NEXT:    xorl $7, %edi
606; X86-NEXT:    orl %ebx, %edi
607; X86-NEXT:    orl %esi, %edi
608; X86-NEXT:    pushl $4
609; X86-NEXT:    .cfi_adjust_cfa_offset 4
610; X86-NEXT:    pushl $8
611; X86-NEXT:    .cfi_adjust_cfa_offset 4
612; X86-NEXT:    calll mult@PLT
613; X86-NEXT:    addl $8, %esp
614; X86-NEXT:    .cfi_adjust_cfa_offset -8
615; X86-NEXT:    movl %eax, %ebx
616; X86-NEXT:    xorl $8, %ebx
617; X86-NEXT:    pushl $4
618; X86-NEXT:    .cfi_adjust_cfa_offset 4
619; X86-NEXT:    pushl $9
620; X86-NEXT:    .cfi_adjust_cfa_offset 4
621; X86-NEXT:    calll mult@PLT
622; X86-NEXT:    addl $8, %esp
623; X86-NEXT:    .cfi_adjust_cfa_offset -8
624; X86-NEXT:    movl %eax, %esi
625; X86-NEXT:    xorl $9, %esi
626; X86-NEXT:    orl %ebx, %esi
627; X86-NEXT:    pushl $5
628; X86-NEXT:    .cfi_adjust_cfa_offset 4
629; X86-NEXT:    pushl $10
630; X86-NEXT:    .cfi_adjust_cfa_offset 4
631; X86-NEXT:    calll mult@PLT
632; X86-NEXT:    addl $8, %esp
633; X86-NEXT:    .cfi_adjust_cfa_offset -8
634; X86-NEXT:    movl %eax, %ebx
635; X86-NEXT:    xorl $10, %ebx
636; X86-NEXT:    orl %esi, %ebx
637; X86-NEXT:    pushl $5
638; X86-NEXT:    .cfi_adjust_cfa_offset 4
639; X86-NEXT:    pushl $11
640; X86-NEXT:    .cfi_adjust_cfa_offset 4
641; X86-NEXT:    calll mult@PLT
642; X86-NEXT:    addl $8, %esp
643; X86-NEXT:    .cfi_adjust_cfa_offset -8
644; X86-NEXT:    movl %eax, %esi
645; X86-NEXT:    xorl $11, %esi
646; X86-NEXT:    orl %ebx, %esi
647; X86-NEXT:    orl %edi, %esi
648; X86-NEXT:    pushl $6
649; X86-NEXT:    .cfi_adjust_cfa_offset 4
650; X86-NEXT:    pushl $12
651; X86-NEXT:    .cfi_adjust_cfa_offset 4
652; X86-NEXT:    calll mult@PLT
653; X86-NEXT:    addl $8, %esp
654; X86-NEXT:    .cfi_adjust_cfa_offset -8
655; X86-NEXT:    movl %eax, %ebx
656; X86-NEXT:    xorl $12, %ebx
657; X86-NEXT:    pushl $6
658; X86-NEXT:    .cfi_adjust_cfa_offset 4
659; X86-NEXT:    pushl $13
660; X86-NEXT:    .cfi_adjust_cfa_offset 4
661; X86-NEXT:    calll mult@PLT
662; X86-NEXT:    addl $8, %esp
663; X86-NEXT:    .cfi_adjust_cfa_offset -8
664; X86-NEXT:    movl %eax, %edi
665; X86-NEXT:    xorl $13, %edi
666; X86-NEXT:    orl %ebx, %edi
667; X86-NEXT:    pushl $7
668; X86-NEXT:    .cfi_adjust_cfa_offset 4
669; X86-NEXT:    pushl $14
670; X86-NEXT:    .cfi_adjust_cfa_offset 4
671; X86-NEXT:    calll mult@PLT
672; X86-NEXT:    addl $8, %esp
673; X86-NEXT:    .cfi_adjust_cfa_offset -8
674; X86-NEXT:    movl %eax, %ebx
675; X86-NEXT:    xorl $14, %ebx
676; X86-NEXT:    orl %edi, %ebx
677; X86-NEXT:    pushl $7
678; X86-NEXT:    .cfi_adjust_cfa_offset 4
679; X86-NEXT:    pushl $15
680; X86-NEXT:    .cfi_adjust_cfa_offset 4
681; X86-NEXT:    calll mult@PLT
682; X86-NEXT:    addl $8, %esp
683; X86-NEXT:    .cfi_adjust_cfa_offset -8
684; X86-NEXT:    movl %eax, %ebp
685; X86-NEXT:    xorl $15, %ebp
686; X86-NEXT:    orl %ebx, %ebp
687; X86-NEXT:    pushl $8
688; X86-NEXT:    .cfi_adjust_cfa_offset 4
689; X86-NEXT:    pushl $16
690; X86-NEXT:    .cfi_adjust_cfa_offset 4
691; X86-NEXT:    calll mult@PLT
692; X86-NEXT:    addl $8, %esp
693; X86-NEXT:    .cfi_adjust_cfa_offset -8
694; X86-NEXT:    movl %eax, %edi
695; X86-NEXT:    xorl $16, %edi
696; X86-NEXT:    orl %ebp, %edi
697; X86-NEXT:    orl %esi, %edi
698; X86-NEXT:    pushl $8
699; X86-NEXT:    .cfi_adjust_cfa_offset 4
700; X86-NEXT:    pushl $17
701; X86-NEXT:    .cfi_adjust_cfa_offset 4
702; X86-NEXT:    calll mult@PLT
703; X86-NEXT:    addl $8, %esp
704; X86-NEXT:    .cfi_adjust_cfa_offset -8
705; X86-NEXT:    movl %eax, %ebx
706; X86-NEXT:    xorl $17, %ebx
707; X86-NEXT:    pushl $9
708; X86-NEXT:    .cfi_adjust_cfa_offset 4
709; X86-NEXT:    pushl $18
710; X86-NEXT:    .cfi_adjust_cfa_offset 4
711; X86-NEXT:    calll mult@PLT
712; X86-NEXT:    addl $8, %esp
713; X86-NEXT:    .cfi_adjust_cfa_offset -8
714; X86-NEXT:    movl %eax, %esi
715; X86-NEXT:    xorl $18, %esi
716; X86-NEXT:    orl %ebx, %esi
717; X86-NEXT:    pushl $9
718; X86-NEXT:    .cfi_adjust_cfa_offset 4
719; X86-NEXT:    pushl $19
720; X86-NEXT:    .cfi_adjust_cfa_offset 4
721; X86-NEXT:    calll mult@PLT
722; X86-NEXT:    addl $8, %esp
723; X86-NEXT:    .cfi_adjust_cfa_offset -8
724; X86-NEXT:    movl %eax, %ebx
725; X86-NEXT:    xorl $19, %ebx
726; X86-NEXT:    orl %esi, %ebx
727; X86-NEXT:    pushl $10
728; X86-NEXT:    .cfi_adjust_cfa_offset 4
729; X86-NEXT:    pushl $20
730; X86-NEXT:    .cfi_adjust_cfa_offset 4
731; X86-NEXT:    calll mult@PLT
732; X86-NEXT:    addl $8, %esp
733; X86-NEXT:    .cfi_adjust_cfa_offset -8
734; X86-NEXT:    movl %eax, %esi
735; X86-NEXT:    xorl $20, %esi
736; X86-NEXT:    orl %ebx, %esi
737; X86-NEXT:    pushl $10
738; X86-NEXT:    .cfi_adjust_cfa_offset 4
739; X86-NEXT:    pushl $21
740; X86-NEXT:    .cfi_adjust_cfa_offset 4
741; X86-NEXT:    calll mult@PLT
742; X86-NEXT:    addl $8, %esp
743; X86-NEXT:    .cfi_adjust_cfa_offset -8
744; X86-NEXT:    movl %eax, %ebx
745; X86-NEXT:    xorl $21, %ebx
746; X86-NEXT:    orl %esi, %ebx
747; X86-NEXT:    pushl $11
748; X86-NEXT:    .cfi_adjust_cfa_offset 4
749; X86-NEXT:    pushl $22
750; X86-NEXT:    .cfi_adjust_cfa_offset 4
751; X86-NEXT:    calll mult@PLT
752; X86-NEXT:    addl $8, %esp
753; X86-NEXT:    .cfi_adjust_cfa_offset -8
754; X86-NEXT:    movl %eax, %esi
755; X86-NEXT:    xorl $22, %esi
756; X86-NEXT:    orl %ebx, %esi
757; X86-NEXT:    orl %edi, %esi
758; X86-NEXT:    pushl $11
759; X86-NEXT:    .cfi_adjust_cfa_offset 4
760; X86-NEXT:    pushl $23
761; X86-NEXT:    .cfi_adjust_cfa_offset 4
762; X86-NEXT:    calll mult@PLT
763; X86-NEXT:    addl $8, %esp
764; X86-NEXT:    .cfi_adjust_cfa_offset -8
765; X86-NEXT:    movl %eax, %ebx
766; X86-NEXT:    xorl $23, %ebx
767; X86-NEXT:    pushl $12
768; X86-NEXT:    .cfi_adjust_cfa_offset 4
769; X86-NEXT:    pushl $24
770; X86-NEXT:    .cfi_adjust_cfa_offset 4
771; X86-NEXT:    calll mult@PLT
772; X86-NEXT:    addl $8, %esp
773; X86-NEXT:    .cfi_adjust_cfa_offset -8
774; X86-NEXT:    movl %eax, %edi
775; X86-NEXT:    xorl $24, %edi
776; X86-NEXT:    orl %ebx, %edi
777; X86-NEXT:    pushl $12
778; X86-NEXT:    .cfi_adjust_cfa_offset 4
779; X86-NEXT:    pushl $25
780; X86-NEXT:    .cfi_adjust_cfa_offset 4
781; X86-NEXT:    calll mult@PLT
782; X86-NEXT:    addl $8, %esp
783; X86-NEXT:    .cfi_adjust_cfa_offset -8
784; X86-NEXT:    movl %eax, %ebx
785; X86-NEXT:    xorl $25, %ebx
786; X86-NEXT:    orl %edi, %ebx
787; X86-NEXT:    pushl $13
788; X86-NEXT:    .cfi_adjust_cfa_offset 4
789; X86-NEXT:    pushl $26
790; X86-NEXT:    .cfi_adjust_cfa_offset 4
791; X86-NEXT:    calll mult@PLT
792; X86-NEXT:    addl $8, %esp
793; X86-NEXT:    .cfi_adjust_cfa_offset -8
794; X86-NEXT:    movl %eax, %edi
795; X86-NEXT:    xorl $26, %edi
796; X86-NEXT:    orl %ebx, %edi
797; X86-NEXT:    pushl $13
798; X86-NEXT:    .cfi_adjust_cfa_offset 4
799; X86-NEXT:    pushl $27
800; X86-NEXT:    .cfi_adjust_cfa_offset 4
801; X86-NEXT:    calll mult@PLT
802; X86-NEXT:    addl $8, %esp
803; X86-NEXT:    .cfi_adjust_cfa_offset -8
804; X86-NEXT:    movl %eax, %ebx
805; X86-NEXT:    xorl $27, %ebx
806; X86-NEXT:    orl %edi, %ebx
807; X86-NEXT:    pushl $14
808; X86-NEXT:    .cfi_adjust_cfa_offset 4
809; X86-NEXT:    pushl $28
810; X86-NEXT:    .cfi_adjust_cfa_offset 4
811; X86-NEXT:    calll mult@PLT
812; X86-NEXT:    addl $8, %esp
813; X86-NEXT:    .cfi_adjust_cfa_offset -8
814; X86-NEXT:    movl %eax, %ebp
815; X86-NEXT:    xorl $28, %ebp
816; X86-NEXT:    orl %ebx, %ebp
817; X86-NEXT:    pushl $14
818; X86-NEXT:    .cfi_adjust_cfa_offset 4
819; X86-NEXT:    pushl $29
820; X86-NEXT:    .cfi_adjust_cfa_offset 4
821; X86-NEXT:    calll mult@PLT
822; X86-NEXT:    addl $8, %esp
823; X86-NEXT:    .cfi_adjust_cfa_offset -8
824; X86-NEXT:    movl %eax, %edi
825; X86-NEXT:    xorl $29, %edi
826; X86-NEXT:    orl %ebp, %edi
827; X86-NEXT:    orl %esi, %edi
828; X86-NEXT:    pushl $15
829; X86-NEXT:    .cfi_adjust_cfa_offset 4
830; X86-NEXT:    pushl $30
831; X86-NEXT:    .cfi_adjust_cfa_offset 4
832; X86-NEXT:    calll mult@PLT
833; X86-NEXT:    addl $8, %esp
834; X86-NEXT:    .cfi_adjust_cfa_offset -8
835; X86-NEXT:    movl %eax, %ebx
836; X86-NEXT:    xorl $30, %ebx
837; X86-NEXT:    pushl $15
838; X86-NEXT:    .cfi_adjust_cfa_offset 4
839; X86-NEXT:    pushl $31
840; X86-NEXT:    .cfi_adjust_cfa_offset 4
841; X86-NEXT:    calll mult@PLT
842; X86-NEXT:    addl $8, %esp
843; X86-NEXT:    .cfi_adjust_cfa_offset -8
844; X86-NEXT:    movl %eax, %esi
845; X86-NEXT:    xorl $31, %esi
846; X86-NEXT:    orl %ebx, %esi
847; X86-NEXT:    orl %edi, %esi
848; X86-NEXT:    pushl $16
849; X86-NEXT:    .cfi_adjust_cfa_offset 4
850; X86-NEXT:    pushl $32
851; X86-NEXT:    .cfi_adjust_cfa_offset 4
852; X86-NEXT:    calll mult@PLT
853; X86-NEXT:    addl $8, %esp
854; X86-NEXT:    .cfi_adjust_cfa_offset -8
855; X86-NEXT:    xorl $32, %eax
856; X86-NEXT:    xorl %ecx, %ecx
857; X86-NEXT:    orl %esi, %eax
858; X86-NEXT:    setne %cl
859; X86-NEXT:    negl %ecx
860; X86-NEXT:    movl %ecx, %eax
861; X86-NEXT:    popl %esi
862; X86-NEXT:    .cfi_def_cfa_offset 16
863; X86-NEXT:    popl %edi
864; X86-NEXT:    .cfi_def_cfa_offset 12
865; X86-NEXT:    popl %ebx
866; X86-NEXT:    .cfi_def_cfa_offset 8
867; X86-NEXT:    popl %ebp
868; X86-NEXT:    .cfi_def_cfa_offset 4
869; X86-NEXT:    retl
870;
871; X64-HSW-LABEL: foo:
872; X64-HSW:       # %bb.0:
873; X64-HSW-NEXT:    pushq %rbp
874; X64-HSW-NEXT:    .cfi_def_cfa_offset 16
875; X64-HSW-NEXT:    pushq %r15
876; X64-HSW-NEXT:    .cfi_def_cfa_offset 24
877; X64-HSW-NEXT:    pushq %r14
878; X64-HSW-NEXT:    .cfi_def_cfa_offset 32
879; X64-HSW-NEXT:    pushq %rbx
880; X64-HSW-NEXT:    .cfi_def_cfa_offset 40
881; X64-HSW-NEXT:    pushq %rax
882; X64-HSW-NEXT:    .cfi_def_cfa_offset 48
883; X64-HSW-NEXT:    .cfi_offset %rbx, -40
884; X64-HSW-NEXT:    .cfi_offset %r14, -32
885; X64-HSW-NEXT:    .cfi_offset %r15, -24
886; X64-HSW-NEXT:    .cfi_offset %rbp, -16
887; X64-HSW-NEXT:    movl $1, %edi
888; X64-HSW-NEXT:    xorl %esi, %esi
889; X64-HSW-NEXT:    callq mult@PLT
890; X64-HSW-NEXT:    movl %eax, %ebx
891; X64-HSW-NEXT:    xorl $1, %ebx
892; X64-HSW-NEXT:    movl $2, %edi
893; X64-HSW-NEXT:    movl $1, %esi
894; X64-HSW-NEXT:    callq mult@PLT
895; X64-HSW-NEXT:    movl %eax, %ebp
896; X64-HSW-NEXT:    xorl $2, %ebp
897; X64-HSW-NEXT:    orl %ebx, %ebp
898; X64-HSW-NEXT:    movl $3, %edi
899; X64-HSW-NEXT:    movl $1, %esi
900; X64-HSW-NEXT:    callq mult@PLT
901; X64-HSW-NEXT:    movl %eax, %r14d
902; X64-HSW-NEXT:    xorl $3, %r14d
903; X64-HSW-NEXT:    movl $4, %edi
904; X64-HSW-NEXT:    movl $2, %esi
905; X64-HSW-NEXT:    callq mult@PLT
906; X64-HSW-NEXT:    movl %eax, %ebx
907; X64-HSW-NEXT:    xorl $4, %ebx
908; X64-HSW-NEXT:    orl %r14d, %ebx
909; X64-HSW-NEXT:    orl %ebp, %ebx
910; X64-HSW-NEXT:    movl $5, %edi
911; X64-HSW-NEXT:    movl $2, %esi
912; X64-HSW-NEXT:    callq mult@PLT
913; X64-HSW-NEXT:    movl %eax, %ebp
914; X64-HSW-NEXT:    xorl $5, %ebp
915; X64-HSW-NEXT:    movl $6, %edi
916; X64-HSW-NEXT:    movl $3, %esi
917; X64-HSW-NEXT:    callq mult@PLT
918; X64-HSW-NEXT:    movl %eax, %r14d
919; X64-HSW-NEXT:    xorl $6, %r14d
920; X64-HSW-NEXT:    orl %ebp, %r14d
921; X64-HSW-NEXT:    movl $7, %edi
922; X64-HSW-NEXT:    movl $3, %esi
923; X64-HSW-NEXT:    callq mult@PLT
924; X64-HSW-NEXT:    movl %eax, %ebp
925; X64-HSW-NEXT:    xorl $7, %ebp
926; X64-HSW-NEXT:    orl %r14d, %ebp
927; X64-HSW-NEXT:    orl %ebx, %ebp
928; X64-HSW-NEXT:    movl $8, %edi
929; X64-HSW-NEXT:    movl $4, %esi
930; X64-HSW-NEXT:    callq mult@PLT
931; X64-HSW-NEXT:    movl %eax, %ebx
932; X64-HSW-NEXT:    xorl $8, %ebx
933; X64-HSW-NEXT:    movl $9, %edi
934; X64-HSW-NEXT:    movl $4, %esi
935; X64-HSW-NEXT:    callq mult@PLT
936; X64-HSW-NEXT:    movl %eax, %r14d
937; X64-HSW-NEXT:    xorl $9, %r14d
938; X64-HSW-NEXT:    orl %ebx, %r14d
939; X64-HSW-NEXT:    movl $10, %edi
940; X64-HSW-NEXT:    movl $5, %esi
941; X64-HSW-NEXT:    callq mult@PLT
942; X64-HSW-NEXT:    movl %eax, %r15d
943; X64-HSW-NEXT:    xorl $10, %r15d
944; X64-HSW-NEXT:    orl %r14d, %r15d
945; X64-HSW-NEXT:    movl $11, %edi
946; X64-HSW-NEXT:    movl $5, %esi
947; X64-HSW-NEXT:    callq mult@PLT
948; X64-HSW-NEXT:    movl %eax, %ebx
949; X64-HSW-NEXT:    xorl $11, %ebx
950; X64-HSW-NEXT:    orl %r15d, %ebx
951; X64-HSW-NEXT:    orl %ebp, %ebx
952; X64-HSW-NEXT:    movl $12, %edi
953; X64-HSW-NEXT:    movl $6, %esi
954; X64-HSW-NEXT:    callq mult@PLT
955; X64-HSW-NEXT:    movl %eax, %ebp
956; X64-HSW-NEXT:    xorl $12, %ebp
957; X64-HSW-NEXT:    movl $13, %edi
958; X64-HSW-NEXT:    movl $6, %esi
959; X64-HSW-NEXT:    callq mult@PLT
960; X64-HSW-NEXT:    movl %eax, %r14d
961; X64-HSW-NEXT:    xorl $13, %r14d
962; X64-HSW-NEXT:    orl %ebp, %r14d
963; X64-HSW-NEXT:    movl $14, %edi
964; X64-HSW-NEXT:    movl $7, %esi
965; X64-HSW-NEXT:    callq mult@PLT
966; X64-HSW-NEXT:    movl %eax, %ebp
967; X64-HSW-NEXT:    xorl $14, %ebp
968; X64-HSW-NEXT:    orl %r14d, %ebp
969; X64-HSW-NEXT:    movl $15, %edi
970; X64-HSW-NEXT:    movl $7, %esi
971; X64-HSW-NEXT:    callq mult@PLT
972; X64-HSW-NEXT:    movl %eax, %r14d
973; X64-HSW-NEXT:    xorl $15, %r14d
974; X64-HSW-NEXT:    orl %ebp, %r14d
975; X64-HSW-NEXT:    movl $16, %edi
976; X64-HSW-NEXT:    movl $8, %esi
977; X64-HSW-NEXT:    callq mult@PLT
978; X64-HSW-NEXT:    movl %eax, %ebp
979; X64-HSW-NEXT:    xorl $16, %ebp
980; X64-HSW-NEXT:    orl %r14d, %ebp
981; X64-HSW-NEXT:    orl %ebx, %ebp
982; X64-HSW-NEXT:    movl $17, %edi
983; X64-HSW-NEXT:    movl $8, %esi
984; X64-HSW-NEXT:    callq mult@PLT
985; X64-HSW-NEXT:    movl %eax, %ebx
986; X64-HSW-NEXT:    xorl $17, %ebx
987; X64-HSW-NEXT:    movl $18, %edi
988; X64-HSW-NEXT:    movl $9, %esi
989; X64-HSW-NEXT:    callq mult@PLT
990; X64-HSW-NEXT:    movl %eax, %r14d
991; X64-HSW-NEXT:    xorl $18, %r14d
992; X64-HSW-NEXT:    orl %ebx, %r14d
993; X64-HSW-NEXT:    movl $19, %edi
994; X64-HSW-NEXT:    movl $9, %esi
995; X64-HSW-NEXT:    callq mult@PLT
996; X64-HSW-NEXT:    movl %eax, %ebx
997; X64-HSW-NEXT:    xorl $19, %ebx
998; X64-HSW-NEXT:    orl %r14d, %ebx
999; X64-HSW-NEXT:    movl $20, %edi
1000; X64-HSW-NEXT:    movl $10, %esi
1001; X64-HSW-NEXT:    callq mult@PLT
1002; X64-HSW-NEXT:    movl %eax, %r14d
1003; X64-HSW-NEXT:    xorl $20, %r14d
1004; X64-HSW-NEXT:    orl %ebx, %r14d
1005; X64-HSW-NEXT:    movl $21, %edi
1006; X64-HSW-NEXT:    movl $10, %esi
1007; X64-HSW-NEXT:    callq mult@PLT
1008; X64-HSW-NEXT:    movl %eax, %r15d
1009; X64-HSW-NEXT:    xorl $21, %r15d
1010; X64-HSW-NEXT:    orl %r14d, %r15d
1011; X64-HSW-NEXT:    movl $22, %edi
1012; X64-HSW-NEXT:    movl $11, %esi
1013; X64-HSW-NEXT:    callq mult@PLT
1014; X64-HSW-NEXT:    movl %eax, %ebx
1015; X64-HSW-NEXT:    xorl $22, %ebx
1016; X64-HSW-NEXT:    orl %r15d, %ebx
1017; X64-HSW-NEXT:    orl %ebp, %ebx
1018; X64-HSW-NEXT:    movl $23, %edi
1019; X64-HSW-NEXT:    movl $11, %esi
1020; X64-HSW-NEXT:    callq mult@PLT
1021; X64-HSW-NEXT:    movl %eax, %ebp
1022; X64-HSW-NEXT:    xorl $23, %ebp
1023; X64-HSW-NEXT:    movl $24, %edi
1024; X64-HSW-NEXT:    movl $12, %esi
1025; X64-HSW-NEXT:    callq mult@PLT
1026; X64-HSW-NEXT:    movl %eax, %r14d
1027; X64-HSW-NEXT:    xorl $24, %r14d
1028; X64-HSW-NEXT:    orl %ebp, %r14d
1029; X64-HSW-NEXT:    movl $25, %edi
1030; X64-HSW-NEXT:    movl $12, %esi
1031; X64-HSW-NEXT:    callq mult@PLT
1032; X64-HSW-NEXT:    movl %eax, %ebp
1033; X64-HSW-NEXT:    xorl $25, %ebp
1034; X64-HSW-NEXT:    orl %r14d, %ebp
1035; X64-HSW-NEXT:    movl $26, %edi
1036; X64-HSW-NEXT:    movl $13, %esi
1037; X64-HSW-NEXT:    callq mult@PLT
1038; X64-HSW-NEXT:    movl %eax, %r14d
1039; X64-HSW-NEXT:    xorl $26, %r14d
1040; X64-HSW-NEXT:    orl %ebp, %r14d
1041; X64-HSW-NEXT:    movl $27, %edi
1042; X64-HSW-NEXT:    movl $13, %esi
1043; X64-HSW-NEXT:    callq mult@PLT
1044; X64-HSW-NEXT:    movl %eax, %ebp
1045; X64-HSW-NEXT:    xorl $27, %ebp
1046; X64-HSW-NEXT:    orl %r14d, %ebp
1047; X64-HSW-NEXT:    movl $28, %edi
1048; X64-HSW-NEXT:    movl $14, %esi
1049; X64-HSW-NEXT:    callq mult@PLT
1050; X64-HSW-NEXT:    movl %eax, %r14d
1051; X64-HSW-NEXT:    xorl $28, %r14d
1052; X64-HSW-NEXT:    orl %ebp, %r14d
1053; X64-HSW-NEXT:    movl $29, %edi
1054; X64-HSW-NEXT:    movl $14, %esi
1055; X64-HSW-NEXT:    callq mult@PLT
1056; X64-HSW-NEXT:    movl %eax, %ebp
1057; X64-HSW-NEXT:    xorl $29, %ebp
1058; X64-HSW-NEXT:    orl %r14d, %ebp
1059; X64-HSW-NEXT:    orl %ebx, %ebp
1060; X64-HSW-NEXT:    movl $30, %edi
1061; X64-HSW-NEXT:    movl $15, %esi
1062; X64-HSW-NEXT:    callq mult@PLT
1063; X64-HSW-NEXT:    movl %eax, %ebx
1064; X64-HSW-NEXT:    xorl $30, %ebx
1065; X64-HSW-NEXT:    movl $31, %edi
1066; X64-HSW-NEXT:    movl $15, %esi
1067; X64-HSW-NEXT:    callq mult@PLT
1068; X64-HSW-NEXT:    movl %eax, %r14d
1069; X64-HSW-NEXT:    xorl $31, %r14d
1070; X64-HSW-NEXT:    orl %ebx, %r14d
1071; X64-HSW-NEXT:    orl %ebp, %r14d
1072; X64-HSW-NEXT:    movl $32, %edi
1073; X64-HSW-NEXT:    movl $16, %esi
1074; X64-HSW-NEXT:    callq mult@PLT
1075; X64-HSW-NEXT:    xorl $32, %eax
1076; X64-HSW-NEXT:    xorl %ecx, %ecx
1077; X64-HSW-NEXT:    orl %r14d, %eax
1078; X64-HSW-NEXT:    setne %cl
1079; X64-HSW-NEXT:    negl %ecx
1080; X64-HSW-NEXT:    movl %ecx, %eax
1081; X64-HSW-NEXT:    addq $8, %rsp
1082; X64-HSW-NEXT:    .cfi_def_cfa_offset 40
1083; X64-HSW-NEXT:    popq %rbx
1084; X64-HSW-NEXT:    .cfi_def_cfa_offset 32
1085; X64-HSW-NEXT:    popq %r14
1086; X64-HSW-NEXT:    .cfi_def_cfa_offset 24
1087; X64-HSW-NEXT:    popq %r15
1088; X64-HSW-NEXT:    .cfi_def_cfa_offset 16
1089; X64-HSW-NEXT:    popq %rbp
1090; X64-HSW-NEXT:    .cfi_def_cfa_offset 8
1091; X64-HSW-NEXT:    retq
1092  %1 = tail call i32 @mult(i32 1, i32 0)
1093  %2 = icmp ne i32 %1, 1
1094  %3 = tail call i32 @mult(i32 2, i32 1)
1095  %4 = icmp ne i32 %3, 2
1096  %5 = or i1 %2, %4
1097  %6 = tail call i32 @mult(i32 3, i32 1)
1098  %7 = icmp ne i32 %6, 3
1099  %8 = or i1 %5, %7
1100  %9 = tail call i32 @mult(i32 4, i32 2)
1101  %10 = icmp ne i32 %9, 4
1102  %11 = or i1 %8, %10
1103  %12 = tail call i32 @mult(i32 5, i32 2)
1104  %13 = icmp ne i32 %12, 5
1105  %14 = or i1 %11, %13
1106  %15 = tail call i32 @mult(i32 6, i32 3)
1107  %16 = icmp ne i32 %15, 6
1108  %17 = or i1 %14, %16
1109  %18 = tail call i32 @mult(i32 7, i32 3)
1110  %19 = icmp ne i32 %18, 7
1111  %20 = or i1 %17, %19
1112  %21 = tail call i32 @mult(i32 8, i32 4)
1113  %22 = icmp ne i32 %21, 8
1114  %23 = or i1 %20, %22
1115  %24 = tail call i32 @mult(i32 9, i32 4)
1116  %25 = icmp ne i32 %24, 9
1117  %26 = or i1 %23, %25
1118  %27 = tail call i32 @mult(i32 10, i32 5)
1119  %28 = icmp ne i32 %27, 10
1120  %29 = or i1 %26, %28
1121  %30 = tail call i32 @mult(i32 11, i32 5)
1122  %31 = icmp ne i32 %30, 11
1123  %32 = or i1 %29, %31
1124  %33 = tail call i32 @mult(i32 12, i32 6)
1125  %34 = icmp ne i32 %33, 12
1126  %35 = or i1 %32, %34
1127  %36 = tail call i32 @mult(i32 13, i32 6)
1128  %37 = icmp ne i32 %36, 13
1129  %38 = or i1 %35, %37
1130  %39 = tail call i32 @mult(i32 14, i32 7)
1131  %40 = icmp ne i32 %39, 14
1132  %41 = or i1 %38, %40
1133  %42 = tail call i32 @mult(i32 15, i32 7)
1134  %43 = icmp ne i32 %42, 15
1135  %44 = or i1 %41, %43
1136  %45 = tail call i32 @mult(i32 16, i32 8)
1137  %46 = icmp ne i32 %45, 16
1138  %47 = or i1 %44, %46
1139  %48 = tail call i32 @mult(i32 17, i32 8)
1140  %49 = icmp ne i32 %48, 17
1141  %50 = or i1 %47, %49
1142  %51 = tail call i32 @mult(i32 18, i32 9)
1143  %52 = icmp ne i32 %51, 18
1144  %53 = or i1 %50, %52
1145  %54 = tail call i32 @mult(i32 19, i32 9)
1146  %55 = icmp ne i32 %54, 19
1147  %56 = or i1 %53, %55
1148  %57 = tail call i32 @mult(i32 20, i32 10)
1149  %58 = icmp ne i32 %57, 20
1150  %59 = or i1 %56, %58
1151  %60 = tail call i32 @mult(i32 21, i32 10)
1152  %61 = icmp ne i32 %60, 21
1153  %62 = or i1 %59, %61
1154  %63 = tail call i32 @mult(i32 22, i32 11)
1155  %64 = icmp ne i32 %63, 22
1156  %65 = or i1 %62, %64
1157  %66 = tail call i32 @mult(i32 23, i32 11)
1158  %67 = icmp ne i32 %66, 23
1159  %68 = or i1 %65, %67
1160  %69 = tail call i32 @mult(i32 24, i32 12)
1161  %70 = icmp ne i32 %69, 24
1162  %71 = or i1 %68, %70
1163  %72 = tail call i32 @mult(i32 25, i32 12)
1164  %73 = icmp ne i32 %72, 25
1165  %74 = or i1 %71, %73
1166  %75 = tail call i32 @mult(i32 26, i32 13)
1167  %76 = icmp ne i32 %75, 26
1168  %77 = or i1 %74, %76
1169  %78 = tail call i32 @mult(i32 27, i32 13)
1170  %79 = icmp ne i32 %78, 27
1171  %80 = or i1 %77, %79
1172  %81 = tail call i32 @mult(i32 28, i32 14)
1173  %82 = icmp ne i32 %81, 28
1174  %83 = or i1 %80, %82
1175  %84 = tail call i32 @mult(i32 29, i32 14)
1176  %85 = icmp ne i32 %84, 29
1177  %86 = or i1 %83, %85
1178  %87 = tail call i32 @mult(i32 30, i32 15)
1179  %88 = icmp ne i32 %87, 30
1180  %89 = or i1 %86, %88
1181  %90 = tail call i32 @mult(i32 31, i32 15)
1182  %91 = icmp ne i32 %90, 31
1183  %92 = or i1 %89, %91
1184  %93 = tail call i32 @mult(i32 32, i32 16)
1185  %94 = icmp ne i32 %93, 32
1186  %95 = or i1 %92, %94
1187  %96 = sext i1 %95 to i32
1188  ret i32 %96
1189}
1190
1191attributes #0 = { norecurse nounwind readnone uwtable  }
1192