xref: /llvm-project/llvm/test/CodeGen/ARM/ldst-opt-lr-restored.ll (revision 749384c08e042739342c88b521c8ba5dac1b9276)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2; RUN: llc -mtriple thumbv7a-none-eabi < %s | FileCheck %s
3
4@val0 = global i32 0, align 4
5@val1 = global i32 0, align 4
6@val2 = global i32 0, align 4
7
8define i32 @foo(ptr %ctx) {
9; CHECK-LABEL: foo:
10; CHECK:       @ %bb.0: @ %entry
11; CHECK-NEXT:    cbz r0, .LBB0_2
12; CHECK-NEXT:  @ %bb.1: @ %if.end
13; CHECK-NEXT:    movw r12, :lower16:val2
14; CHECK-NEXT:    movw r3, :lower16:val1
15; CHECK-NEXT:    movw r2, :lower16:val0
16; CHECK-NEXT:    mov r1, r0
17; CHECK-NEXT:    movs r0, #0
18; CHECK-NEXT:    movt r12, :upper16:val2
19; CHECK-NEXT:    movt r3, :upper16:val1
20; CHECK-NEXT:    movt r2, :upper16:val0
21; CHECK-NEXT:    str r2, [r1, #4]
22; CHECK-NEXT:    str r3, [r1, #8]
23; CHECK-NEXT:    str.w r12, [r1, #12]
24; CHECK-NEXT:    str r0, [r1, #16]
25; CHECK-NEXT:    bx lr
26; CHECK-NEXT:  .LBB0_2: @ %if.then
27; CHECK-NEXT:    .save {r7, lr}
28; CHECK-NEXT:    push {r7, lr}
29; CHECK-NEXT:    bl bar
30; CHECK-NEXT:    mov.w r0, #-1
31; CHECK-NEXT:    pop {r7, pc}
32entry:
33  %tobool.not = icmp eq ptr %ctx, null
34  br i1 %tobool.not, label %if.then, label %if.end
35
36if.then:                                          ; preds = %entry
37  tail call void @bar() #2
38  br label %return
39
40if.end:                                           ; preds = %entry
41  %cmd_a = getelementptr inbounds i8, ptr %ctx, i32 4
42  store ptr @val0, ptr %cmd_a, align 4
43  %cmd_b = getelementptr inbounds i8, ptr %ctx, i32 8
44  store ptr @val1, ptr %cmd_b, align 4
45  %cmd_c = getelementptr inbounds i8, ptr %ctx, i32 12
46  store ptr @val2, ptr %cmd_c, align 4
47  %cmd_d = getelementptr inbounds i8, ptr %ctx, i32 16
48  store ptr null, ptr %cmd_d, align 4
49  br label %return
50
51return:                                           ; preds = %if.end, %if.then
52  %retval.0 = phi i32 [ 0, %if.end ], [ -1, %if.then ]
53  ret i32 %retval.0
54}
55
56declare void @bar()
57