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