Index: llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp =================================================================== --- llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -61,6 +61,7 @@ #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Metadata.h" #include "llvm/IR/PatternMatch.h" +#include "llvm/IR/Statepoint.h" #include "llvm/IR/Type.h" #include "llvm/IR/User.h" #include "llvm/IR/Value.h" @@ -2403,6 +2404,10 @@ if (CI.countOperandBundlesOfType(LLVMContext::OB_cfguardtarget)) return false; + // FIXME: support statepoints and related. + if (isa(U)) + return false; + if (CI.isInlineAsm()) return translateInlineAsm(CI, MIRBuilder); Index: llvm/test/CodeGen/AArch64/GlobalISel/pr57349.ll =================================================================== --- /dev/null +++ llvm/test/CodeGen/AArch64/GlobalISel/pr57349.ll @@ -0,0 +1,22 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -global-isel -global-isel-abort=2 -mtriple aarch64-unknown-unknown -verify-machineinstrs %s -o - | FileCheck %s + +define i32 @__init__() gc "statepoint-example" { +; CHECK-LABEL: __init__: +; CHECK: // %bb.0: +; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill +; CHECK-NEXT: .cfi_def_cfa_offset 16 +; CHECK-NEXT: .cfi_offset w30, -16 +; CHECK-NEXT: bl builtins.__init__ +; CHECK-NEXT: .Ltmp0: +; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload +; CHECK-NEXT: ret + %statepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2882400000, i32 0, ptr elementtype(i32 ()) @builtins.__init__, i32 0, i32 0, i32 0, i32 0) [ "deopt"() ] + %ret = call i32 (token) @llvm.experimental.gc.result(token %statepoint_token) + ret i32 %ret +} + +declare i32 @builtins.__init__() + +declare token @llvm.experimental.gc.statepoint.p0(i64 immarg, i32 immarg, ptr, i32 immarg, i32 immarg, ...) +declare i32 @llvm.experimental.gc.result(token)