| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt -passes=reg2mem -S < %s | FileCheck %s |
| |
| declare void @"read_mem"() |
| |
| define void @"memcpy_seh"() personality ptr @__C_specific_handler { |
| ; CHECK-LABEL: @memcpy_seh( |
| ; CHECK-NEXT: entry: |
| ; CHECK-NEXT: %"reg2mem alloca point" = bitcast i32 0 to i32 |
| ; CHECK-NEXT: invoke void @read_mem() |
| ; CHECK-NEXT: to label [[CLEANUP:%.*]] unwind label [[CATCH_DISPATCH:%.*]] |
| ; CHECK: catch.dispatch: |
| ; CHECK-NEXT: [[TMP0:%.*]] = catchswitch within none [label %__except] unwind to caller |
| ; CHECK: __except: |
| ; CHECK-NEXT: [[TMP1:%.*]] = catchpad within [[TMP0]] [ptr null] |
| ; CHECK-NEXT: unreachable |
| ; CHECK: cleanup: |
| ; CHECK-NEXT: ret void |
| ; |
| entry: |
| invoke void @"read_mem"() |
| to label %cleanup unwind label %catch.dispatch |
| |
| catch.dispatch: ; preds = %entry |
| %0 = catchswitch within none [label %__except] unwind to caller |
| |
| __except: ; preds = %catch.dispatch |
| %1 = catchpad within %0 [ptr null] |
| unreachable |
| |
| cleanup: ; preds = %entry |
| ret void |
| } |
| |
| declare i32 @__C_specific_handler(...) |