mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +00:00
0f85d54670
It is intended to be used for a family of personality functions that have similar IR preparation requirements. Typically when interoperating with MSVC personality functions, bits of functionality need to be outlined from the main function into helper functions. There is also usually more than one landing pad per invoke, which does not match the LLVM IR landingpad representation. None of this is implemented yet. This change just adds a new enum that is active for *-windows-msvc and delegates to the EH removal preparation pass. No functionality change for other targets. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224625 91177308-0d34-0410-b5e6-96231b3b80d8
35 lines
914 B
LLVM
35 lines
914 B
LLVM
; RUN: llc -O0 -mtriple=x86_64-linux -asm-verbose=false < %s | FileCheck %s
|
|
; RUN: llc -O0 -mtriple=x86_64-windows-itanium -asm-verbose=false < %s | FileCheck %s
|
|
; rdar://8337108
|
|
|
|
; Fast-isel shouldn't try to look through the compare because it's in a
|
|
; different basic block, so its operands aren't necessarily exported
|
|
; for cross-block usage.
|
|
|
|
; CHECK: movb %al, [[OFS:[0-9]*]](%rsp)
|
|
; CHECK: callq {{_?}}bar
|
|
; CHECK: movb [[OFS]](%rsp), %al
|
|
|
|
declare void @bar()
|
|
|
|
define void @foo(i32 %a, i32 %b) nounwind {
|
|
entry:
|
|
%q = add i32 %a, 7
|
|
%r = add i32 %b, 9
|
|
%t = icmp ult i32 %q, %r
|
|
invoke void @bar() to label %next unwind label %unw
|
|
next:
|
|
br i1 %t, label %true, label %return
|
|
true:
|
|
call void @bar()
|
|
br label %return
|
|
return:
|
|
ret void
|
|
unw:
|
|
%exn = landingpad {i8*, i32} personality i32 (...)* @__gxx_personality_v0
|
|
cleanup
|
|
unreachable
|
|
}
|
|
|
|
declare i32 @__gxx_personality_v0(...)
|