blob: 8d2f9edf39cf33b76587e228827d7db7e21de6a8 [file] [edit]
; 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
}