1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=armv7-apple-ios -mcpu=cortex-a8 | FileCheck %s -check-prefix=A8
3; RUN: llc < %s -mtriple=armv7-apple-ios -mcpu=swift     | FileCheck %s -check-prefix=SWIFT
4; rdar://8402126
5
6@x = external global i32*		; <i32**> [#uses=1]
7
8define void @foo(i32 %a) "frame-pointer"="all" {
9; A8-LABEL: foo:
10; A8:       @ %bb.0: @ %entry
11; A8-NEXT:    movw r1, :lower16:(L_x$non_lazy_ptr-(LPC0_0+8))
12; A8-NEXT:    movt r1, :upper16:(L_x$non_lazy_ptr-(LPC0_0+8))
13; A8-NEXT:  LPC0_0:
14; A8-NEXT:    ldr r1, [pc, r1]
15; A8-NEXT:    ldr r1, [r1]
16; A8-NEXT:    str r0, [r1]
17; A8-NEXT:    bx lr
18;
19; SWIFT-LABEL: foo:
20; SWIFT:       @ %bb.0: @ %entry
21; SWIFT-NEXT:    movw r1, :lower16:(L_x$non_lazy_ptr-(LPC0_0+8))
22; SWIFT-NEXT:    movt r1, :upper16:(L_x$non_lazy_ptr-(LPC0_0+8))
23; SWIFT-NEXT:  LPC0_0:
24; SWIFT-NEXT:    ldr r1, [pc, r1]
25; SWIFT-NEXT:    ldr r1, [r1]
26; SWIFT-NEXT:    str r0, [r1]
27; SWIFT-NEXT:    bx lr
28entry:
29	%tmp = load i32*, i32** @x		; <i32*> [#uses=1]
30	store i32 %a, i32* %tmp
31	ret void
32}
33
34define i32 @t1(i32 %a, i32 %b) "frame-pointer"="all" {
35; A8-LABEL: t1:
36; A8:       @ %bb.0: @ %entry
37; A8-NEXT:    mov r2, r0
38; A8-NEXT:    mov r0, #1
39; A8-NEXT:    cmp r2, #10
40; A8-NEXT:    bxle lr
41; A8-NEXT:  LBB1_1: @ %cond_true
42; A8-NEXT:    push {r7, lr}
43; A8-NEXT:    mov r7, sp
44; A8-NEXT:    mov r0, r1
45; A8-NEXT:    bl _foo
46; A8-NEXT:    mov r0, #0
47; A8-NEXT:    pop {r7, lr}
48; A8-NEXT:    bx lr
49;
50; SWIFT-LABEL: t1:
51; SWIFT:       @ %bb.0: @ %entry
52; SWIFT-NEXT:    mov r2, r0
53; SWIFT-NEXT:    mov r0, #1
54; SWIFT-NEXT:    cmp r2, #10
55; SWIFT-NEXT:    bxle lr
56; SWIFT-NEXT:  LBB1_1: @ %cond_true
57; SWIFT-NEXT:    push {r7, lr}
58; SWIFT-NEXT:    mov r7, sp
59; SWIFT-NEXT:    mov r0, r1
60; SWIFT-NEXT:    bl _foo
61; SWIFT-NEXT:    mov r0, #0
62; SWIFT-NEXT:    pop {r7, lr}
63; SWIFT-NEXT:    bx lr
64entry:
65	%tmp1 = icmp sgt i32 %a, 10		; <i1> [#uses=1]
66	br i1 %tmp1, label %cond_true, label %UnifiedReturnBlock
67
68cond_true:		; preds = %entry
69	tail call void @foo( i32 %b )
70	ret i32 0
71
72UnifiedReturnBlock:		; preds = %entry
73	ret i32 1
74}
75