63 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=dse -S | FileCheck %s3target 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"4 5declare void @f()6declare i32 @__CxxFrameHandler3(...)7 8 9; Make sure we do not eliminate `store i32 20, ptr %sv`. Even though it is a store10; to a stack object, we can read it in the landing/catchpad.11define void @test12(ptr %p) personality ptr @__CxxFrameHandler3 {12; CHECK-LABEL: @test12(13; CHECK-NEXT: block1:14; CHECK-NEXT: [[SV:%.*]] = alloca i3215; CHECK-NEXT: br label [[BLOCK2:%.*]]16; CHECK: 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:%.*]]20; CHECK: block3:21; CHECK-NEXT: br label [[EXIT:%.*]]22; CHECK: catch.dispatch:23; CHECK-NEXT: [[CS1:%.*]] = catchswitch within none [label %catch] unwind label [[CLEANUP:%.*]]24; CHECK: catch:25; CHECK-NEXT: [[C:%.*]] = catchpad within [[CS1]] []26; CHECK-NEXT: [[LV:%.*]] = load i32, ptr [[SV]]27; CHECK-NEXT: br label [[EXIT]]28; CHECK: cleanup:29; CHECK-NEXT: [[C1:%.*]] = cleanuppad within none []30; CHECK-NEXT: br label [[EXIT]]31; CHECK: exit:32; CHECK-NEXT: ret void33;34block1:35 %sv = alloca i3236 br label %block237 38block2:39 store i32 20, ptr %sv40 invoke void @f()41 to label %block3 unwind label %catch.dispatch42 43block3:44 store i32 30, ptr %sv45 br label %exit46 47catch.dispatch:48 %cs1 = catchswitch within none [label %catch] unwind label %cleanup49 50catch:51 %c = catchpad within %cs1 []52 %lv = load i32, ptr %sv53 br label %exit54 55cleanup:56 %c1 = cleanuppad within none []57 br label %exit58 59exit:60 store i32 40, ptr %sv61 ret void62}63