diff options
| author | Reid Kleckner <rnk@google.com> | 2015-11-10 23:22:20 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2015-11-10 23:22:20 +0000 |
| commit | 7f84a939ed04718f7f814e8cc1fe8768c92ccb28 (patch) | |
| tree | 8101d02d418d89b600b3dcee92b17ab260f5a7ab /llvm/test/CodeGen/X86 | |
| parent | a4f370583d900603d0ddd15c8cc1cc44be178c7e (diff) | |
| download | bcm5719-llvm-7f84a939ed04718f7f814e8cc1fe8768c92ccb28.tar.gz bcm5719-llvm-7f84a939ed04718f7f814e8cc1fe8768c92ccb28.zip | |
[WinEH] Insert the MBB for EH_RESTORE after the catchret
Inserting it before the target block could be bad, we might already have
a fallthrough edge to it.
llvm-svn: 252670
Diffstat (limited to 'llvm/test/CodeGen/X86')
| -rw-r--r-- | llvm/test/CodeGen/X86/catchret-fallthrough.ll | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/catchret-fallthrough.ll b/llvm/test/CodeGen/X86/catchret-fallthrough.ll new file mode 100644 index 00000000000..497f6fb3a9d --- /dev/null +++ b/llvm/test/CodeGen/X86/catchret-fallthrough.ll @@ -0,0 +1,46 @@ +; RUN: llc -verify-machineinstrs < %s | FileCheck %s + +; We used to have an issue where we inserted an MBB between invoke.cont.3 and +; its fallthrough target of ret void. + +target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32" +target triple = "i386-pc-windows-msvc18.0.0" + +@some_global = global i32 0 + +declare i32 @__CxxFrameHandler3(...) + +declare void @g() + +define void @f() personality i32 (...)* @__CxxFrameHandler3 { +entry: + invoke void @g() + to label %invoke.cont.3 unwind label %catch.dispatch + +catch.dispatch: ; preds = %entry + %0 = catchpad [i8* null, i32 64, i8* null] + to label %catch unwind label %catchendblock + +catch: ; preds = %catch.dispatch + catchret %0 to label %nrvo.skipdtor + +catchendblock: ; preds = %catch, %catch.dispatch + catchendpad unwind to caller + +invoke.cont.3: ; preds = %entry + store i32 123, i32* @some_global + br label %nrvo.skipdtor + +nrvo.skipdtor: ; preds = %invoke.cont.3, %invoke.cont.4 + ret void +} + +; CHECK-LABEL: _f: # @f +; CHECK: calll _g +; CHECK: movl $123, _some_global +; CHECK-NOT: jmp +; CHECK-NOT: movl {{.*}}, %esp +; CHECK: retl +; CHECK: movl {{.*}}, %esp +; CHECK: addl $12, %ebp +; CHECK: jmp LBB0_{{.*}} |

