xref: /llvm-project/llvm/test/CodeGen/X86/pr44412.ll (revision e6bf48d11047e970cb24554a01b65b566d6b5d22)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2;RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
3
4define void @bar(i32 %0, i32 %1) nounwind {
5; CHECK-LABEL: bar:
6; CHECK:       # %bb.0:
7; CHECK-NEXT:    testl %edi, %edi
8; CHECK-NEXT:    je .LBB0_4
9; CHECK-NEXT:  # %bb.1: # %.preheader
10; CHECK-NEXT:    pushq %rbx
11; CHECK-NEXT:    movl %edi, %ebx
12; CHECK-NEXT:    decl %ebx
13; CHECK-NEXT:    .p2align 4
14; CHECK-NEXT:  .LBB0_2: # =>This Inner Loop Header: Depth=1
15; CHECK-NEXT:    movl %ebx, %edi
16; CHECK-NEXT:    callq foo@PLT
17; CHECK-NEXT:    addl $-1, %ebx
18; CHECK-NEXT:    jb .LBB0_2
19; CHECK-NEXT:  # %bb.3:
20; CHECK-NEXT:    popq %rbx
21; CHECK-NEXT:  .LBB0_4:
22; CHECK-NEXT:    retq
23  %3 = icmp eq i32 %0, 0
24  br i1 %3, label %8, label %4
25
264:                                                ; preds = %2, %4
27  %5 = phi i32 [ %6, %4 ], [ %0, %2 ]
28  %6 = add nsw i32 %5, -1
29  tail call void @foo(i32 %6)
30  %7 = icmp eq i32 %6, 0
31  br i1 %7, label %8, label %4
32
338:                                                ; preds = %4, %2
34  ret void
35}
36
37define void @baz(i32 %0, i32 %1) nounwind {
38; CHECK-LABEL: baz:
39; CHECK:       # %bb.0:
40; CHECK-NEXT:    testl %edi, %edi
41; CHECK-NEXT:    je .LBB1_4
42; CHECK-NEXT:  # %bb.1: # %.preheader
43; CHECK-NEXT:    pushq %rbx
44; CHECK-NEXT:    movl %edi, %ebx
45; CHECK-NEXT:    decl %ebx
46; CHECK-NEXT:    .p2align 4
47; CHECK-NEXT:  .LBB1_2: # =>This Inner Loop Header: Depth=1
48; CHECK-NEXT:    movl %ebx, %edi
49; CHECK-NEXT:    callq foo@PLT
50; CHECK-NEXT:    addl $-1, %ebx
51; CHECK-NEXT:    jae .LBB1_2
52; CHECK-NEXT:  # %bb.3:
53; CHECK-NEXT:    popq %rbx
54; CHECK-NEXT:  .LBB1_4:
55; CHECK-NEXT:    retq
56  %3 = icmp eq i32 %0, 0
57  br i1 %3, label %8, label %4
58
594:                                                ; preds = %2, %4
60  %5 = phi i32 [ %6, %4 ], [ %0, %2 ]
61  %6 = add nsw i32 %5, -1
62  tail call void @foo(i32 %6)
63  %7 = icmp ne i32 %6, 0
64  br i1 %7, label %8, label %4
65
668:                                                ; preds = %4, %2
67  ret void
68}
69
70declare void @foo(i32)
71