diff options
Diffstat (limited to 'test/CodeGen/X86/cleanuppad-large-codemodel.ll')
-rw-r--r-- | test/CodeGen/X86/cleanuppad-large-codemodel.ll | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/test/CodeGen/X86/cleanuppad-large-codemodel.ll b/test/CodeGen/X86/cleanuppad-large-codemodel.ll new file mode 100644 index 000000000000..8ffb97d8dd68 --- /dev/null +++ b/test/CodeGen/X86/cleanuppad-large-codemodel.ll @@ -0,0 +1,27 @@ +; 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 within none [] + call void @bar() [ "funclet"(token %c) ] + cleanupret from %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 |