Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1258,7 +1258,7 @@ void SelectionDAGBuilder::visitGCRelocate(const GCRelocateInst &Relocate) {

if (Record.type == RecordType::Spill) {
unsigned Index = Record.payload.FI;
SDValue SpillSlot = DAG.getTargetFrameIndex(Index, getFrameIndexTy());
SDValue SpillSlot = DAG.getFrameIndex(Index, getFrameIndexTy());

// All the reloads are independent and are reading memory only modified by
// statepoints (i.e. no other aliasing stores); informing SelectionDAG of
Expand Down
33 changes: 33 additions & 0 deletions llvm/test/CodeGen/AArch64/pr142314.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
; 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 Folded 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 Folded 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)
11 changes: 4 additions & 7 deletions llvm/test/CodeGen/X86/pr33010.ll
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,10 @@ define ptr addrspace(1) @test(ptr addrspace(1) %a, ptr addrspace(1) %b, i1 %whic
; CHECK-NEXT: callq f@PLT
; CHECK-NEXT: .Ltmp0:
; CHECK-NEXT: testb $1, %bl
; CHECK-NEXT: je .LBB0_1
; CHECK-NEXT: # %bb.2: # %entry
; CHECK-NEXT: movq (%rsp), %rax
; CHECK-NEXT: jmp .LBB0_3
; CHECK-NEXT: .LBB0_1:
; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %rax
; CHECK-NEXT: .LBB0_3: # %entry
; CHECK-NEXT: movq %rsp, %rax
; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rcx
; CHECK-NEXT: cmovneq %rax, %rcx
; CHECK-NEXT: movq (%rcx), %rax
; CHECK-NEXT: addq $16, %rsp
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: popq %rbx
Expand Down