Skip to content

Commit ce41a43

Browse files
authored
Merge pull request #8344 from fhahn/dse-eei-invalidation
[DSE] Remove malloc from EarliestEscapeInfo before removing. (llvm#84157)
2 parents 736f2dc + e72f197 commit ce41a43

File tree

2 files changed

+303
-2
lines changed

2 files changed

+303
-2
lines changed

llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1908,6 +1908,7 @@ struct DSEState {
19081908
Malloc->getArgOperand(0), IRB, TLI);
19091909
if (!Calloc)
19101910
return false;
1911+
19111912
MemorySSAUpdater Updater(&MSSA);
19121913
auto *LastDef =
19131914
cast<MemoryDef>(Updater.getMemorySSA()->getMemoryAccess(Malloc));
@@ -1916,9 +1917,8 @@ struct DSEState {
19161917
LastDef);
19171918
auto *NewAccessMD = cast<MemoryDef>(NewAccess);
19181919
Updater.insertDef(NewAccessMD, /*RenameUses=*/true);
1919-
Updater.removeMemoryAccess(Malloc);
19201920
Malloc->replaceAllUsesWith(Calloc);
1921-
Malloc->eraseFromParent();
1921+
deleteDeadInstruction(Malloc);
19221922
return true;
19231923
}
19241924

Lines changed: 301 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,301 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2+
; RUN: opt -p dse -S %s | FileCheck %s
3+
4+
target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64"
5+
6+
define void @widget(ptr %a) {
7+
; CHECK-LABEL: define void @widget(
8+
; CHECK-SAME: ptr [[A:%.*]]) {
9+
; CHECK-NEXT: bb:
10+
; CHECK-NEXT: [[CALL1:%.*]] = tail call noalias ptr @malloc(i64 0)
11+
; CHECK-NEXT: store ptr [[CALL1]], ptr [[A]], align 8
12+
; CHECK-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A]], align 8
13+
; CHECK-NEXT: [[LOAD2:%.*]] = load i32, ptr [[LOAD]], align 8
14+
; CHECK-NEXT: [[GETELEMENTPTR:%.*]] = getelementptr i8, ptr [[CALL1]], i64 0
15+
; CHECK-NEXT: [[GETELEMENTPTR3:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR]], i64 1
16+
; CHECK-NEXT: [[GETELEMENTPTR4:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR]], i64 8
17+
; CHECK-NEXT: store i16 0, ptr [[GETELEMENTPTR4]], align 4
18+
; CHECK-NEXT: [[GETELEMENTPTR5:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR]], i64 12
19+
; CHECK-NEXT: [[LOAD6:%.*]] = load i32, ptr inttoptr (i64 4 to ptr), align 4
20+
; CHECK-NEXT: br label [[BB48:%.*]]
21+
; CHECK: bb7:
22+
; CHECK-NEXT: br label [[BB9:%.*]]
23+
; CHECK: bb8:
24+
; CHECK-NEXT: br label [[BB53:%.*]]
25+
; CHECK: bb9:
26+
; CHECK-NEXT: [[PHI:%.*]] = phi ptr [ [[CALL1]], [[BB7:%.*]] ], [ [[A]], [[BB43:%.*]] ]
27+
; CHECK-NEXT: [[GETELEMENTPTR10:%.*]] = getelementptr i8, ptr [[PHI]], i64 0
28+
; CHECK-NEXT: [[GETELEMENTPTR11:%.*]] = getelementptr i8, ptr [[PHI]], i64 0
29+
; CHECK-NEXT: [[GETELEMENTPTR12:%.*]] = getelementptr i8, ptr [[PHI]], i64 0
30+
; CHECK-NEXT: [[GETELEMENTPTR13:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 1
31+
; CHECK-NEXT: store i8 0, ptr [[CALL1]], align 1
32+
; CHECK-NEXT: br label [[BB29:%.*]]
33+
; CHECK: bb14:
34+
; CHECK-NEXT: [[GETELEMENTPTR15:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR10]], i64 8
35+
; CHECK-NEXT: [[LOAD16:%.*]] = load i16, ptr [[CALL1]], align 4
36+
; CHECK-NEXT: br i1 false, label [[BB22:%.*]], label [[BB17:%.*]]
37+
; CHECK: bb17:
38+
; CHECK-NEXT: [[GETELEMENTPTR18:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR11]], i64 8
39+
; CHECK-NEXT: [[LOAD19:%.*]] = load i16, ptr [[CALL1]], align 4
40+
; CHECK-NEXT: [[GETELEMENTPTR20:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 8
41+
; CHECK-NEXT: store i16 0, ptr [[CALL1]], align 4
42+
; CHECK-NEXT: [[GETELEMENTPTR21:%.*]] = getelementptr i8, ptr [[PHI]], i64 0
43+
; CHECK-NEXT: br label [[BB25:%.*]]
44+
; CHECK: bb22:
45+
; CHECK-NEXT: [[GETELEMENTPTR23:%.*]] = getelementptr i8, ptr [[PHI]], i64 0
46+
; CHECK-NEXT: [[GETELEMENTPTR24:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR23]], i64 12
47+
; CHECK-NEXT: br label [[BB25]]
48+
; CHECK: bb25:
49+
; CHECK-NEXT: [[PHI26:%.*]] = phi ptr [ [[A]], [[BB17]] ], [ [[CALL1]], [[BB22]] ]
50+
; CHECK-NEXT: [[PHI27:%.*]] = phi ptr [ [[CALL1]], [[BB17]] ], [ [[CALL1]], [[BB22]] ]
51+
; CHECK-NEXT: [[PHI28:%.*]] = phi ptr [ [[CALL1]], [[BB17]] ], [ [[CALL1]], [[BB22]] ]
52+
; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4
53+
; CHECK-NEXT: br label [[BB29]]
54+
; CHECK: bb29:
55+
; CHECK-NEXT: [[PHI30:%.*]] = phi ptr [ [[CALL1]], [[BB9]] ], [ [[CALL1]], [[BB25]] ]
56+
; CHECK-NEXT: [[PHI31:%.*]] = phi ptr [ [[CALL1]], [[BB9]] ], [ [[CALL1]], [[BB25]] ]
57+
; CHECK-NEXT: [[LOAD32:%.*]] = load i8, ptr [[CALL1]], align 4
58+
; CHECK-NEXT: [[LOAD33:%.*]] = load i8, ptr [[CALL1]], align 4
59+
; CHECK-NEXT: [[GETELEMENTPTR34:%.*]] = getelementptr i8, ptr [[PHI31]], i64 12
60+
; CHECK-NEXT: [[GETELEMENTPTR35:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 12
61+
; CHECK-NEXT: br label [[BB86:%.*]]
62+
; CHECK: bb36:
63+
; CHECK-NEXT: [[GETELEMENTPTR37:%.*]] = getelementptr i8, ptr [[PHI30]], i64 12
64+
; CHECK-NEXT: br label [[BB38:%.*]]
65+
; CHECK: bb38:
66+
; CHECK-NEXT: [[GETELEMENTPTR39:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR34]], i64 0, i64 0
67+
; CHECK-NEXT: [[LOAD40:%.*]] = load i32, ptr [[CALL1]], align 4
68+
; CHECK-NEXT: [[GETELEMENTPTR41:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR37]], i64 0, i64 0
69+
; CHECK-NEXT: [[LOAD42:%.*]] = load i32, ptr [[CALL1]], align 4
70+
; CHECK-NEXT: br label [[BB38]]
71+
; CHECK: bb43:
72+
; CHECK-NEXT: [[GETELEMENTPTR44:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 8
73+
; CHECK-NEXT: [[LOAD45:%.*]] = load i16, ptr [[CALL1]], align 4
74+
; CHECK-NEXT: store i16 0, ptr [[CALL1]], align 4
75+
; CHECK-NEXT: store i8 0, ptr [[CALL1]], align 4
76+
; CHECK-NEXT: [[GETELEMENTPTR46:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 12
77+
; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4
78+
; CHECK-NEXT: [[GETELEMENTPTR47:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR12]], i64 16
79+
; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4
80+
; CHECK-NEXT: br label [[BB9]]
81+
; CHECK: bb48:
82+
; CHECK-NEXT: [[GETELEMENTPTR49:%.*]] = getelementptr i8, ptr [[CALL1]], i64 0
83+
; CHECK-NEXT: [[GETELEMENTPTR50:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR49]], i64 1
84+
; CHECK-NEXT: [[GETELEMENTPTR51:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR49]], i64 8
85+
; CHECK-NEXT: [[GETELEMENTPTR52:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR49]], i64 12
86+
; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4
87+
; CHECK-NEXT: br label [[BB48]]
88+
; CHECK: bb53:
89+
; CHECK-NEXT: [[PHI54:%.*]] = phi ptr [ [[CALL1]], [[BB8:%.*]] ], [ [[A]], [[BB71:%.*]] ]
90+
; CHECK-NEXT: [[GETELEMENTPTR55:%.*]] = getelementptr i8, ptr [[PHI54]], i64 0
91+
; CHECK-NEXT: [[GETELEMENTPTR56:%.*]] = getelementptr i8, ptr [[PHI54]], i64 0
92+
; CHECK-NEXT: [[GETELEMENTPTR57:%.*]] = getelementptr i8, ptr [[PHI54]], i64 0
93+
; CHECK-NEXT: [[GETELEMENTPTR58:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 1
94+
; CHECK-NEXT: br label [[BB71]]
95+
; CHECK: bb59:
96+
; CHECK-NEXT: [[GETELEMENTPTR60:%.*]] = getelementptr i8, ptr [[PHI54]], i64 0
97+
; CHECK-NEXT: [[GETELEMENTPTR61:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR60]], i64 12
98+
; CHECK-NEXT: br label [[BB67:%.*]]
99+
; CHECK: bb62:
100+
; CHECK-NEXT: [[GETELEMENTPTR63:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR56]], i64 8
101+
; CHECK-NEXT: [[LOAD64:%.*]] = load i16, ptr [[CALL1]], align 4
102+
; CHECK-NEXT: [[GETELEMENTPTR65:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 8
103+
; CHECK-NEXT: store i16 0, ptr [[CALL1]], align 4
104+
; CHECK-NEXT: [[GETELEMENTPTR66:%.*]] = getelementptr i8, ptr [[PHI54]], i64 0
105+
; CHECK-NEXT: br label [[BB67]]
106+
; CHECK: bb67:
107+
; CHECK-NEXT: [[PHI68:%.*]] = phi ptr [ [[A]], [[BB62:%.*]] ], [ [[CALL1]], [[BB59:%.*]] ]
108+
; CHECK-NEXT: [[PHI69:%.*]] = phi ptr [ [[CALL1]], [[BB62]] ], [ [[CALL1]], [[BB59]] ]
109+
; CHECK-NEXT: [[PHI70:%.*]] = phi ptr [ [[CALL1]], [[BB62]] ], [ [[CALL1]], [[BB59]] ]
110+
; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4
111+
; CHECK-NEXT: br label [[BB71]]
112+
; CHECK: bb71:
113+
; CHECK-NEXT: [[PHI72:%.*]] = phi ptr [ [[CALL1]], [[BB53]] ], [ [[CALL1]], [[BB67]] ]
114+
; CHECK-NEXT: [[PHI73:%.*]] = phi ptr [ [[CALL1]], [[BB53]] ], [ [[CALL1]], [[BB67]] ]
115+
; CHECK-NEXT: [[LOAD74:%.*]] = load i8, ptr [[CALL1]], align 4
116+
; CHECK-NEXT: [[LOAD75:%.*]] = load i8, ptr [[CALL1]], align 4
117+
; CHECK-NEXT: [[GETELEMENTPTR76:%.*]] = getelementptr i8, ptr [[PHI72]], i64 12
118+
; CHECK-NEXT: [[GETELEMENTPTR77:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 12
119+
; CHECK-NEXT: [[GETELEMENTPTR78:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR76]], i64 0, i64 0
120+
; CHECK-NEXT: [[LOAD79:%.*]] = load i32, ptr [[CALL1]], align 4
121+
; CHECK-NEXT: [[GETELEMENTPTR80:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR77]], i64 0, i64 0
122+
; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4
123+
; CHECK-NEXT: [[LOAD81:%.*]] = load i8, ptr [[CALL1]], align 4
124+
; CHECK-NEXT: [[GETELEMENTPTR82:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 8
125+
; CHECK-NEXT: [[LOAD83:%.*]] = load i16, ptr [[CALL1]], align 4
126+
; CHECK-NEXT: store i16 0, ptr [[CALL1]], align 4
127+
; CHECK-NEXT: store i8 0, ptr [[CALL1]], align 4
128+
; CHECK-NEXT: [[GETELEMENTPTR84:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 12
129+
; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4
130+
; CHECK-NEXT: [[GETELEMENTPTR85:%.*]] = getelementptr i8, ptr [[GETELEMENTPTR57]], i64 16
131+
; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4
132+
; CHECK-NEXT: br label [[BB53]]
133+
; CHECK: bb86:
134+
; CHECK-NEXT: [[GETELEMENTPTR87:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR34]], i64 0, i64 0
135+
; CHECK-NEXT: [[LOAD88:%.*]] = load i32, ptr [[CALL1]], align 4
136+
; CHECK-NEXT: [[GETELEMENTPTR89:%.*]] = getelementptr [0 x i32], ptr [[GETELEMENTPTR35]], i64 0, i64 0
137+
; CHECK-NEXT: store i32 0, ptr [[CALL1]], align 4
138+
; CHECK-NEXT: br label [[BB86]]
139+
;
140+
bb:
141+
%call = tail call ptr @malloc(i64 1)
142+
tail call void @llvm.memset.p0.i64(ptr %call, i8 0, i64 1, i1 false)
143+
%call1 = tail call noalias ptr @malloc(i64 0)
144+
store ptr %call1, ptr %a, align 8
145+
%load = load ptr, ptr %a, align 8
146+
%load2 = load i32, ptr %load, align 8
147+
%getelementptr = getelementptr i8, ptr %call1, i64 0
148+
%getelementptr3 = getelementptr i8, ptr %getelementptr, i64 1
149+
store i8 0, ptr %call1, align 1
150+
%getelementptr4 = getelementptr i8, ptr %getelementptr, i64 8
151+
store i16 0, ptr %getelementptr4, align 4
152+
%getelementptr5 = getelementptr i8, ptr %getelementptr, i64 12
153+
store i32 0, ptr %call1, align 4
154+
%load6 = load i32, ptr inttoptr (i64 4 to ptr), align 4
155+
br label %bb48
156+
157+
bb7: ; No predecessors!
158+
br label %bb9
159+
160+
bb8: ; No predecessors!
161+
br label %bb53
162+
163+
bb9: ; preds = %bb43, %bb7
164+
%phi = phi ptr [ %call1, %bb7 ], [ %a, %bb43 ]
165+
%getelementptr10 = getelementptr i8, ptr %phi, i64 0
166+
%getelementptr11 = getelementptr i8, ptr %phi, i64 0
167+
%getelementptr12 = getelementptr i8, ptr %phi, i64 0
168+
%getelementptr13 = getelementptr i8, ptr %getelementptr12, i64 1
169+
store i8 0, ptr %call1, align 1
170+
br label %bb29
171+
172+
bb14: ; No predecessors!
173+
%getelementptr15 = getelementptr i8, ptr %getelementptr10, i64 8
174+
%load16 = load i16, ptr %call1, align 4
175+
br i1 false, label %bb22, label %bb17
176+
177+
bb17: ; preds = %bb14
178+
%getelementptr18 = getelementptr i8, ptr %getelementptr11, i64 8
179+
%load19 = load i16, ptr %call1, align 4
180+
%getelementptr20 = getelementptr i8, ptr %getelementptr12, i64 8
181+
store i16 0, ptr %call1, align 4
182+
%getelementptr21 = getelementptr i8, ptr %phi, i64 0
183+
br label %bb25
184+
185+
bb22: ; preds = %bb14
186+
%getelementptr23 = getelementptr i8, ptr %phi, i64 0
187+
%getelementptr24 = getelementptr i8, ptr %getelementptr23, i64 12
188+
br label %bb25
189+
190+
bb25: ; preds = %bb22, %bb17
191+
%phi26 = phi ptr [ %a, %bb17 ], [ %call1, %bb22 ]
192+
%phi27 = phi ptr [ %call1, %bb17 ], [ %call1, %bb22 ]
193+
%phi28 = phi ptr [ %call1, %bb17 ], [ %call1, %bb22 ]
194+
store i32 0, ptr %call1, align 4
195+
br label %bb29
196+
197+
bb29: ; preds = %bb25, %bb9
198+
%phi30 = phi ptr [ %call1, %bb9 ], [ %call1, %bb25 ]
199+
%phi31 = phi ptr [ %call1, %bb9 ], [ %call1, %bb25 ]
200+
%load32 = load i8, ptr %call1, align 4
201+
%load33 = load i8, ptr %call1, align 4
202+
%getelementptr34 = getelementptr i8, ptr %phi31, i64 12
203+
%getelementptr35 = getelementptr i8, ptr %getelementptr12, i64 12
204+
br label %bb86
205+
206+
bb36: ; No predecessors!
207+
%getelementptr37 = getelementptr i8, ptr %phi30, i64 12
208+
br label %bb38
209+
210+
bb38: ; preds = %bb38, %bb36
211+
%getelementptr39 = getelementptr [0 x i32], ptr %getelementptr34, i64 0, i64 0
212+
%load40 = load i32, ptr %call1, align 4
213+
%getelementptr41 = getelementptr [0 x i32], ptr %getelementptr37, i64 0, i64 0
214+
%load42 = load i32, ptr %call1, align 4
215+
br label %bb38
216+
217+
bb43: ; No predecessors!
218+
%getelementptr44 = getelementptr i8, ptr %getelementptr12, i64 8
219+
%load45 = load i16, ptr %call1, align 4
220+
store i16 0, ptr %call1, align 4
221+
store i8 0, ptr %call1, align 4
222+
%getelementptr46 = getelementptr i8, ptr %getelementptr12, i64 12
223+
store i32 0, ptr %call1, align 4
224+
%getelementptr47 = getelementptr i8, ptr %getelementptr12, i64 16
225+
store i32 0, ptr %call1, align 4
226+
br label %bb9
227+
228+
bb48: ; preds = %bb48, %bb
229+
%getelementptr49 = getelementptr i8, ptr %call1, i64 0
230+
%getelementptr50 = getelementptr i8, ptr %getelementptr49, i64 1
231+
store i8 0, ptr %call1, align 1
232+
%getelementptr51 = getelementptr i8, ptr %getelementptr49, i64 8
233+
store i16 0, ptr %call1, align 4
234+
%getelementptr52 = getelementptr i8, ptr %getelementptr49, i64 12
235+
store i32 0, ptr %call1, align 4
236+
br label %bb48
237+
238+
bb53: ; preds = %bb71, %bb8
239+
%phi54 = phi ptr [ %call1, %bb8 ], [ %a, %bb71 ]
240+
%getelementptr55 = getelementptr i8, ptr %phi54, i64 0
241+
%getelementptr56 = getelementptr i8, ptr %phi54, i64 0
242+
%getelementptr57 = getelementptr i8, ptr %phi54, i64 0
243+
%getelementptr58 = getelementptr i8, ptr %getelementptr57, i64 1
244+
br label %bb71
245+
246+
bb59: ; No predecessors!
247+
%getelementptr60 = getelementptr i8, ptr %phi54, i64 0
248+
%getelementptr61 = getelementptr i8, ptr %getelementptr60, i64 12
249+
br label %bb67
250+
251+
bb62: ; No predecessors!
252+
%getelementptr63 = getelementptr i8, ptr %getelementptr56, i64 8
253+
%load64 = load i16, ptr %call1, align 4
254+
%getelementptr65 = getelementptr i8, ptr %getelementptr57, i64 8
255+
store i16 0, ptr %call1, align 4
256+
%getelementptr66 = getelementptr i8, ptr %phi54, i64 0
257+
br label %bb67
258+
259+
bb67: ; preds = %bb62, %bb59
260+
%phi68 = phi ptr [ %a, %bb62 ], [ %call1, %bb59 ]
261+
%phi69 = phi ptr [ %call1, %bb62 ], [ %call1, %bb59 ]
262+
%phi70 = phi ptr [ %call1, %bb62 ], [ %call1, %bb59 ]
263+
store i32 0, ptr %call1, align 4
264+
br label %bb71
265+
266+
bb71: ; preds = %bb67, %bb53
267+
%phi72 = phi ptr [ %call1, %bb53 ], [ %call1, %bb67 ]
268+
%phi73 = phi ptr [ %call1, %bb53 ], [ %call1, %bb67 ]
269+
%load74 = load i8, ptr %call1, align 4
270+
%load75 = load i8, ptr %call1, align 4
271+
%getelementptr76 = getelementptr i8, ptr %phi72, i64 12
272+
%getelementptr77 = getelementptr i8, ptr %getelementptr57, i64 12
273+
%getelementptr78 = getelementptr [0 x i32], ptr %getelementptr76, i64 0, i64 0
274+
%load79 = load i32, ptr %call1, align 4
275+
%getelementptr80 = getelementptr [0 x i32], ptr %getelementptr77, i64 0, i64 0
276+
store i32 0, ptr %call1, align 4
277+
%load81 = load i8, ptr %call1, align 4
278+
%getelementptr82 = getelementptr i8, ptr %getelementptr57, i64 8
279+
%load83 = load i16, ptr %call1, align 4
280+
store i16 0, ptr %call1, align 4
281+
store i8 0, ptr %call1, align 4
282+
%getelementptr84 = getelementptr i8, ptr %getelementptr57, i64 12
283+
store i32 0, ptr %call1, align 4
284+
%getelementptr85 = getelementptr i8, ptr %getelementptr57, i64 16
285+
store i32 0, ptr %call1, align 4
286+
br label %bb53
287+
288+
bb86: ; preds = %bb86, %bb29
289+
%getelementptr87 = getelementptr [0 x i32], ptr %getelementptr34, i64 0, i64 0
290+
%load88 = load i32, ptr %call1, align 4
291+
%getelementptr89 = getelementptr [0 x i32], ptr %getelementptr35, i64 0, i64 0
292+
store i32 0, ptr %call1, align 4
293+
br label %bb86
294+
}
295+
296+
declare ptr @malloc(i64)
297+
298+
; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
299+
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #0
300+
301+
attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) }

0 commit comments

Comments
 (0)