Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
test/CodeGen/X86/statepoint-invoke.ll
Show First 20 Lines • Show All 136 Lines • ▼ Show 20 Lines | entry: | ||||
; CHECK: callq some_call | ; CHECK: callq some_call | ||||
%sp1 = invoke token (i64, i32, void (i64 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidp1i64f(i64 0, i32 0, void (i64 addrspace(1)*)* @some_call, i32 1, i32 0, i64 addrspace(1)* %val1, i32 0, i32 5, i32 0, i32 -1, i32 0, i32 0, i32 0, i64 addrspace(1)* null, i64 addrspace(1)* undef) | %sp1 = invoke token (i64, i32, void (i64 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidp1i64f(i64 0, i32 0, void (i64 addrspace(1)*)* @some_call, i32 1, i32 0, i64 addrspace(1)* %val1, i32 0, i32 5, i32 0, i32 -1, i32 0, i32 0, i32 0, i64 addrspace(1)* null, i64 addrspace(1)* undef) | ||||
to label %normal_return unwind label %exceptional_return | to label %normal_return unwind label %exceptional_return | ||||
normal_return: | normal_return: | ||||
; CHECK-LABEL: %normal_return | ; CHECK-LABEL: %normal_return | ||||
; CHECK: xorl %eax, %eax | ; CHECK: xorl %eax, %eax | ||||
; CHECK-NEXT: popq | ; CHECK-NEXT: popq | ||||
; CHECK-NEXT: : | |||||
; CHECK-NEXT: .cfi_def_cfa_offset 8 | |||||
; CHECK-NEXT: retq | ; CHECK-NEXT: retq | ||||
%null.relocated = call coldcc i64 addrspace(1)* @llvm.experimental.gc.relocate.p1i64(token %sp1, i32 13, i32 13) | %null.relocated = call coldcc i64 addrspace(1)* @llvm.experimental.gc.relocate.p1i64(token %sp1, i32 13, i32 13) | ||||
%undef.relocated = call coldcc i64 addrspace(1)* @llvm.experimental.gc.relocate.p1i64(token %sp1, i32 14, i32 14) | %undef.relocated = call coldcc i64 addrspace(1)* @llvm.experimental.gc.relocate.p1i64(token %sp1, i32 14, i32 14) | ||||
ret i64 addrspace(1)* %null.relocated | ret i64 addrspace(1)* %null.relocated | ||||
exceptional_return: | exceptional_return: | ||||
%landing_pad = landingpad token | %landing_pad = landingpad token | ||||
cleanup | cleanup | ||||
Show All 11 Lines | entry: | ||||
%c = inttoptr i64 15 to i64 addrspace(1)* | %c = inttoptr i64 15 to i64 addrspace(1)* | ||||
; CHECK: callq | ; CHECK: callq | ||||
%sp = invoke token (i64, i32, void (i64 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidp1i64f(i64 0, i32 0, void (i64 addrspace(1)*)* @some_call, i32 1, i32 0, i64 addrspace(1)* %val1, i32 0, i32 5, i32 0, i32 -1, i32 0, i32 0, i32 0, i32 addrspace(1)* %aa, i64 addrspace(1)* %c) | %sp = invoke token (i64, i32, void (i64 addrspace(1)*)*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidp1i64f(i64 0, i32 0, void (i64 addrspace(1)*)* @some_call, i32 1, i32 0, i64 addrspace(1)* %val1, i32 0, i32 5, i32 0, i32 -1, i32 0, i32 0, i32 0, i32 addrspace(1)* %aa, i64 addrspace(1)* %c) | ||||
to label %normal_return unwind label %exceptional_return | to label %normal_return unwind label %exceptional_return | ||||
normal_return: | normal_return: | ||||
; CHECK: leaq | ; CHECK: leaq | ||||
; CHECK-NEXT: popq | ; CHECK-NEXT: popq | ||||
; CHECK-NEXT: : | |||||
; CHECK-NEXT: .cfi_def_cfa_offset 8 | |||||
; CHECK-NEXT: retq | ; CHECK-NEXT: retq | ||||
%aa.rel = call coldcc i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %sp, i32 13, i32 13) | %aa.rel = call coldcc i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %sp, i32 13, i32 13) | ||||
%aa.converted = bitcast i32 addrspace(1)* %aa.rel to i64 addrspace(1)* | %aa.converted = bitcast i32 addrspace(1)* %aa.rel to i64 addrspace(1)* | ||||
ret i64 addrspace(1)* %aa.converted | ret i64 addrspace(1)* %aa.converted | ||||
exceptional_return: | exceptional_return: | ||||
; CHECK: movl $15 | ; CHECK: movl $15 | ||||
; CHECK-NEXT: popq | ; CHECK-NEXT: popq | ||||
; CHECK-NEXT: : | |||||
; CHECK-NEXT: .cfi_def_cfa_offset 8 | |||||
; CHECK-NEXT: retq | ; CHECK-NEXT: retq | ||||
%landing_pad = landingpad token | %landing_pad = landingpad token | ||||
cleanup | cleanup | ||||
%aa.rel2 = call coldcc i64 addrspace(1)* @llvm.experimental.gc.relocate.p1i64(token %landing_pad, i32 14, i32 14) | %aa.rel2 = call coldcc i64 addrspace(1)* @llvm.experimental.gc.relocate.p1i64(token %landing_pad, i32 14, i32 14) | ||||
ret i64 addrspace(1)* %aa.rel2 | ret i64 addrspace(1)* %aa.rel2 | ||||
} | } | ||||
declare token @llvm.experimental.gc.statepoint.p0f_isVoidp1i64f(i64, i32, void (i64 addrspace(1)*)*, i32, i32, ...) | declare token @llvm.experimental.gc.statepoint.p0f_isVoidp1i64f(i64, i32, void (i64 addrspace(1)*)*, i32, i32, ...) | ||||
declare token @llvm.experimental.gc.statepoint.p0f_p1i64p1i64f(i64, i32, i64 addrspace(1)* (i64 addrspace(1)*)*, i32, i32, ...) | declare token @llvm.experimental.gc.statepoint.p0f_p1i64p1i64f(i64, i32, i64 addrspace(1)* (i64 addrspace(1)*)*, i32, i32, ...) | ||||
declare i64 addrspace(1)* @llvm.experimental.gc.relocate.p1i64(token, i32, i32) | declare i64 addrspace(1)* @llvm.experimental.gc.relocate.p1i64(token, i32, i32) | ||||
declare i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token, i32, i32) | declare i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token, i32, i32) | ||||
declare i64 addrspace(1)* @llvm.experimental.gc.result.p1i64(token) | declare i64 addrspace(1)* @llvm.experimental.gc.result.p1i64(token) |