[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / Transforms / DeadStoreElimination / multiblock-exceptions.ll
blobfa37d513ca78375a4dfbfa7afe5b2fd9e5228c73
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"
5 declare void @f()
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(
13 ; CHECK-NEXT:  block1:
14 ; CHECK-NEXT:    [[SV:%.*]] = alloca i32
15 ; 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 void
34 block1:
35   %sv = alloca i32
36   br label %block2
38 block2:
39   store i32 20, ptr %sv
40   invoke void @f()
41   to label %block3 unwind label %catch.dispatch
43 block3:
44   store i32 30, ptr %sv
45   br label %exit
47 catch.dispatch:
48   %cs1 = catchswitch within none [label %catch] unwind label %cleanup
50 catch:
51   %c = catchpad within %cs1 []
52   %lv = load i32, ptr %sv
53   br label %exit
55 cleanup:
56   %c1 = cleanuppad within none []
57   br label %exit
59 exit:
60   store i32 40, ptr %sv
61   ret void