diff options
Diffstat (limited to 'llvm/test/CodeGen/Thumb2/LowOverheadLoops')
| -rw-r--r-- | llvm/test/CodeGen/Thumb2/LowOverheadLoops/minloop.ll | 70 | 
1 files changed, 37 insertions, 33 deletions
| diff --git a/llvm/test/CodeGen/Thumb2/LowOverheadLoops/minloop.ll b/llvm/test/CodeGen/Thumb2/LowOverheadLoops/minloop.ll index 9c36bae..ec257bc 100644 --- a/llvm/test/CodeGen/Thumb2/LowOverheadLoops/minloop.ll +++ b/llvm/test/CodeGen/Thumb2/LowOverheadLoops/minloop.ll @@ -6,77 +6,81 @@ define void @arm_min_q31(ptr nocapture readonly %pSrc, i32 %blockSize, ptr nocap  ; CHECK:       @ %bb.0: @ %entry  ; CHECK-NEXT:    .save {r4, r5, r6, r7, r8, r9, r10, r11, lr}  ; CHECK-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11, lr} +; CHECK-NEXT:    .pad #4 +; CHECK-NEXT:    sub sp, #4  ; CHECK-NEXT:    ldr.w r12, [r0]  ; CHECK-NEXT:    subs.w r9, r1, #1  ; CHECK-NEXT:    beq .LBB0_3  ; CHECK-NEXT:  @ %bb.1: @ %while.body.preheader -; CHECK-NEXT:    and r8, r9, #3 +; CHECK-NEXT:    and r6, r9, #3  ; CHECK-NEXT:    subs r7, r1, #2  ; CHECK-NEXT:    cmp r7, #3  ; CHECK-NEXT:    bhs .LBB0_4  ; CHECK-NEXT:  @ %bb.2: -; CHECK-NEXT:    movs r6, #0 -; CHECK-NEXT:    b .LBB0_6 +; CHECK-NEXT:    mov.w r10, #0 +; CHECK-NEXT:    cbnz r6, .LBB0_7 +; CHECK-NEXT:    b .LBB0_10  ; CHECK-NEXT:  .LBB0_3: -; CHECK-NEXT:    movs r6, #0 +; CHECK-NEXT:    mov.w r10, #0  ; CHECK-NEXT:    b .LBB0_10  ; CHECK-NEXT:  .LBB0_4: @ %while.body.preheader.new  ; CHECK-NEXT:    bic r7, r9, #3 -; CHECK-NEXT:    movs r6, #1 +; CHECK-NEXT:    str r6, [sp] @ 4-byte Spill  ; CHECK-NEXT:    subs r7, #4 +; CHECK-NEXT:    movs r6, #1 +; CHECK-NEXT:    mov.w r8, #0 +; CHECK-NEXT:    mov.w r10, #0  ; CHECK-NEXT:    add.w lr, r6, r7, lsr #2 -; CHECK-NEXT:    movs r6, #0 -; CHECK-NEXT:    movs r7, #4  ; CHECK-NEXT:  .LBB0_5: @ %while.body  ; CHECK-NEXT:    @ =>This Inner Loop Header: Depth=1 -; CHECK-NEXT:    ldr r10, [r0, #16]! -; CHECK-NEXT:    sub.w r9, r9, #4 -; CHECK-NEXT:    ldrd r5, r4, [r0, #-12] -; CHECK-NEXT:    ldr r11, [r0, #-4] +; CHECK-NEXT:    ldr r11, [r0, #16]! +; CHECK-NEXT:    ldrd r5, r7, [r0, #-12] +; CHECK-NEXT:    ldr r4, [r0, #-4]  ; CHECK-NEXT:    cmp r12, r5 -; CHECK-NEXT:    it gt -; CHECK-NEXT:    subgt r6, r7, #3  ; CHECK-NEXT:    csel r5, r5, r12, gt -; CHECK-NEXT:    cmp r5, r4 +; CHECK-NEXT:    csinc r6, r10, r8, le +; CHECK-NEXT:    cmp r5, r7  ; CHECK-NEXT:    it gt -; CHECK-NEXT:    subgt r6, r7, #2 -; CHECK-NEXT:    csel r5, r4, r5, gt -; CHECK-NEXT:    cmp r5, r11 +; CHECK-NEXT:    addgt.w r6, r8, #2 +; CHECK-NEXT:    csel r7, r7, r5, gt +; CHECK-NEXT:    cmp r7, r4  ; CHECK-NEXT:    it gt -; CHECK-NEXT:    subgt r6, r7, #1 -; CHECK-NEXT:    csel r5, r11, r5, gt -; CHECK-NEXT:    cmp r5, r10 -; CHECK-NEXT:    csel r6, r7, r6, gt -; CHECK-NEXT:    add.w r7, r7, #4 -; CHECK-NEXT:    csel r12, r10, r5, gt +; CHECK-NEXT:    addgt.w r6, r8, #3 +; CHECK-NEXT:    csel r7, r4, r7, gt +; CHECK-NEXT:    add.w r8, r8, #4 +; CHECK-NEXT:    cmp r7, r11 +; CHECK-NEXT:    csel r10, r8, r6, gt +; CHECK-NEXT:    csel r12, r11, r7, gt  ; CHECK-NEXT:    le lr, .LBB0_5 -; CHECK-NEXT:  .LBB0_6: @ %while.end.loopexit.unr-lcssa -; CHECK-NEXT:    cmp.w r8, #0 -; CHECK-NEXT:    beq .LBB0_10 -; CHECK-NEXT:  @ %bb.7: @ %while.body.epil +; CHECK-NEXT:  @ %bb.6: @ %while.end.loopexit.unr-lcssa.loopexit +; CHECK-NEXT:    ldr r6, [sp] @ 4-byte Reload +; CHECK-NEXT:    sub.w r9, r9, r8 +; CHECK-NEXT:    cbz r6, .LBB0_10 +; CHECK-NEXT:  .LBB0_7: @ %while.body.epil  ; CHECK-NEXT:    ldr r7, [r0, #4]  ; CHECK-NEXT:    sub.w r1, r1, r9  ; CHECK-NEXT:    cmp r12, r7 -; CHECK-NEXT:    csel r6, r1, r6, gt +; CHECK-NEXT:    csel r10, r1, r10, gt  ; CHECK-NEXT:    csel r12, r7, r12, gt -; CHECK-NEXT:    cmp.w r8, #1 +; CHECK-NEXT:    cmp r6, #1  ; CHECK-NEXT:    beq .LBB0_10  ; CHECK-NEXT:  @ %bb.8: @ %while.body.epil.1  ; CHECK-NEXT:    ldr r7, [r0, #8]  ; CHECK-NEXT:    cmp r12, r7 -; CHECK-NEXT:    csinc r6, r6, r1, le +; CHECK-NEXT:    csinc r10, r10, r1, le  ; CHECK-NEXT:    csel r12, r7, r12, gt -; CHECK-NEXT:    cmp.w r8, #2 +; CHECK-NEXT:    cmp r6, #2  ; CHECK-NEXT:    beq .LBB0_10  ; CHECK-NEXT:  @ %bb.9: @ %while.body.epil.2  ; CHECK-NEXT:    ldr r0, [r0, #12]  ; CHECK-NEXT:    cmp r12, r0  ; CHECK-NEXT:    it gt -; CHECK-NEXT:    addgt r6, r1, #2 +; CHECK-NEXT:    addgt.w r10, r1, #2  ; CHECK-NEXT:    csel r12, r0, r12, gt  ; CHECK-NEXT:  .LBB0_10: @ %while.end  ; CHECK-NEXT:    str.w r12, [r2] -; CHECK-NEXT:    str r6, [r3] +; CHECK-NEXT:    str.w r10, [r3] +; CHECK-NEXT:    add sp, #4  ; CHECK-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11, pc}  entry:    %0 = load i32, ptr %pSrc, align 4 | 
