xref: /llvm-project/llvm/test/Transforms/DeadStoreElimination/multiblock-throwing.ll (revision f497a00da968b0ff90d8c98caa184d14b9a92495)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=dse -S | FileCheck %s
3
4target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
5declare void @unknown_func()
6
7define void @test6_store_same_value(ptr noalias %P) {
8; CHECK-LABEL: @test6_store_same_value(
9; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 4
10; CHECK-NEXT:    br i1 true, label [[BB1:%.*]], label [[BB2:%.*]]
11; CHECK:       bb1:
12; CHECK-NEXT:    br label [[BB3:%.*]]
13; CHECK:       bb2:
14; CHECK-NEXT:    call void @unknown_func()
15; CHECK-NEXT:    br label [[BB3]]
16; CHECK:       bb3:
17; CHECK-NEXT:    store i32 0, ptr [[P]], align 4
18; CHECK-NEXT:    ret void
19;
20  store i32 0, ptr %P
21  br i1 true, label %bb1, label %bb2
22bb1:
23  br label %bb3
24bb2:
25  call void @unknown_func()
26  br label %bb3
27bb3:
28  store i32 0, ptr %P
29  ret void
30}
31
32define void @test6_store_other_value(ptr noalias %P) {
33; CHECK-LABEL: @test6_store_other_value(
34; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 4
35; CHECK-NEXT:    br i1 true, label [[BB1:%.*]], label [[BB2:%.*]]
36; CHECK:       bb1:
37; CHECK-NEXT:    br label [[BB3:%.*]]
38; CHECK:       bb2:
39; CHECK-NEXT:    call void @unknown_func()
40; CHECK-NEXT:    br label [[BB3]]
41; CHECK:       bb3:
42; CHECK-NEXT:    store i32 1, ptr [[P]], align 4
43; CHECK-NEXT:    ret void
44;
45  store i32 0, ptr %P
46  br i1 true, label %bb1, label %bb2
47bb1:
48  br label %bb3
49bb2:
50  call void @unknown_func()
51  br label %bb3
52bb3:
53  store i32 1, ptr %P
54  ret void
55}
56
57define void @test23(ptr noalias %P) {
58; CHECK-LABEL: @test23(
59; CHECK-NEXT:    br i1 true, label [[BB1:%.*]], label [[BB2:%.*]]
60; CHECK:       bb1:
61; CHECK-NEXT:    br label [[BB3:%.*]]
62; CHECK:       bb2:
63; CHECK-NEXT:    call void @unknown_func()
64; CHECK-NEXT:    br label [[BB3]]
65; CHECK:       bb3:
66; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 4
67; CHECK-NEXT:    ret void
68;
69  br i1 true, label %bb1, label %bb2
70bb1:
71  store i32 0, ptr %P
72  br label %bb3
73bb2:
74  call void @unknown_func()
75  br label %bb3
76bb3:
77  store i32 0, ptr %P
78  ret void
79}
80
81
82define void @test24(ptr noalias %P) {
83; CHECK-LABEL: @test24(
84; CHECK-NEXT:    br i1 true, label [[BB2:%.*]], label [[BB1:%.*]]
85; CHECK:       bb1:
86; CHECK-NEXT:    br label [[BB3:%.*]]
87; CHECK:       bb2:
88; CHECK-NEXT:    call void @unknown_func()
89; CHECK-NEXT:    br label [[BB3]]
90; CHECK:       bb3:
91; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 4
92; CHECK-NEXT:    ret void
93;
94  br i1 true, label %bb2, label %bb1
95bb1:
96  store i32 0, ptr %P
97  br label %bb3
98bb2:
99  call void @unknown_func()
100  br label %bb3
101bb3:
102  store i32 0, ptr %P
103  ret void
104}
105