diff options
author | Andrew Kaylor <andrew.kaylor@intel.com> | 2015-03-11 23:22:06 +0000 |
---|---|---|
committer | Andrew Kaylor <andrew.kaylor@intel.com> | 2015-03-11 23:22:06 +0000 |
commit | 6b67d4277366cbaa0b76b544b94ebafab26e502a (patch) | |
tree | dd6a56a77fa213f1f967eb9939216f48789f0466 /llvm/test/CodeGen/WinEH/cppeh-catch-all.ll | |
parent | 5f141b03fa622e6c2992b3c0b855a297f585dc0d (diff) | |
download | bcm5719-llvm-6b67d4277366cbaa0b76b544b94ebafab26e502a.tar.gz bcm5719-llvm-6b67d4277366cbaa0b76b544b94ebafab26e502a.zip |
Extended support for native Windows C++ EH outlining
Differential Review: http://reviews.llvm.org/D7886
llvm-svn: 231981
Diffstat (limited to 'llvm/test/CodeGen/WinEH/cppeh-catch-all.ll')
-rw-r--r-- | llvm/test/CodeGen/WinEH/cppeh-catch-all.ll | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/WinEH/cppeh-catch-all.ll b/llvm/test/CodeGen/WinEH/cppeh-catch-all.ll index d1141e38638..a84b8645fe4 100644 --- a/llvm/test/CodeGen/WinEH/cppeh-catch-all.ll +++ b/llvm/test/CodeGen/WinEH/cppeh-catch-all.ll @@ -18,6 +18,12 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-pc-windows-msvc" +; The function entry in this case remains unchanged. +; CHECK: define void @_Z4testv() #0 { +; CHECK: entry: +; CHECK: invoke void @_Z9may_throwv() +; CHECK: to label %invoke.cont unwind label %[[LPAD_LABEL:lpad[0-9]+]] + ; Function Attrs: uwtable define void @_Z4testv() #0 { entry: @@ -29,6 +35,16 @@ entry: invoke.cont: ; preds = %entry br label %try.cont +; CHECK: [[LPAD_LABEL]]:{{[ ]+}}; preds = %entry +; CHECK: [[LPAD_VAL:\%.+]] = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) +; CHECK: catch i8* null +; CHECK-NOT: extractvalue { i8*, i32 } +; CHECK-NOT: store i8* +; CHECK-NOT: store i32 +; CHECK-NOT: br label %catch +; CHECK: [[RECOVER:\%.+]] = call i8* (...)* @llvm.eh.actions({ i8*, i32 } [[LPAD_VAL]], i32 0, i8* null, i8* null, i8* bitcast (i8* (i8*, i8*)* @_Z4testv.catch to i8*)) +; CHECK: indirectbr i8* [[RECOVER]], [label %try.cont] + lpad: ; preds = %entry %tmp = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) catch i8* null @@ -38,18 +54,24 @@ lpad: ; preds = %entry store i32 %tmp2, i32* %ehselector.slot br label %catch +; CHECK-NOT: catch: + catch: ; preds = %lpad %exn = load i8*, i8** %exn.slot call void @llvm.eh.begincatch(i8* %exn, i8* null) #2 call void @_Z16handle_exceptionv() br label %invoke.cont2 +; CHECK-NOT: invoke.cont2: + invoke.cont2: ; preds = %catch call void @llvm.eh.endcatch() br label %try.cont try.cont: ; preds = %invoke.cont2, %invoke.cont ret void + +; CHECK: } } ; CHECK: define internal i8* @_Z4testv.catch(i8*, i8*) { |