xref: /llvm-project/llvm/test/Transforms/DeadStoreElimination/multiblock-partial.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"
5
6define void @second_store_smaller_1(ptr noalias %P, i1 %c) {
7; CHECK-LABEL: @second_store_smaller_1(
8; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 4
9; CHECK-NEXT:    br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
10; CHECK:       bb1:
11; CHECK-NEXT:    br label [[BB3:%.*]]
12; CHECK:       bb2:
13; CHECK-NEXT:    br label [[BB3]]
14; CHECK:       bb3:
15; CHECK-NEXT:    ret void
16;
17  store i32 1, ptr %P
18  br i1 %c, label %bb1, label %bb2
19bb1:
20  br label %bb3
21bb2:
22  br label %bb3
23bb3:
24  store i16 0, ptr %P
25  ret void
26}
27
28define void @second_store_smaller_2(ptr noalias %P, i1 %c) {
29; CHECK-LABEL: @second_store_smaller_2(
30; CHECK-NEXT:    store i32 12345, ptr [[P:%.*]], align 4
31; CHECK-NEXT:    br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
32; CHECK:       bb1:
33; CHECK-NEXT:    br label [[BB3:%.*]]
34; CHECK:       bb2:
35; CHECK-NEXT:    br label [[BB3]]
36; CHECK:       bb3:
37; CHECK-NEXT:    ret void
38;
39  store i32 1, ptr %P
40  br i1 %c, label %bb1, label %bb2
41bb1:
42  br label %bb3
43bb2:
44  br label %bb3
45bb3:
46  store i16 12345, ptr %P
47  ret void
48}
49
50declare void @use(i16) readnone
51declare void @use.i8(i8) readnone
52
53define void @second_store_smaller_3(ptr noalias %P, i1 %c) {
54; CHECK-LABEL: @second_store_smaller_3(
55; CHECK-NEXT:    store i32 1, ptr [[P:%.*]], align 4
56; CHECK-NEXT:    br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
57; CHECK:       bb1:
58; CHECK-NEXT:    [[L1:%.*]] = load i16, ptr [[P]], align 2
59; CHECK-NEXT:    call void @use(i16 [[L1]])
60; CHECK-NEXT:    br label [[BB3:%.*]]
61; CHECK:       bb2:
62; CHECK-NEXT:    br label [[BB3]]
63; CHECK:       bb3:
64; CHECK-NEXT:    store i16 -31073, ptr [[P]], align 2
65; CHECK-NEXT:    ret void
66;
67  store i32 1, ptr %P
68  br i1 %c, label %bb1, label %bb2
69
70bb1:
71  %l1 = load i16, ptr %P
72  call void @use(i16 %l1)
73  br label %bb3
74bb2:
75  br label %bb3
76bb3:
77  store i16 -31073, ptr %P
78  ret void
79}
80
81define void @second_store_smaller_4(ptr noalias %P, i1 %c) {
82; CHECK-LABEL: @second_store_smaller_4(
83; CHECK-NEXT:    store i32 1, ptr [[P:%.*]], align 4
84; CHECK-NEXT:    br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
85; CHECK:       bb1:
86; CHECK-NEXT:    [[L1:%.*]] = load i8, ptr [[P]], align 1
87; CHECK-NEXT:    call void @use.i8(i8 [[L1]])
88; CHECK-NEXT:    br label [[BB3:%.*]]
89; CHECK:       bb2:
90; CHECK-NEXT:    br label [[BB3]]
91; CHECK:       bb3:
92; CHECK-NEXT:    store i16 -31073, ptr [[P]], align 2
93; CHECK-NEXT:    ret void
94;
95  store i32 1, ptr %P
96  br i1 %c, label %bb1, label %bb2
97
98bb1:
99  %l1 = load i8, ptr %P
100  call void @use.i8(i8 %l1)
101  br label %bb3
102bb2:
103  br label %bb3
104bb3:
105  store i16 -31073, ptr %P
106  ret void
107}
108
109define void @second_store_smaller_5(ptr noalias %P, i16 %x, i1 %c) {
110; CHECK-LABEL: @second_store_smaller_5(
111; CHECK-NEXT:    store i32 1, ptr [[P:%.*]], align 4
112; CHECK-NEXT:    br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
113; CHECK:       bb1:
114; CHECK-NEXT:    br label [[BB3:%.*]]
115; CHECK:       bb2:
116; CHECK-NEXT:    br label [[BB3]]
117; CHECK:       bb3:
118; CHECK-NEXT:    store i16 [[X:%.*]], ptr [[P]], align 2
119; CHECK-NEXT:    ret void
120;
121  store i32 1, ptr %P
122  br i1 %c, label %bb1, label %bb2
123bb1:
124  br label %bb3
125bb2:
126  br label %bb3
127bb3:
128  store i16 %x, ptr %P
129  ret void
130}
131
132define void @second_store_bigger(ptr noalias %P, i1 %c) {
133; CHECK-LABEL: @second_store_bigger(
134; CHECK-NEXT:    br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
135; CHECK:       bb1:
136; CHECK-NEXT:    br label [[BB3:%.*]]
137; CHECK:       bb2:
138; CHECK-NEXT:    br label [[BB3]]
139; CHECK:       bb3:
140; CHECK-NEXT:    store i64 0, ptr [[P:%.*]], align 8
141; CHECK-NEXT:    ret void
142;
143  store i32 1, ptr %P
144  br i1 %c, label %bb1, label %bb2
145bb1:
146  br label %bb3
147bb2:
148  br label %bb3
149bb3:
150  store i64 0, ptr %P
151  ret void
152}
153