diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2015-02-20 02:15:36 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2015-02-20 02:15:36 +0000 |
commit | 90b8e791ac8d299caf3d8e44245dfabbc37a84de (patch) | |
tree | ee5a00e616d4390546925ed85b92885a8eacc636 /test/CodeGen | |
parent | 6a75fe1912b8bdde3f0d6b9725d9d32ebc5a9257 (diff) |
Revert r229944: EH: Prune unreachable resume instructions during Dwarf EH preparation
This doesn't pass 'ninja check-llvm' for me. Lots of tests, including
the ones updated, fail with crashes and other explosions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229952 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen')
-rw-r--r-- | test/CodeGen/Mips/eh.ll | 1 | ||||
-rw-r--r-- | test/CodeGen/X86/dwarf-eh-prepare.ll | 115 | ||||
-rw-r--r-- | test/CodeGen/X86/gcc_except_table.ll | 1 | ||||
-rw-r--r-- | test/CodeGen/X86/gcc_except_table_functions.ll | 1 | ||||
-rw-r--r-- | test/CodeGen/XCore/exception.ll | 6 |
5 files changed, 6 insertions, 118 deletions
diff --git a/test/CodeGen/Mips/eh.ll b/test/CodeGen/Mips/eh.ll index 3e7f64aa227..fc9e2ef21a8 100644 --- a/test/CodeGen/Mips/eh.ll +++ b/test/CodeGen/Mips/eh.ll @@ -27,7 +27,6 @@ lpad: ; preds = %entry ; CHECK-EL: bne $5 %exn.val = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0 - cleanup catch i8* bitcast (i8** @_ZTId to i8*) %exn = extractvalue { i8*, i32 } %exn.val, 0 %sel = extractvalue { i8*, i32 } %exn.val, 1 diff --git a/test/CodeGen/X86/dwarf-eh-prepare.ll b/test/CodeGen/X86/dwarf-eh-prepare.ll index 25572d868da..a3a70da866c 100644 --- a/test/CodeGen/X86/dwarf-eh-prepare.ll +++ b/test/CodeGen/X86/dwarf-eh-prepare.ll @@ -7,13 +7,12 @@ @int_typeinfo = global i8 0 declare void @might_throw() -declare void @cleanup() -define i32 @simple_cleanup_catch() { +define i32 @simple_catch() { invoke void @might_throw() to label %cont unwind label %lpad -; CHECK-LABEL: define i32 @simple_cleanup_catch() +; CHECK: define i32 @simple_catch() ; CHECK: invoke void @might_throw() cont: @@ -23,18 +22,15 @@ cont: lpad: %ehvals = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0 - cleanup catch i8* @int_typeinfo %ehptr = extractvalue { i8*, i32 } %ehvals, 0 %ehsel = extractvalue { i8*, i32 } %ehvals, 1 - call void @cleanup() %int_sel = call i32 @llvm.eh.typeid.for(i8* @int_typeinfo) %int_match = icmp eq i32 %ehsel, %int_sel br i1 %int_match, label %catch_int, label %eh.resume ; CHECK: lpad: ; CHECK: landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0 -; CHECK: call void @cleanup() ; CHECK: call i32 @llvm.eh.typeid.for ; CHECK: br i1 @@ -45,114 +41,11 @@ catch_int: ; CHECK: ret i32 1 eh.resume: - %tmp_ehvals = insertvalue { i8*, i32 } undef, i8* %ehptr, 0 - %new_ehvals = insertvalue { i8*, i32 } %tmp_ehvals, i32 %ehsel, 1 - resume { i8*, i32 } %new_ehvals + resume { i8*, i32 } %ehvals ; CHECK: eh.resume: -; CHECK-NEXT: call void @_Unwind_Resume(i8* %ehptr) +; CHECK: call void @_Unwind_Resume(i8* %{{.*}}) } - -define i32 @catch_no_resume() { - invoke void @might_throw() - to label %cont unwind label %lpad - -cont: - ret i32 0 - -lpad: - %ehvals = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0 - catch i8* @int_typeinfo - %ehptr = extractvalue { i8*, i32 } %ehvals, 0 - %ehsel = extractvalue { i8*, i32 } %ehvals, 1 - %int_sel = call i32 @llvm.eh.typeid.for(i8* @int_typeinfo) - %int_match = icmp eq i32 %ehsel, %int_sel - br i1 %int_match, label %catch_int, label %eh.resume - -catch_int: - ret i32 1 - -eh.resume: - %tmp_ehvals = insertvalue { i8*, i32 } undef, i8* %ehptr, 0 - %new_ehvals = insertvalue { i8*, i32 } %tmp_ehvals, i32 %ehsel, 1 - resume { i8*, i32 } %new_ehvals -} - -; Check that we can prune the unreachable resume instruction. - -; CHECK-LABEL: define i32 @catch_no_resume() { -; CHECK: invoke void @might_throw() -; CHECK: ret i32 0 -; CHECK: lpad: -; CHECK: landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0 -; CHECK-NOT: br i1 -; CHECK: ret i32 1 -; CHECK-NOT: call void @_Unwind_Resume -; CHECK: {{^[}]}} - - -define i32 @catch_cleanup_merge() { - invoke void @might_throw() - to label %inner_invoke unwind label %outer_lpad -inner_invoke: - invoke void @might_throw() - to label %cont unwind label %inner_lpad -cont: - ret i32 0 - -outer_lpad: - %ehvals1 = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0 - catch i8* @int_typeinfo - br label %catch.dispatch - -inner_lpad: - %ehvals2 = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0 - cleanup - catch i8* @int_typeinfo - call void @cleanup() - br label %catch.dispatch - -catch.dispatch: - %ehvals = phi { i8*, i32 } [ %ehvals1, %outer_lpad ], [ %ehvals2, %inner_lpad ] - %ehptr = extractvalue { i8*, i32 } %ehvals, 0 - %ehsel = extractvalue { i8*, i32 } %ehvals, 1 - %int_sel = call i32 @llvm.eh.typeid.for(i8* @int_typeinfo) - %int_match = icmp eq i32 %ehsel, %int_sel - br i1 %int_match, label %catch_int, label %eh.resume - -catch_int: - ret i32 1 - -eh.resume: - %tmp_ehvals = insertvalue { i8*, i32 } undef, i8* %ehptr, 0 - %new_ehvals = insertvalue { i8*, i32 } %tmp_ehvals, i32 %ehsel, 1 - resume { i8*, i32 } %new_ehvals -} - -; We can't prune this merge because one landingpad is a cleanup pad. - -; CHECK-LABEL: define i32 @catch_cleanup_merge() -; CHECK: invoke void @might_throw() -; CHECK: invoke void @might_throw() -; CHECK: ret i32 0 -; -; CHECK: outer_lpad: -; CHECK: landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0 -; CHECK: br label %catch.dispatch -; -; CHECK: inner_lpad: -; CHECK: landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0 -; CHECK: call void @cleanup() -; CHECK: br label %catch.dispatch -; -; CHECK: catch.dispatch: -; CHECK: call i32 @llvm.eh.typeid.for -; CHECK: br i1 -; CHECK: catch_int: -; CHECK: ret i32 1 -; CHECK: eh.resume: -; CHECK-NEXT: call void @_Unwind_Resume(i8* %ehptr) - declare i32 @__gxx_personality_v0(...) declare i32 @llvm.eh.typeid.for(i8*) diff --git a/test/CodeGen/X86/gcc_except_table.ll b/test/CodeGen/X86/gcc_except_table.ll index b656dc9d68e..abce13002db 100644 --- a/test/CodeGen/X86/gcc_except_table.ll +++ b/test/CodeGen/X86/gcc_except_table.ll @@ -37,7 +37,6 @@ entry: lpad: %0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) - cleanup catch i8* bitcast (i8** @_ZTIi to i8*) br label %eh.resume diff --git a/test/CodeGen/X86/gcc_except_table_functions.ll b/test/CodeGen/X86/gcc_except_table_functions.ll index 7a64a01fa38..4a8168050e5 100644 --- a/test/CodeGen/X86/gcc_except_table_functions.ll +++ b/test/CodeGen/X86/gcc_except_table_functions.ll @@ -20,7 +20,6 @@ try.cont: lpad: %0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) - cleanup catch i8* bitcast (void ()* @filt0 to i8*) catch i8* bitcast (void ()* @filt1 to i8*) %sel = extractvalue { i8*, i32 } %0, 1 diff --git a/test/CodeGen/XCore/exception.ll b/test/CodeGen/XCore/exception.ll index cd9771d6401..fec83eb15ea 100644 --- a/test/CodeGen/XCore/exception.ll +++ b/test/CodeGen/XCore/exception.ll @@ -78,7 +78,6 @@ cont: ; CHECK: bl __cxa_end_catch lpad: %0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) - cleanup catch i8* bitcast (i8** @_ZTIi to i8*) catch i8* bitcast (i8** @_ZTId to i8*) %1 = extractvalue { i8*, i32 } %0, 0 @@ -111,14 +110,13 @@ Exit: ; CHECK: .long [[PRE_G]]-[[START]] ; CHECK: .long [[POST_G]]-[[PRE_G]] ; CHECK: .long [[LANDING]]-[[START]] -; CHECK: .byte 5 +; CHECK: .byte 3 ; CHECK: .long [[POST_G]]-[[START]] ; CHECK: .long [[END]]-[[POST_G]] ; CHECK: .long 0 ; CHECK: .byte 0 -; CHECK: .byte 0 ; CHECK: .byte 1 -; CHECK: .byte 125 +; CHECK: .byte 0 ; CHECK: .byte 2 ; CHECK: .byte 125 ; CHECK: .long _ZTIi |