96 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple thumbv7s-apple-darwin -asm-verbose=false | FileCheck %s3; RUN: llc < %s -mtriple thumbv7s-apple-darwin -asm-verbose=false -stop-after=if-converter | FileCheck --check-prefix=CHECK-PROB %s4 5declare i32 @foo(i32)6declare ptr @bar(i32, ptr, ptr)7 8; Verify that we don't try to iteratively re-ifconvert a block with a9; (predicated) indirectbr terminator.10; If we do, we would ignore its fallthrough successor.11 12; CHECK-PROB: bb.0{{[0-9a-zA-Z.]*}}:13; CHECK-PROB: successors: %bb.1(0x40000000), %bb.3(0x20000000), %bb.4(0x20000000)14; CHECK-PROB: bb.2{{[0-9a-zA-Z.]*}}:15; CHECK-PROB: successors: %bb.3(0x40000000), %bb.4(0x40000000)16 17define i32 @test(i32 %a, i32 %a2, ptr %p, ptr %p2) "frame-pointer"="all" {18; CHECK-LABEL: test:19; CHECK: push {r4, r5, r6, r7, lr}20; CHECK-NEXT: add r7, sp, #1221; CHECK-NEXT: push.w {r8, r10, r11}22; CHECK-NEXT: str r3, [sp, #-4]!23; CHECK-NEXT: mov r11, r224; CHECK-NEXT: mov r4, r125; CHECK-NEXT: mov r5, r026; CHECK-NEXT: ldr r6, LCPI0_027; CHECK-NEXT: LPC0_1:28; CHECK-NEXT: add r6, pc29; CHECK-NEXT: ldr.w r8, LCPI0_130; CHECK-NEXT: LPC0_0:31; CHECK-NEXT: add r8, pc32; CHECK-NEXT: movs r0, #133; CHECK-NEXT: mov r1, r634; CHECK-NEXT: mov r2, r835; CHECK-NEXT: bl _bar36; CHECK-NEXT: mov r10, r037; CHECK-NEXT: movs r0, #238; CHECK-NEXT: mov r1, r639; CHECK-NEXT: mov r2, r840; CHECK-NEXT: bl _bar41; CHECK-NEXT: movs r0, #342; CHECK-NEXT: mov r1, r643; CHECK-NEXT: mov r2, r844; CHECK-NEXT: bl _bar45; CHECK-NEXT: cmp r5, #2146; CHECK-NEXT: itttt eq47; CHECK-NEXT: moveq r1, r048; CHECK-NEXT: streq.w r5, [r11]49; CHECK-NEXT: movweq r0, #123450; CHECK-NEXT: moveq pc, r151; CHECK-NEXT: LBB0_1:52; CHECK-NEXT: cmp r4, #4253; CHECK-NEXT: beq LBB0_454; CHECK-NEXT: ldr r0, [sp]55; CHECK-NEXT: str r5, [r0]56; CHECK-NEXT: movw r0, #123457; CHECK-NEXT: mov pc, r1058; CHECK-NEXT: Ltmp0:59; CHECK-NEXT: LBB0_3:60; CHECK-NEXT: movw r0, #456761; CHECK-NEXT: b LBB0_562; CHECK-NEXT: LBB0_4:63; CHECK-NEXT: movw r0, #123464; CHECK-NEXT: Ltmp1:65; CHECK-NEXT: LBB0_5:66; CHECK-NEXT: bl _foo67; CHECK-NEXT: add sp, #468; CHECK-NEXT: pop.w {r8, r10, r11}69; CHECK-NEXT: pop {r4, r5, r6, r7, pc}70; CHECK-NEXT: .p2align 271entry:72 %dst1 = call ptr @bar(i32 1, ptr blockaddress(@test, %bb1), ptr blockaddress(@test, %bb2))73 %dst2 = call ptr @bar(i32 2, ptr blockaddress(@test, %bb1), ptr blockaddress(@test, %bb2))74 %dst3 = call ptr @bar(i32 3, ptr blockaddress(@test, %bb1), ptr blockaddress(@test, %bb2))75 %cc1 = icmp eq i32 %a, 2176 br i1 %cc1, label %cc1t, label %cc1f77 78cc1t:79 store i32 %a, ptr %p80 indirectbr ptr %dst3, [label %bb1, label %bb2]81 82cc1f:83 %cc2 = icmp ne i32 %a2, 4284 br i1 %cc2, label %cc2t, label %bb185cc2t:86 store i32 %a, ptr %p287 indirectbr ptr %dst1, [label %bb1, label %bb2]88 89bb1:90 %ret_bb1 = call i32 @foo(i32 1234)91 ret i32 %ret_bb192bb2:93 %ret_bb2 = call i32 @foo(i32 4567)94 ret i32 %ret_bb295}96