xref: /llvm-project/llvm/test/CodeGen/PowerPC/fast-isel-branch.ll (revision ff9af4c43ad71eeba2cabe99609cfaa0fd54c1d0)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=ELF64
3; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff < %s | FileCheck %s -check-prefix=AIX64
4
5@x = global i32 1000, align 4
6
7define signext i32 @bar() #0 {
8; ELF64-LABEL: bar:
9; ELF64:       # %bb.0: # %entry
10; ELF64-NEXT:    mflr 0
11; ELF64-NEXT:    stdu 1, -112(1)
12; ELF64-NEXT:    std 0, 128(1)
13; ELF64-NEXT:    .cfi_def_cfa_offset 112
14; ELF64-NEXT:    .cfi_offset lr, 16
15; ELF64-NEXT:    li 3, 0
16; ELF64-NEXT:    stw 3, 108(1)
17; ELF64-NEXT:    li 3, 0
18; ELF64-NEXT:    stw 3, 104(1)
19; ELF64-NEXT:  .LBB0_1: # %for.cond
20; ELF64-NEXT:    #
21; ELF64-NEXT:    lwz 3, 104(1)
22; ELF64-NEXT:    addis 4, 2, .LC0@toc@ha
23; ELF64-NEXT:    ld 4, .LC0@toc@l(4)
24; ELF64-NEXT:    lwz 4, 0(4)
25; ELF64-NEXT:    cmpw 3, 4
26; ELF64-NEXT:    bge 0, .LBB0_4
27; ELF64-NEXT:  # %bb.2: # %for.body
28; ELF64-NEXT:    #
29; ELF64-NEXT:    bl foo
30; ELF64-NEXT:    nop
31; ELF64-NEXT:  # %bb.3: # %for.inc
32; ELF64-NEXT:    #
33; ELF64-NEXT:    lwz 3, 104(1)
34; ELF64-NEXT:    addi 3, 3, 1
35; ELF64-NEXT:    stw 3, 104(1)
36; ELF64-NEXT:    b .LBB0_1
37; ELF64-NEXT:  .LBB0_4: # %for.end
38; ELF64-NEXT:    li 3, 0
39; ELF64-NEXT:    addi 1, 1, 112
40; ELF64-NEXT:    ld 0, 16(1)
41; ELF64-NEXT:    mtlr 0
42; ELF64-NEXT:    blr
43;
44; AIX64-LABEL: bar:
45; AIX64:       # %bb.0: # %entry
46; AIX64-NEXT:    mflr 0
47; AIX64-NEXT:    stdu 1, -128(1)
48; AIX64-NEXT:    std 0, 144(1)
49; AIX64-NEXT:    li 3, 0
50; AIX64-NEXT:    stw 3, 124(1)
51; AIX64-NEXT:    li 3, 0
52; AIX64-NEXT:    stw 3, 120(1)
53; AIX64-NEXT:  L..BB0_1: # %for.cond
54; AIX64-NEXT:    #
55; AIX64-NEXT:    lwz 3, 120(1)
56; AIX64-NEXT:    ld 4, L..C0(2) # @x
57; AIX64-NEXT:    lwz 4, 0(4)
58; AIX64-NEXT:    cmpw 3, 4
59; AIX64-NEXT:    bge 0, L..BB0_4
60; AIX64-NEXT:  # %bb.2: # %for.body
61; AIX64-NEXT:    #
62; AIX64-NEXT:    bl .foo[PR]
63; AIX64-NEXT:    nop
64; AIX64-NEXT:  # %bb.3: # %for.inc
65; AIX64-NEXT:    #
66; AIX64-NEXT:    lwz 3, 120(1)
67; AIX64-NEXT:    addi 3, 3, 1
68; AIX64-NEXT:    stw 3, 120(1)
69; AIX64-NEXT:    b L..BB0_1
70; AIX64-NEXT:  L..BB0_4: # %for.end
71; AIX64-NEXT:    li 3, 0
72; AIX64-NEXT:    addi 1, 1, 128
73; AIX64-NEXT:    ld 0, 16(1)
74; AIX64-NEXT:    mtlr 0
75; AIX64-NEXT:    blr
76entry:
77  %retval = alloca i32, align 4
78  %i = alloca i32, align 4
79  store i32 0, ptr %retval, align 4
80  store i32 0, ptr %i, align 4
81  br label %for.cond
82
83for.cond:
84  %0 = load i32, ptr %i, align 4
85  %1 = load i32, ptr @x, align 4
86  %cmp = icmp slt i32 %0, %1
87  br i1 %cmp, label %for.body, label %for.end
88
89for.body:
90  call void @foo()
91  br label %for.inc
92
93for.inc:
94  %2 = load i32, ptr %i, align 4
95  %inc = add nsw i32 %2, 1
96  store i32 %inc, ptr %i, align 4
97  br label %for.cond
98
99for.end:
100  ret i32 0
101}
102
103declare void @foo(...)
104
105attributes #0 = { optnone noinline }
106