Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/CodeGen/Thumb2/LowOverheadLoops/vector-arith-codegen.ll
Show First 20 Lines • Show All 192 Lines • ▼ Show 20 Lines | |||||
; CHECK-NEXT: push {r7, lr} | ; CHECK-NEXT: push {r7, lr} | ||||
; CHECK-NEXT: cmp r3, #0 | ; CHECK-NEXT: cmp r3, #0 | ||||
; CHECK-NEXT: it eq | ; CHECK-NEXT: it eq | ||||
; CHECK-NEXT: popeq {r7, pc} | ; CHECK-NEXT: popeq {r7, pc} | ||||
; CHECK-NEXT: dlstp.32 lr, r3 | ; CHECK-NEXT: dlstp.32 lr, r3 | ||||
; CHECK-NEXT: .LBB3_1: @ %vector.body | ; CHECK-NEXT: .LBB3_1: @ %vector.body | ||||
; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1 | ; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1 | ||||
; CHECK-NEXT: vldrw.u32 q0, [r1], #16 | ; CHECK-NEXT: vldrw.u32 q0, [r1], #16 | ||||
; CHECK-NEXT: subs r3, #4 | |||||
; CHECK-NEXT: vmul.i32 q0, q0, r2 | ; CHECK-NEXT: vmul.i32 q0, q0, r2 | ||||
; CHECK-NEXT: vstrw.32 q0, [r0], #16 | ; CHECK-NEXT: vstrw.32 q0, [r0], #16 | ||||
; CHECK-NEXT: letp lr, .LBB3_1 | ; CHECK-NEXT: letp lr, .LBB3_1 | ||||
; CHECK-NEXT: @ %bb.2: @ %for.cond.cleanup | ; CHECK-NEXT: @ %bb.2: @ %for.cond.cleanup | ||||
; CHECK-NEXT: pop {r7, pc} | ; CHECK-NEXT: pop {r7, pc} | ||||
entry: | entry: | ||||
%cmp6 = icmp eq i32 %N, 0 | %cmp6 = icmp eq i32 %N, 0 | ||||
br i1 %cmp6, label %for.cond.cleanup, label %vector.ph | br i1 %cmp6, label %for.cond.cleanup, label %vector.ph | ||||
Show All 35 Lines | |||||
; CHECK-NEXT: push {r7, lr} | ; CHECK-NEXT: push {r7, lr} | ||||
; CHECK-NEXT: cmp r3, #0 | ; CHECK-NEXT: cmp r3, #0 | ||||
; CHECK-NEXT: it eq | ; CHECK-NEXT: it eq | ||||
; CHECK-NEXT: popeq {r7, pc} | ; CHECK-NEXT: popeq {r7, pc} | ||||
; CHECK-NEXT: dlstp.32 lr, r3 | ; CHECK-NEXT: dlstp.32 lr, r3 | ||||
; CHECK-NEXT: .LBB4_1: @ %vector.body | ; CHECK-NEXT: .LBB4_1: @ %vector.body | ||||
; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1 | ; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1 | ||||
; CHECK-NEXT: vldrw.u32 q0, [r1], #16 | ; CHECK-NEXT: vldrw.u32 q0, [r1], #16 | ||||
; CHECK-NEXT: subs r3, #4 | |||||
; CHECK-NEXT: vadd.i32 q0, q0, r2 | ; CHECK-NEXT: vadd.i32 q0, q0, r2 | ||||
; CHECK-NEXT: vstrw.32 q0, [r0], #16 | ; CHECK-NEXT: vstrw.32 q0, [r0], #16 | ||||
; CHECK-NEXT: letp lr, .LBB4_1 | ; CHECK-NEXT: letp lr, .LBB4_1 | ||||
; CHECK-NEXT: @ %bb.2: @ %for.cond.cleanup | ; CHECK-NEXT: @ %bb.2: @ %for.cond.cleanup | ||||
; CHECK-NEXT: pop {r7, pc} | ; CHECK-NEXT: pop {r7, pc} | ||||
entry: | entry: | ||||
%cmp6 = icmp eq i32 %N, 0 | %cmp6 = icmp eq i32 %N, 0 | ||||
br i1 %cmp6, label %for.cond.cleanup, label %vector.ph | br i1 %cmp6, label %for.cond.cleanup, label %vector.ph | ||||
▲ Show 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | |||||
; CHECK-NEXT: .LBB5_1: @ %vector.body | ; CHECK-NEXT: .LBB5_1: @ %vector.body | ||||
; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1 | ; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1 | ||||
; CHECK-NEXT: add.w r4, r1, r12 | ; CHECK-NEXT: add.w r4, r1, r12 | ||||
; CHECK-NEXT: vldrb.u8 q0, [r4] | ; CHECK-NEXT: vldrb.u8 q0, [r4] | ||||
; CHECK-NEXT: add.w r4, r2, r12 | ; CHECK-NEXT: add.w r4, r2, r12 | ||||
; CHECK-NEXT: vldrb.u8 q1, [r4] | ; CHECK-NEXT: vldrb.u8 q1, [r4] | ||||
; CHECK-NEXT: add.w r4, r0, r12 | ; CHECK-NEXT: add.w r4, r0, r12 | ||||
; CHECK-NEXT: add.w r12, r12, #16 | ; CHECK-NEXT: add.w r12, r12, #16 | ||||
; CHECK-NEXT: subs r3, #16 | |||||
; CHECK-NEXT: vmul.i8 q0, q1, q0 | ; CHECK-NEXT: vmul.i8 q0, q1, q0 | ||||
; CHECK-NEXT: vstrb.8 q0, [r4] | ; CHECK-NEXT: vstrb.8 q0, [r4] | ||||
; CHECK-NEXT: letp lr, .LBB5_1 | ; CHECK-NEXT: letp lr, .LBB5_1 | ||||
; CHECK-NEXT: @ %bb.2: @ %for.cond.cleanup | ; CHECK-NEXT: @ %bb.2: @ %for.cond.cleanup | ||||
; CHECK-NEXT: pop {r4, pc} | ; CHECK-NEXT: pop {r4, pc} | ||||
entry: | entry: | ||||
%cmp10 = icmp eq i32 %N, 0 | %cmp10 = icmp eq i32 %N, 0 | ||||
br i1 %cmp10, label %for.cond.cleanup, label %vector.ph | br i1 %cmp10, label %for.cond.cleanup, label %vector.ph | ||||
Show All 38 Lines | |||||
; CHECK-NEXT: cmp r3, #0 | ; CHECK-NEXT: cmp r3, #0 | ||||
; CHECK-NEXT: it eq | ; CHECK-NEXT: it eq | ||||
; CHECK-NEXT: popeq {r7, pc} | ; CHECK-NEXT: popeq {r7, pc} | ||||
; CHECK-NEXT: dlstp.16 lr, r3 | ; CHECK-NEXT: dlstp.16 lr, r3 | ||||
; CHECK-NEXT: .LBB6_1: @ %vector.body | ; CHECK-NEXT: .LBB6_1: @ %vector.body | ||||
; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1 | ; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1 | ||||
; CHECK-NEXT: vldrh.u16 q0, [r1], #16 | ; CHECK-NEXT: vldrh.u16 q0, [r1], #16 | ||||
; CHECK-NEXT: vldrh.u16 q1, [r2], #16 | ; CHECK-NEXT: vldrh.u16 q1, [r2], #16 | ||||
; CHECK-NEXT: subs r3, #8 | |||||
; CHECK-NEXT: vmul.i16 q0, q1, q0 | ; CHECK-NEXT: vmul.i16 q0, q1, q0 | ||||
; CHECK-NEXT: vstrh.16 q0, [r0], #16 | ; CHECK-NEXT: vstrh.16 q0, [r0], #16 | ||||
; CHECK-NEXT: letp lr, .LBB6_1 | ; CHECK-NEXT: letp lr, .LBB6_1 | ||||
; CHECK-NEXT: @ %bb.2: @ %for.cond.cleanup | ; CHECK-NEXT: @ %bb.2: @ %for.cond.cleanup | ||||
; CHECK-NEXT: pop {r7, pc} | ; CHECK-NEXT: pop {r7, pc} | ||||
entry: | entry: | ||||
%cmp10 = icmp eq i32 %N, 0 | %cmp10 = icmp eq i32 %N, 0 | ||||
br i1 %cmp10, label %for.cond.cleanup, label %vector.ph | br i1 %cmp10, label %for.cond.cleanup, label %vector.ph | ||||
▲ Show 20 Lines • Show All 41 Lines • Show Last 20 Lines |