brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · fa37d51 Raw
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