; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
; RUN: llc < %s -mtriple=aarch64 | FileCheck %s

; Crash reproducer for: https://github.com/llvm/llvm-project/issues/142314

define <2 x ptr addrspace(1)> @widget() nounwind gc "statepoint-example" {
; CHECK-LABEL: widget:
; CHECK:       // %bb.0: // %bb
; CHECK-NEXT:    sub sp, sp, #32
; CHECK-NEXT:    movi v0.2d, #0000000000000000
; CHECK-NEXT:    mov x0, xzr
; CHECK-NEXT:    mov x1, xzr
; CHECK-NEXT:    str x30, [sp, #16] // 8-byte Spill
; CHECK-NEXT:    str q0, [sp]
; CHECK-NEXT:    movi d0, #0000000000000000
; CHECK-NEXT:    blr xzr
; CHECK-NEXT:  .Ltmp0:
; CHECK-NEXT:    movi v0.2d, #0000000000000000
; CHECK-NEXT:    mov x8, sp
; CHECK-NEXT:    ldr x30, [sp, #16] // 8-byte Reload
; CHECK-NEXT:    orr x8, x8, #0x8
; CHECK-NEXT:    ld1 { v0.d }[1], [x8]
; CHECK-NEXT:    add sp, sp, #32
; CHECK-NEXT:    ret
bb:
  %call31 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(i32 (ptr addrspace(1), ptr addrspace(1), double)) null, i32 3, i32 0, ptr addrspace(1) null, ptr addrspace(1) null, double 0.000000e+00, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) null, <2 x ptr addrspace(1)> zeroinitializer, ptr addrspace(1) null) ]
  %call4 = call coldcc <2 x ptr addrspace(1)> @llvm.experimental.gc.relocate.v2p1(token %call31, i32 0, i32 1) ; (null, zeroinitializer)
  %shufflevector = shufflevector <2 x ptr addrspace(1)> zeroinitializer, <2 x ptr addrspace(1)> %call4, <2 x i32> <i32 0, i32 3>
  ret <2 x ptr addrspace(1)> %shufflevector
}

declare token @llvm.experimental.gc.statepoint.p0(i64 immarg, i32 immarg, ptr, i32 immarg, i32 immarg, ...)
declare <2 x ptr addrspace(1)> @llvm.experimental.gc.relocate.v2p1(token, i32 immarg, i32 immarg)
