83 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs < %s | FileCheck %s3 4target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128"5target triple = "x86_64-pc-win64"6 7declare void @foo()8 9define void @test_empty() gc "statepoint-example" {10; CHECK-LABEL: test_empty:11; CHECK: # %bb.0: # %entry12; CHECK-NEXT: pushq %rax13; CHECK-NEXT: .cfi_def_cfa_offset 1614; CHECK-NEXT: callq foo@PLT15; CHECK-NEXT: .Ltmp0:16; CHECK-NEXT: popq %rax17; CHECK-NEXT: .cfi_def_cfa_offset 818; CHECK-NEXT: retq19entry:20 %token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @foo, i32 0, i32 0, i32 0, i32 0) ["gc-live" ()]21 ret void22}23 24define void @test_dead(ptr addrspace(1) %p) gc "statepoint-example" {25; CHECK-LABEL: test_dead:26; CHECK: # %bb.0: # %entry27; CHECK-NEXT: pushq %rax28; CHECK-NEXT: .cfi_def_cfa_offset 1629; CHECK-NEXT: callq foo@PLT30; CHECK-NEXT: .Ltmp1:31; CHECK-NEXT: popq %rax32; CHECK-NEXT: .cfi_def_cfa_offset 833; CHECK-NEXT: retq34entry:35 %token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @foo, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr addrspace(1) %p)]36 ret void37}38 39define ptr addrspace(1) @test_one(ptr addrspace(1) %p) gc "statepoint-example" {40; CHECK-LABEL: test_one:41; CHECK: # %bb.0: # %entry42; CHECK-NEXT: pushq %rax43; CHECK-NEXT: .cfi_def_cfa_offset 1644; CHECK-NEXT: movq %rdi, (%rsp)45; CHECK-NEXT: callq foo@PLT46; CHECK-NEXT: .Ltmp2:47; CHECK-NEXT: movq (%rsp), %rax48; CHECK-NEXT: popq %rcx49; CHECK-NEXT: .cfi_def_cfa_offset 850; CHECK-NEXT: retq51entry:52 %token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @foo, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr addrspace(1) %p)]53 %p2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %token, i32 0, i32 0)54 ret ptr addrspace(1) %p255}56 57define ptr addrspace(1) @test_one_derived(ptr addrspace(1) %p) gc "statepoint-example" {58; CHECK-LABEL: test_one_derived:59; CHECK: # %bb.0: # %entry60; CHECK-NEXT: subq $24, %rsp61; CHECK-NEXT: .cfi_def_cfa_offset 3262; CHECK-NEXT: movq %rdi, {{[0-9]+}}(%rsp)63; CHECK-NEXT: addq $8, %rdi64; CHECK-NEXT: movq %rdi, {{[0-9]+}}(%rsp)65; CHECK-NEXT: callq foo@PLT66; CHECK-NEXT: .Ltmp3:67; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %rax68; CHECK-NEXT: addq $24, %rsp69; CHECK-NEXT: .cfi_def_cfa_offset 870; CHECK-NEXT: retq71entry:72 %gep = getelementptr i8, ptr addrspace(1) %p, i32 873 %token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @foo, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr addrspace(1) %p, ptr addrspace(1) %gep)]74 %gep2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %token, i32 0, i32 1)75 ret ptr addrspace(1) %gep276}77 78 79 80declare token @llvm.experimental.gc.statepoint.p0(i64, i32, ptr, i32, i32, ...)81declare ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token, i32, i32)82 83