| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: llc -mtriple=armv7-unknown-linux-gnueabihf -verify-machineinstrs < %s | FileCheck %s |
| |
| define void @repro(ptr %out, ptr %base) { |
| ; CHECK-LABEL: repro: |
| ; CHECK: @ %bb.0: |
| ; CHECK-NEXT: .pad #4 |
| ; CHECK-NEXT: sub sp, sp, #4 |
| ; CHECK-NEXT: mov r0, #1 |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: bne .LBB0_3 |
| ; CHECK-NEXT: @ %bb.1: @ %cond.load |
| ; CHECK-NEXT: vmov.i32 d16, #0x0 |
| ; CHECK-NEXT: vldr d17, [r0] |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: beq .LBB0_4 |
| ; CHECK-NEXT: .LBB0_2: |
| ; CHECK-NEXT: vorr d18, d16, d16 |
| ; CHECK-NEXT: b .LBB0_5 |
| ; CHECK-NEXT: .LBB0_3: |
| ; CHECK-NEXT: mov r2, #0 |
| ; CHECK-NEXT: vmov d17, r2, r2 |
| ; CHECK-NEXT: vorr d16, d17, d17 |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: bne .LBB0_2 |
| ; CHECK-NEXT: .LBB0_4: @ %cond.load1 |
| ; CHECK-NEXT: ldm r0, {r0, r3} |
| ; CHECK-NEXT: vmov d18, r0, r3 |
| ; CHECK-NEXT: .LBB0_5: @ %else2 |
| ; CHECK-NEXT: mov r0, #1 |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: bne .LBB0_8 |
| ; CHECK-NEXT: @ %bb.6: @ %cond.load4 |
| ; CHECK-NEXT: ldrd r2, r3, [r1] |
| ; CHECK-NEXT: vmov d19, r2, r3 |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: beq .LBB0_9 |
| ; CHECK-NEXT: .LBB0_7: |
| ; CHECK-NEXT: vorr d20, d16, d16 |
| ; CHECK-NEXT: b .LBB0_10 |
| ; CHECK-NEXT: .LBB0_8: |
| ; CHECK-NEXT: vorr d19, d16, d16 |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: bne .LBB0_7 |
| ; CHECK-NEXT: .LBB0_9: @ %cond.load7 |
| ; CHECK-NEXT: ldrd r0, r1, [r0] |
| ; CHECK-NEXT: vmov d20, r0, r1 |
| ; CHECK-NEXT: .LBB0_10: @ %else8 |
| ; CHECK-NEXT: mov r0, #1 |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: ldrdeq r2, r3, [r0] |
| ; CHECK-NEXT: vmoveq d16, r2, r3 |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: beq .LBB0_16 |
| ; CHECK-NEXT: @ %bb.11: @ %else14 |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: beq .LBB0_17 |
| ; CHECK-NEXT: .LBB0_12: @ %else16 |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: beq .LBB0_18 |
| ; CHECK-NEXT: .LBB0_13: @ %else18 |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: beq .LBB0_19 |
| ; CHECK-NEXT: .LBB0_14: @ %else20 |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: beq .LBB0_20 |
| ; CHECK-NEXT: .LBB0_15: @ %else22 |
| ; CHECK-NEXT: add sp, sp, #4 |
| ; CHECK-NEXT: bx lr |
| ; CHECK-NEXT: .LBB0_16: @ %cond.store |
| ; CHECK-NEXT: vst1.8 {d17}, [r0] |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: bne .LBB0_12 |
| ; CHECK-NEXT: .LBB0_17: @ %cond.store15 |
| ; CHECK-NEXT: vst1.8 {d18}, [r0] |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: bne .LBB0_13 |
| ; CHECK-NEXT: .LBB0_18: @ %cond.store17 |
| ; CHECK-NEXT: vst1.8 {d19}, [r0] |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: bne .LBB0_14 |
| ; CHECK-NEXT: .LBB0_19: @ %cond.store19 |
| ; CHECK-NEXT: vst1.8 {d20}, [r0] |
| ; CHECK-NEXT: cmp r0, #0 |
| ; CHECK-NEXT: bne .LBB0_15 |
| ; CHECK-NEXT: .LBB0_20: @ %cond.store21 |
| ; CHECK-NEXT: vst1.8 {d16}, [r0] |
| ; CHECK-NEXT: add sp, sp, #4 |
| ; CHECK-NEXT: bx lr |
| %ptrs = insertelement <5 x ptr> poison, ptr %base, i32 2 |
| %mask = freeze <5 x i1> zeroinitializer |
| %g = call <5 x i64> @llvm.masked.gather.v5i64.v5p0(<5 x ptr> align 4 %ptrs, <5 x i1> %mask, <5 x i64> zeroinitializer) |
| call void @llvm.masked.scatter.v5i64.v5p0(<5 x i64> %g, <5 x ptr> poison, <5 x i1> %mask) |
| ret void |
| } |
| |