97 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=armv7-none-eabi -O0 | FileCheck %s --check-prefix=CHECK --check-prefix=LE3; RUN: llc < %s -mtriple=armv7eb-none-eabi -O0 | FileCheck %s --check-prefix=CHECK --check-prefix=BE4 5;; Previously, this failed during register allocation because the CMP_SWAP_646;; pseudo-instruction has a lot of operands, many of which need to be even-odd7;; register pairs, and the over-aligned alloca in this function causes both a8;; frame pointer and a base pointer to be needed.9 10define void @test(ptr %ptr) {11; CHECK-LABEL: test:12; CHECK: @ %bb.0: @ %entry13; CHECK-NEXT: .save {r4, r5, r6, r8, r9, r10, r11, lr}14; CHECK-NEXT: push {r4, r5, r6, r8, r9, r10, r11, lr}15; CHECK-NEXT: .setfp r11, sp, #2416; CHECK-NEXT: add r11, sp, #2417; CHECK-NEXT: .pad #3218; CHECK-NEXT: sub sp, sp, #3219; CHECK-NEXT: bfc sp, #0, #420; CHECK-NEXT: mov r6, sp21; CHECK-NEXT: str r0, [r6, #28] @ 4-byte Spill22; CHECK-NEXT: b .LBB0_123; CHECK-NEXT: .LBB0_1: @ %block124; CHECK-NEXT: ldr r0, [r6, #28] @ 4-byte Reload25; CHECK-NEXT: mov r1, sp26; CHECK-NEXT: sub r1, r1, #1627; CHECK-NEXT: bic r1, r1, #1528; CHECK-NEXT: mov sp, r129; CHECK-NEXT: dmb ish30; CHECK-NEXT: ldr r1, [r0]31; CHECK-NEXT: ldr r0, [r0, #4]32; CHECK-NEXT: str r1, [r6, #20] @ 4-byte Spill33; CHECK-NEXT: str r0, [r6, #24] @ 4-byte Spill34; CHECK-NEXT: b .LBB0_235; CHECK-NEXT: .LBB0_2: @ %atomicrmw.start36; CHECK-NEXT: @ =>This Loop Header: Depth=137; CHECK-NEXT: @ Child Loop BB0_3 Depth 238; CHECK-NEXT: ldr r2, [r6, #24] @ 4-byte Reload39; CHECK-NEXT: ldr r0, [r6, #20] @ 4-byte Reload40; CHECK-NEXT: ldr r8, [r6, #28] @ 4-byte Reload41; LE-NEXT: str r2, [r6, #16] @ 4-byte Spill42; LE-NEXT: str r0, [r6, #12] @ 4-byte Spill43; BE-NEXT: str r2, [r6, #12] @ 4-byte Spill44; BE-NEXT: str r0, [r6, #16] @ 4-byte Spill45; CHECK-NEXT: @ implicit-def: $r146; CHECK-NEXT: @ implicit-def: $r347; CHECK-NEXT: @ kill: def $r8 killed $r8 def $r8_r948; CHECK-NEXT: mov r9, r149; CHECK-NEXT: @ kill: def $r0 killed $r0 def $r0_r150; CHECK-NEXT: mov r1, r251; CHECK-NEXT: mov r12, #052; CHECK-NEXT: mov r2, r1253; CHECK-NEXT: mov r3, r1254; CHECK-NEXT: .LBB0_3: @ %atomicrmw.start55; CHECK-NEXT: @ Parent Loop BB0_2 Depth=156; CHECK-NEXT: @ => This Inner Loop Header: Depth=257; CHECK-NEXT: ldrexd r4, r5, [r8]58; CHECK-NEXT: cmp r4, r059; CHECK-NEXT: cmpeq r5, r160; CHECK-NEXT: bne .LBB0_561; CHECK-NEXT: @ %bb.4: @ %atomicrmw.start62; CHECK-NEXT: @ in Loop: Header=BB0_3 Depth=263; CHECK-NEXT: strexd r9, r2, r3, [r8]64; CHECK-NEXT: cmp r9, #065; CHECK-NEXT: bne .LBB0_366; CHECK-NEXT: .LBB0_5: @ %atomicrmw.start67; CHECK-NEXT: @ in Loop: Header=BB0_2 Depth=168; CHECK-NEXT: ldr r2, [r6, #12] @ 4-byte Reload69; LE-NEXT: ldr r1, [r6, #16] @ 4-byte Reload70; LE-NEXT: mov r0, r571; LE-NEXT: eor r3, r0, r172; LE-NEXT: mov r1, r473; LE-NEXT: eor r2, r1, r274; BE-NEXT: ldr r0, [r6, #16] @ 4-byte Reload75; BE-NEXT: mov r1, r476; BE-NEXT: eor r3, r1, r077; BE-NEXT: mov r0, r578; BE-NEXT: eor r2, r0, r279; CHECK-NEXT: orr r2, r2, r380; CHECK-NEXT: cmp r2, #081; CHECK-NEXT: str r1, [r6, #20] @ 4-byte Spill82; CHECK-NEXT: str r0, [r6, #24] @ 4-byte Spill83; CHECK-NEXT: bne .LBB0_284; CHECK-NEXT: b .LBB0_685; CHECK-NEXT: .LBB0_6: @ %atomicrmw.end86; CHECK-NEXT: dmb ish87; CHECK-NEXT: sub sp, r11, #2488; CHECK-NEXT: pop {r4, r5, r6, r8, r9, r10, r11, pc}89entry:90 br label %block191 92block1:93 %stuff = alloca i8, i64 16, align 1694 store atomic i64 0, ptr %ptr seq_cst, align 895 ret void96}97