Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / DeadStoreElimination / multiblock-partial.ll
blob10235a366262cac833638ec207df94d366126f1f
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes=dse -S | FileCheck %s
4 target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
6 define 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
17   store i32 1, ptr %P
18   br i1 %c, label %bb1, label %bb2
19 bb1:
20   br label %bb3
21 bb2:
22   br label %bb3
23 bb3:
24   store i16 0, ptr %P
25   ret void
28 define 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
39   store i32 1, ptr %P
40   br i1 %c, label %bb1, label %bb2
41 bb1:
42   br label %bb3
43 bb2:
44   br label %bb3
45 bb3:
46   store i16 12345, ptr %P
47   ret void
50 declare void @use(i16) readnone
51 declare void @use.i8(i8) readnone
53 define 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
67   store i32 1, ptr %P
68   br i1 %c, label %bb1, label %bb2
70 bb1:
71   %l1 = load i16, ptr %P
72   call void @use(i16 %l1)
73   br label %bb3
74 bb2:
75   br label %bb3
76 bb3:
77   store i16 -31073, ptr %P
78   ret void
81 define 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
95   store i32 1, ptr %P
96   br i1 %c, label %bb1, label %bb2
98 bb1:
99   %l1 = load i8, ptr %P
100   call void @use.i8(i8 %l1)
101   br label %bb3
102 bb2:
103   br label %bb3
104 bb3:
105   store i16 -31073, ptr %P
106   ret void
109 define 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
121   store i32 1, ptr %P
122   br i1 %c, label %bb1, label %bb2
123 bb1:
124   br label %bb3
125 bb2:
126   br label %bb3
127 bb3:
128   store i16 %x, ptr %P
129   ret void
132 define 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
143   store i32 1, ptr %P
144   br i1 %c, label %bb1, label %bb2
145 bb1:
146   br label %bb3
147 bb2:
148   br label %bb3
149 bb3:
150   store i64 0, ptr %P
151   ret void