1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes=dse -S | FileCheck %s
3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
6 declare i32 @__CxxFrameHandler3(...)
9 ; Make sure we do not eliminate `store i32 20, ptr %sv`. Even though it is a store
10 ; to a stack object, we can read it in the landing/catchpad.
11 define void @test12(ptr %p) personality ptr @__CxxFrameHandler3 {
12 ; CHECK-LABEL: @test12(
14 ; CHECK-NEXT: [[SV:%.*]] = alloca i32
15 ; CHECK-NEXT: br label [[BLOCK2:%.*]]
17 ; CHECK-NEXT: store i32 20, ptr [[SV]]
18 ; CHECK-NEXT: invoke void @f()
19 ; CHECK-NEXT: to label [[BLOCK3:%.*]] unwind label [[CATCH_DISPATCH:%.*]]
21 ; CHECK-NEXT: br label [[EXIT:%.*]]
22 ; CHECK: catch.dispatch:
23 ; CHECK-NEXT: [[CS1:%.*]] = catchswitch within none [label %catch] unwind label [[CLEANUP:%.*]]
25 ; CHECK-NEXT: [[C:%.*]] = catchpad within [[CS1]] []
26 ; CHECK-NEXT: [[LV:%.*]] = load i32, ptr [[SV]]
27 ; CHECK-NEXT: br label [[EXIT]]
29 ; CHECK-NEXT: [[C1:%.*]] = cleanuppad within none []
30 ; CHECK-NEXT: br label [[EXIT]]
32 ; CHECK-NEXT: ret void
41 to label %block3 unwind label %catch.dispatch
48 %cs1 = catchswitch within none [label %catch] unwind label %cleanup
51 %c = catchpad within %cs1 []
52 %lv = load i32, ptr %sv
56 %c1 = cleanuppad within none []