xref: /llvm-project/llvm/test/Analysis/MemorySSA/pr42940.ll (revision 1469d82e1cb3edc939d6b93089046edfef0cf36c)
1; RUN: opt -passes=licm -verify-memoryssa  -S %s | FileCheck %s
2; REQUIRES: asserts
3
4target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64"
5target triple = "s390x-ibm-linux"
6
7@g_77 = external dso_local global i16, align 2
8
9; CHECK-LABEL: @f1(i1 %arg)
10define void @f1(i1 %arg) {
11entry:
12  store i16 undef, ptr @g_77, align 2
13  br label %loop_pre
14
15unreachablelabel: ; No predecessors
16  br label %loop_pre
17
18loop_pre:
19  br label %for.cond.header
20
21for.cond.header:
22  store i32 0, ptr undef, align 4
23  br i1 %arg, label %for.body, label %for.end
24
25for.body:
26  %tmp1 = load volatile i16, ptr undef, align 2
27  br label %for.end
28
29for.end:
30  br i1 %arg, label %func.exit, label %for.cond.header
31
32func.exit:
33  ret void
34}
35
36@g_159 = external dso_local global i32, align 4
37
38; CHECK-LABEL: @f2(i1 %arg)
39define void @f2(i1 %arg) {
40entry:
41  br label %for.header.first
42
43for.header.first:
44  br label %for.body.first
45
46for.body.first:
47  store i32 0, ptr @g_159, align 4
48  br i1 %arg, label %for.body.first, label %for.end.first
49
50for.end.first:
51  br i1 %arg, label %lor.end, label %for.header.first
52
53lor.end:
54  br label %for.pre
55
56unreachablelabel: ; No predecessors
57  br label %for.pre
58
59for.pre:
60  br label %for.header.second
61
62for.header.second:
63  store i32 undef, ptr undef, align 4
64  br label %for.header.second
65}
66
67@g_271 = external dso_local global i8, align 2
68@g_427 = external dso_local unnamed_addr global [9 x i16], align 2
69
70; CHECK-LABEL: @f3(i1 %arg)
71define  void @f3(i1 %arg) {
72entry:
73  br label %for.preheader
74
75for.preheader:
76  store volatile i8 undef, ptr @g_271, align 2
77  br i1 %arg, label %for.preheader, label %for.end
78
79for.end:
80  br label %lbl_1058.i
81
82unreachablelabel: ; No predecessors
83  br label %lbl_1058.i
84
85lbl_1058.i:
86  br label %for.cond3.preheader.i
87
88for.cond3.preheader.i:
89  %tmp1 = load i16, ptr getelementptr inbounds ([9 x i16], ptr @g_427, i64 0, i64 2), align 2
90  %conv620.i129 = zext i16 %tmp1 to i32
91  %cmp621.i130 = icmp ugt i32 undef, %conv620.i129
92  %conv622.i131 = zext i1 %cmp621.i130 to i32
93  store i32 %conv622.i131, ptr undef, align 4
94  br i1 %arg, label %func.exit, label %for.cond3.preheader.i
95
96func.exit:
97  ret void
98}
99
100@g_6 = external dso_local unnamed_addr global [3 x i32], align 4
101@g_244 = external dso_local global i64, align 8
102@g_1164 = external dso_local global i64, align 8
103
104; CHECK-LABEL: @f4(i1 %arg)
105define void @f4(i1 %arg) {
106entry:
107  br label %for.cond8.preheader
108
109for.cond8.preheader:
110  store i32 0, ptr getelementptr inbounds ([3 x i32], ptr @g_6, i64 0, i64 2), align 4
111  br i1 %arg, label %if.end, label %for.cond8.preheader
112
113if.end:
114  br i1 %arg, label %cleanup1270, label %for.cond504.preheader
115
116for.cond504.preheader:
117  store i64 undef, ptr @g_244, align 8
118  br label %cleanup1270
119
120for.cond559.preheader:
121  store i64 undef, ptr @g_1164, align 8
122  br i1 %arg, label %for.cond559.preheader, label %cleanup1270
123
124cleanup1270:
125  ret void
126}
127
128@g_1504 = external dso_local local_unnamed_addr global ptr, align 8
129
130define void @f5(i1 %arg) {
131bb:
132  tail call fastcc void @f21()
133  br label %bb12.outer
134
135bb12.outer.loopexit:                              ; No predecessors!
136  br label %bb12.outer
137
138bb12.outer:                                       ; preds = %bb12.outer.loopexit, %bb
139  br i1 %arg, label %bb12.outer.split.us, label %bb12.preheader
140
141bb12.preheader:                                   ; preds = %bb12.outer
142  br label %bb12
143
144bb12.outer.split.us:                              ; preds = %bb12.outer
145  br label %bb16.us.us
146
147bb16.us.us:                                       ; preds = %bb16.us.us, %bb12.outer.split.us
148  br label %bb16.us.us
149
150bb12:                                             ; preds = %bb77.1, %bb12.preheader
151  br i1 %arg, label %bb25.preheader, label %bb77
152
153bb25.preheader:                                   ; preds = %bb12.1, %bb12
154  br label %bb25
155
156bb25:                                             ; preds = %l0, %bb25.preheader
157  br i1 %arg, label %bb62, label %bb71.thread
158
159bb62:                                             ; preds = %bb25
160  br i1 %arg, label %bb92.loopexit, label %l0
161
162l0:                                                ; preds = %bb62
163  br label %bb25
164
165bb71.thread:                                      ; preds = %bb25
166  br label %bb92
167
168bb77:                                             ; preds = %bb12
169  %tmp78 = load ptr, ptr @g_1504, align 8
170  %tmp79 = load volatile ptr, ptr %tmp78, align 8
171  br i1 %arg, label %bb91, label %bb12.1
172
173bb91:                                             ; preds = %bb77.1, %bb77
174  unreachable
175
176bb92.loopexit:                                    ; preds = %bb62
177  br label %bb92
178
179bb92:                                             ; preds = %bb92.loopexit, %bb71.thread
180  ret void
181
182bb12.1:                                           ; preds = %bb77
183  br i1 %arg, label %bb25.preheader, label %bb77.1
184
185bb77.1:                                           ; preds = %bb12.1
186  br i1 %arg, label %bb91, label %bb12
187}
188
189declare void @f21()
190