Files
llvm-project/llvm/test/CodeGen/X86/cleanuppad-large-codemodel.ll
Reid Kleckner b8fd162fc5 [WinEH] Mark funclet entries and exits as clobbering all registers
Summary:
In this implementation, LiveIntervalAnalysis invents a few register
masks on basic block boundaries that preserve no registers. The nice
thing about this is that it prevents the prologue inserter from thinking
it needs to spill all XMM CSRs, because it doesn't see any explicit
physreg defs in the MI.

Reviewers: MatzeB, qcolombet, JosephTremoulet, majnemer

Subscribers: MatzeB, llvm-commits

Differential Revision: http://reviews.llvm.org/D14407

llvm-svn: 252318
2015-11-06 17:06:38 +00:00

28 lines
628 B
LLVM

; RUN: llc -mtriple=x86_64-pc-windows-msvc -code-model=large -o - < %s | FileCheck %s
declare i32 @__CxxFrameHandler3(...)
declare void @bar()
define void @foo() personality i32 (...)* @__CxxFrameHandler3 {
entry:
invoke void @bar()
to label %exit unwind label %cleanup
cleanup:
%c = cleanuppad []
call void @bar()
cleanupret %c unwind to caller
exit:
ret void
}
; CHECK: foo: # @foo
; CHECK: movabsq $bar, %[[reg:[^ ]*]]
; CHECK: callq *%[[reg]]
; CHECK: retq
; CHECK: "?dtor$2@?0?foo@4HA":
; CHECK: movabsq $bar, %[[reg:[^ ]*]]
; CHECK: callq *%[[reg]]
; CHECK: retq # CLEANUPRET