Skip to content

Commit 9b338c4

Browse files
authored
Merge pull request #26715 from eeckstein/fix-memorylifetime
2 parents 541a717 + 22095b0 commit 9b338c4

File tree

2 files changed

+178
-2
lines changed

2 files changed

+178
-2
lines changed

lib/SIL/MemoryLifetime.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,10 +270,9 @@ bool MemoryLocations::analyzeAddrProjection(
270270
if (subLocIdx == 0) {
271271
subLocIdx = locations.size();
272272
assert(subLocIdx > 0);
273-
Location &parentLoc = locations[parentLocIdx];
274-
275273
locations.push_back(Location(projection, subLocIdx, parentLocIdx));
276274

275+
Location &parentLoc = locations[parentLocIdx];
277276
locations.back().selfAndParents |= parentLoc.selfAndParents;
278277

279278
int idx = (int)parentLocIdx;

test/SIL/memory_lifetime.sil

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,180 @@ bb2:
137137
return %r : $()
138138
}
139139

140+
sil [ossa] @test_many_locations_in_block : $@convention(thin) <A, B, C, D, E, G, H, I> (@in_guaranteed A, @in_guaranteed B, @in_guaranteed C, @in_guaranteed D, @in_guaranteed E, @in_guaranteed G, @in_guaranteed H, @in_guaranteed I) -> (@out A, @out B, @out C, @out D, @out E, @out G, @out H, @out I) {
141+
bb0(%0 : $*A, %1 : $*B, %2 : $*C, %3 : $*D, %4 : $*E, %5 : $*G, %6 : $*H, %7 : $*I, %9 : $*A, %10 : $*B, %11 : $*C, %12 : $*D, %13 : $*E, %14 : $*G, %15 : $*H, %16 : $*I):
142+
%18 = alloc_stack $(A, B, C, D, E, G, H, I), let, name "a", argno 1
143+
%19 = tuple_element_addr %18 : $*(A, B, C, D, E, G, H, I), 0
144+
copy_addr %9 to [initialization] %19 : $*A
145+
%21 = tuple_element_addr %18 : $*(A, B, C, D, E, G, H, I), 1
146+
copy_addr %10 to [initialization] %21 : $*B
147+
%23 = tuple_element_addr %18 : $*(A, B, C, D, E, G, H, I), 2
148+
copy_addr %11 to [initialization] %23 : $*C
149+
%25 = tuple_element_addr %18 : $*(A, B, C, D, E, G, H, I), 3
150+
copy_addr %12 to [initialization] %25 : $*D
151+
%27 = tuple_element_addr %18 : $*(A, B, C, D, E, G, H, I), 4
152+
copy_addr %13 to [initialization] %27 : $*E
153+
%29 = tuple_element_addr %18 : $*(A, B, C, D, E, G, H, I), 5
154+
copy_addr %14 to [initialization] %29 : $*G
155+
%31 = tuple_element_addr %18 : $*(A, B, C, D, E, G, H, I), 6
156+
copy_addr %15 to [initialization] %31 : $*H
157+
%33 = tuple_element_addr %18 : $*(A, B, C, D, E, G, H, I), 7
158+
copy_addr %16 to [initialization] %33 : $*I
159+
%41 = alloc_stack $(A, B, C, D, E, G, H, I)
160+
copy_addr %18 to [initialization] %41 : $*(A, B, C, D, E, G, H, I)
161+
%43 = tuple_element_addr %41 : $*(A, B, C, D, E, G, H, I), 0
162+
%44 = tuple_element_addr %41 : $*(A, B, C, D, E, G, H, I), 1
163+
%45 = tuple_element_addr %41 : $*(A, B, C, D, E, G, H, I), 2
164+
%46 = tuple_element_addr %41 : $*(A, B, C, D, E, G, H, I), 3
165+
%47 = tuple_element_addr %41 : $*(A, B, C, D, E, G, H, I), 4
166+
%48 = tuple_element_addr %41 : $*(A, B, C, D, E, G, H, I), 5
167+
%49 = tuple_element_addr %41 : $*(A, B, C, D, E, G, H, I), 6
168+
%50 = tuple_element_addr %41 : $*(A, B, C, D, E, G, H, I), 7
169+
copy_addr [take] %43 to [initialization] %0 : $*A
170+
%52 = alloc_stack $(A, B, C, D, E, G, H, I)
171+
copy_addr %18 to [initialization] %52 : $*(A, B, C, D, E, G, H, I)
172+
%54 = tuple_element_addr %52 : $*(A, B, C, D, E, G, H, I), 0
173+
%55 = tuple_element_addr %52 : $*(A, B, C, D, E, G, H, I), 1
174+
%56 = tuple_element_addr %52 : $*(A, B, C, D, E, G, H, I), 2
175+
%57 = tuple_element_addr %52 : $*(A, B, C, D, E, G, H, I), 3
176+
%58 = tuple_element_addr %52 : $*(A, B, C, D, E, G, H, I), 4
177+
%59 = tuple_element_addr %52 : $*(A, B, C, D, E, G, H, I), 5
178+
%60 = tuple_element_addr %52 : $*(A, B, C, D, E, G, H, I), 6
179+
%61 = tuple_element_addr %52 : $*(A, B, C, D, E, G, H, I), 7
180+
copy_addr [take] %55 to [initialization] %1 : $*B
181+
%63 = alloc_stack $(A, B, C, D, E, G, H, I)
182+
copy_addr %18 to [initialization] %63 : $*(A, B, C, D, E, G, H, I)
183+
%65 = tuple_element_addr %63 : $*(A, B, C, D, E, G, H, I), 0
184+
%66 = tuple_element_addr %63 : $*(A, B, C, D, E, G, H, I), 1
185+
%67 = tuple_element_addr %63 : $*(A, B, C, D, E, G, H, I), 2
186+
%68 = tuple_element_addr %63 : $*(A, B, C, D, E, G, H, I), 3
187+
%69 = tuple_element_addr %63 : $*(A, B, C, D, E, G, H, I), 4
188+
%70 = tuple_element_addr %63 : $*(A, B, C, D, E, G, H, I), 5
189+
%71 = tuple_element_addr %63 : $*(A, B, C, D, E, G, H, I), 6
190+
%72 = tuple_element_addr %63 : $*(A, B, C, D, E, G, H, I), 7
191+
copy_addr [take] %67 to [initialization] %2 : $*C
192+
%74 = alloc_stack $(A, B, C, D, E, G, H, I)
193+
copy_addr %18 to [initialization] %74 : $*(A, B, C, D, E, G, H, I)
194+
%76 = tuple_element_addr %74 : $*(A, B, C, D, E, G, H, I), 0
195+
%77 = tuple_element_addr %74 : $*(A, B, C, D, E, G, H, I), 1
196+
%78 = tuple_element_addr %74 : $*(A, B, C, D, E, G, H, I), 2
197+
%79 = tuple_element_addr %74 : $*(A, B, C, D, E, G, H, I), 3
198+
%80 = tuple_element_addr %74 : $*(A, B, C, D, E, G, H, I), 4
199+
%81 = tuple_element_addr %74 : $*(A, B, C, D, E, G, H, I), 5
200+
%82 = tuple_element_addr %74 : $*(A, B, C, D, E, G, H, I), 6
201+
%83 = tuple_element_addr %74 : $*(A, B, C, D, E, G, H, I), 7
202+
copy_addr [take] %79 to [initialization] %3 : $*D
203+
%85 = alloc_stack $(A, B, C, D, E, G, H, I)
204+
copy_addr %18 to [initialization] %85 : $*(A, B, C, D, E, G, H, I)
205+
%87 = tuple_element_addr %85 : $*(A, B, C, D, E, G, H, I), 0
206+
%88 = tuple_element_addr %85 : $*(A, B, C, D, E, G, H, I), 1
207+
%89 = tuple_element_addr %85 : $*(A, B, C, D, E, G, H, I), 2
208+
%90 = tuple_element_addr %85 : $*(A, B, C, D, E, G, H, I), 3
209+
%91 = tuple_element_addr %85 : $*(A, B, C, D, E, G, H, I), 4
210+
%92 = tuple_element_addr %85 : $*(A, B, C, D, E, G, H, I), 5
211+
%93 = tuple_element_addr %85 : $*(A, B, C, D, E, G, H, I), 6
212+
%94 = tuple_element_addr %85 : $*(A, B, C, D, E, G, H, I), 7
213+
copy_addr [take] %91 to [initialization] %4 : $*E
214+
%96 = alloc_stack $(A, B, C, D, E, G, H, I)
215+
copy_addr %18 to [initialization] %96 : $*(A, B, C, D, E, G, H, I)
216+
%98 = tuple_element_addr %96 : $*(A, B, C, D, E, G, H, I), 0
217+
%99 = tuple_element_addr %96 : $*(A, B, C, D, E, G, H, I), 1
218+
%100 = tuple_element_addr %96 : $*(A, B, C, D, E, G, H, I), 2
219+
%101 = tuple_element_addr %96 : $*(A, B, C, D, E, G, H, I), 3
220+
%102 = tuple_element_addr %96 : $*(A, B, C, D, E, G, H, I), 4
221+
%103 = tuple_element_addr %96 : $*(A, B, C, D, E, G, H, I), 5
222+
%104 = tuple_element_addr %96 : $*(A, B, C, D, E, G, H, I), 6
223+
%105 = tuple_element_addr %96 : $*(A, B, C, D, E, G, H, I), 7
224+
copy_addr [take] %103 to [initialization] %5 : $*G
225+
%107 = alloc_stack $(A, B, C, D, E, G, H, I)
226+
copy_addr %18 to [initialization] %107 : $*(A, B, C, D, E, G, H, I)
227+
%109 = tuple_element_addr %107 : $*(A, B, C, D, E, G, H, I), 0
228+
%110 = tuple_element_addr %107 : $*(A, B, C, D, E, G, H, I), 1
229+
%111 = tuple_element_addr %107 : $*(A, B, C, D, E, G, H, I), 2
230+
%112 = tuple_element_addr %107 : $*(A, B, C, D, E, G, H, I), 3
231+
%113 = tuple_element_addr %107 : $*(A, B, C, D, E, G, H, I), 4
232+
%114 = tuple_element_addr %107 : $*(A, B, C, D, E, G, H, I), 5
233+
%115 = tuple_element_addr %107 : $*(A, B, C, D, E, G, H, I), 6
234+
%116 = tuple_element_addr %107 : $*(A, B, C, D, E, G, H, I), 7
235+
copy_addr [take] %115 to [initialization] %6 : $*H
236+
%118 = alloc_stack $(A, B, C, D, E, G, H, I)
237+
copy_addr %18 to [initialization] %118 : $*(A, B, C, D, E, G, H, I)
238+
%120 = tuple_element_addr %118 : $*(A, B, C, D, E, G, H, I), 0
239+
%121 = tuple_element_addr %118 : $*(A, B, C, D, E, G, H, I), 1
240+
%122 = tuple_element_addr %118 : $*(A, B, C, D, E, G, H, I), 2
241+
%123 = tuple_element_addr %118 : $*(A, B, C, D, E, G, H, I), 3
242+
%124 = tuple_element_addr %118 : $*(A, B, C, D, E, G, H, I), 4
243+
%125 = tuple_element_addr %118 : $*(A, B, C, D, E, G, H, I), 5
244+
%126 = tuple_element_addr %118 : $*(A, B, C, D, E, G, H, I), 6
245+
%127 = tuple_element_addr %118 : $*(A, B, C, D, E, G, H, I), 7
246+
copy_addr [take] %127 to [initialization] %7 : $*I
247+
destroy_addr %126 : $*H
248+
destroy_addr %125 : $*G
249+
destroy_addr %124 : $*E
250+
destroy_addr %123 : $*D
251+
destroy_addr %122 : $*C
252+
destroy_addr %121 : $*B
253+
destroy_addr %120 : $*A
254+
dealloc_stack %118 : $*(A, B, C, D, E, G, H, I)
255+
destroy_addr %116 : $*I
256+
destroy_addr %114 : $*G
257+
destroy_addr %113 : $*E
258+
destroy_addr %112 : $*D
259+
destroy_addr %111 : $*C
260+
destroy_addr %110 : $*B
261+
destroy_addr %109 : $*A
262+
dealloc_stack %107 : $*(A, B, C, D, E, G, H, I)
263+
destroy_addr %105 : $*I
264+
destroy_addr %104 : $*H
265+
destroy_addr %102 : $*E
266+
destroy_addr %101 : $*D
267+
destroy_addr %100 : $*C
268+
destroy_addr %99 : $*B
269+
destroy_addr %98 : $*A
270+
dealloc_stack %96 : $*(A, B, C, D, E, G, H, I)
271+
destroy_addr %94 : $*I
272+
destroy_addr %93 : $*H
273+
destroy_addr %92 : $*G
274+
destroy_addr %90 : $*D
275+
destroy_addr %89 : $*C
276+
destroy_addr %88 : $*B
277+
destroy_addr %87 : $*A
278+
dealloc_stack %85 : $*(A, B, C, D, E, G, H, I)
279+
destroy_addr %83 : $*I
280+
destroy_addr %82 : $*H
281+
destroy_addr %81 : $*G
282+
destroy_addr %80 : $*E
283+
destroy_addr %78 : $*C
284+
destroy_addr %77 : $*B
285+
destroy_addr %76 : $*A
286+
dealloc_stack %74 : $*(A, B, C, D, E, G, H, I)
287+
destroy_addr %72 : $*I
288+
destroy_addr %71 : $*H
289+
destroy_addr %70 : $*G
290+
destroy_addr %69 : $*E
291+
destroy_addr %68 : $*D
292+
destroy_addr %66 : $*B
293+
destroy_addr %65 : $*A
294+
dealloc_stack %63 : $*(A, B, C, D, E, G, H, I)
295+
destroy_addr %61 : $*I
296+
destroy_addr %60 : $*H
297+
destroy_addr %59 : $*G
298+
destroy_addr %58 : $*E
299+
destroy_addr %57 : $*D
300+
destroy_addr %56 : $*C
301+
destroy_addr %54 : $*A
302+
dealloc_stack %52 : $*(A, B, C, D, E, G, H, I)
303+
destroy_addr %50 : $*I
304+
destroy_addr %49 : $*H
305+
destroy_addr %48 : $*G
306+
destroy_addr %47 : $*E
307+
destroy_addr %46 : $*D
308+
destroy_addr %45 : $*C
309+
destroy_addr %44 : $*B
310+
dealloc_stack %41 : $*(A, B, C, D, E, G, H, I)
311+
destroy_addr %18 : $*(A, B, C, D, E, G, H, I)
312+
dealloc_stack %18 : $*(A, B, C, D, E, G, H, I)
313+
%196 = tuple ()
314+
return %196 : $()
315+
}
316+

0 commit comments

Comments
 (0)