mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-07-21 18:29:45 +00:00
Also it extracts getCopyFromRegs helper function in SelectionDAGBuilder as we need to be able to customize type of the register exported from basic block during lowering of the gc.result. (Resubmitting this change after not being able to reproduce buildbot failure) Differential Revision: http://reviews.llvm.org/D7760 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231800 91177308-0d34-0410-b5e6-96231b3b80d8
39 lines
1.4 KiB
LLVM
39 lines
1.4 KiB
LLVM
; RUN: llc < %s 2>&1 | FileCheck %s
|
|
|
|
target triple = "x86_64-pc-linux-gnu"
|
|
|
|
declare i64 addrspace(1)* @"some_other_call"(i64 addrspace(1)*)
|
|
|
|
declare i32 @"personality_function"()
|
|
|
|
define i64 addrspace(1)* @test_result(i64 addrspace(1)* %obj, i64 addrspace(1)* %obj1) {
|
|
entry:
|
|
; CHECK: .Ltmp{{[0-9]+}}:
|
|
; CHECK: callq some_other_call
|
|
; CHECK: .Ltmp{{[0-9]+}}:
|
|
%0 = invoke i32 (i64 addrspace(1)* (i64 addrspace(1)*)*, i32, i32, ...)* @llvm.experimental.gc.statepoint.p0f_p1i64p1i64f(i64 addrspace(1)* (i64 addrspace(1)*)* @some_other_call, i32 1, i32 0, i64 addrspace(1)* %obj, i32 5, i32 0, i32 -1, i32 0, i32 0, i32 0, i64 addrspace(1)* %obj, i64 addrspace(1)* %obj1)
|
|
to label %normal_return unwind label %exceptional_return
|
|
|
|
normal_return:
|
|
; CHECK: popq
|
|
; CHECK: retq
|
|
%ret_val = call i64 addrspace(1)* @llvm.experimental.gc.result.p1i64(i32 %0)
|
|
ret i64 addrspace(1)* %ret_val
|
|
|
|
exceptional_return:
|
|
; CHECK: .Ltmp{{[0-9]+}}:
|
|
; CHECK: popq
|
|
; CHECK: retq
|
|
%landing_pad = landingpad { i8*, i32 } personality i32 ()* @personality_function
|
|
cleanup
|
|
ret i64 addrspace(1)* %obj
|
|
}
|
|
; CHECK-LABEL: GCC_except_table{{[0-9]+}}:
|
|
; CHECK: .long .Ltmp{{[0-9]+}}-.Ltmp{{[0-9]+}}
|
|
; CHECK: .long .Ltmp{{[0-9]+}}-.Lfunc_begin{{[0-9]+}}
|
|
; CHECK: .byte 0
|
|
; CHECK: .align 4
|
|
|
|
declare i32 @llvm.experimental.gc.statepoint.p0f_p1i64p1i64f(i64 addrspace(1)* (i64 addrspace(1)*)*, i32, i32, ...)
|
|
declare i64 addrspace(1)* @llvm.experimental.gc.result.p1i64(i32)
|