@effekt-lang/effekt 0.23.0 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -144,14 +144,14 @@ define ccc %Neg @unbox(%Pos %input) {
144
144
 
145
145
  define private %Prompt @currentPrompt(%Stack %stack) {
146
146
  %prompt_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 3
147
- %prompt = load %Prompt, ptr %prompt_pointer
147
+ %prompt = load %Prompt, ptr %prompt_pointer, !alias.scope !11, !noalias !21
148
148
  ret %Prompt %prompt
149
149
  }
150
150
 
151
151
  define private %Prompt @freshPrompt() {
152
152
  %promptSize = ptrtoint ptr getelementptr (%PromptValue, ptr null, i64 1) to i64
153
153
  %prompt = call %Prompt @malloc(i64 %promptSize)
154
- store %PromptValue zeroinitializer, %Prompt %prompt, !alias.scope !4
154
+ store %PromptValue zeroinitializer, %Prompt %prompt, !alias.scope !13, !noalias !23
155
155
  ret %Prompt %prompt
156
156
  }
157
157
 
@@ -163,8 +163,8 @@ define private %Object @newObject(%Eraser %eraser, i64 %environmentSize) alwaysi
163
163
  %object = call ptr @malloc(i64 %size)
164
164
  %objectReferenceCount = getelementptr %Header, ptr %object, i64 0, i32 0
165
165
  %objectEraser = getelementptr %Header, ptr %object, i64 0, i32 1
166
- store %ReferenceCount 0, ptr %objectReferenceCount
167
- store %Eraser %eraser, ptr %objectEraser
166
+ store %ReferenceCount 0, ptr %objectReferenceCount, !alias.scope !14, !noalias !24
167
+ store %Eraser %eraser, ptr %objectEraser, !alias.scope !14, !noalias !24
168
168
  ret %Object %object
169
169
  }
170
170
 
@@ -180,9 +180,9 @@ define private void @shareObject(%Object %object) alwaysinline {
180
180
 
181
181
  next:
182
182
  %objectReferenceCount = getelementptr %Header, ptr %object, i64 0, i32 0
183
- %referenceCount = load %ReferenceCount, ptr %objectReferenceCount
183
+ %referenceCount = load %ReferenceCount, ptr %objectReferenceCount, !alias.scope !14, !noalias !24
184
184
  %referenceCount.1 = add %ReferenceCount %referenceCount, 1
185
- store %ReferenceCount %referenceCount.1, ptr %objectReferenceCount
185
+ store %ReferenceCount %referenceCount.1, ptr %objectReferenceCount, !alias.scope !14, !noalias !24
186
186
  br label %done
187
187
 
188
188
  done:
@@ -207,17 +207,17 @@ define private void @eraseObject(%Object %object) alwaysinline {
207
207
 
208
208
  next:
209
209
  %objectReferenceCount = getelementptr %Header, ptr %object, i64 0, i32 0
210
- %referenceCount = load %ReferenceCount, ptr %objectReferenceCount
210
+ %referenceCount = load %ReferenceCount, ptr %objectReferenceCount, !alias.scope !14, !noalias !24
211
211
  switch %ReferenceCount %referenceCount, label %decr [%ReferenceCount 0, label %free]
212
212
 
213
213
  decr:
214
214
  %referenceCount.1 = sub %ReferenceCount %referenceCount, 1
215
- store %ReferenceCount %referenceCount.1, ptr %objectReferenceCount
215
+ store %ReferenceCount %referenceCount.1, ptr %objectReferenceCount, !alias.scope !14, !noalias !24
216
216
  ret void
217
217
 
218
218
  free:
219
219
  %objectEraser = getelementptr %Header, ptr %object, i64 0, i32 1
220
- %eraser = load %Eraser, ptr %objectEraser
220
+ %eraser = load %Eraser, ptr %objectEraser, !alias.scope !14, !noalias !24
221
221
  %environment = call %Environment @objectEnvironment(%Object %object)
222
222
  call void %eraser(%Environment %environment)
223
223
  call void @free(%Object %object)
@@ -244,7 +244,7 @@ define void @eraseNegative(%Neg %val) alwaysinline {
244
244
 
245
245
  define private %Stack @getStack(%Prompt %prompt) {
246
246
  %stack_pointer = getelementptr %PromptValue, %Prompt %prompt, i64 0, i32 1
247
- %stack = load %Stack, ptr %stack_pointer, !alias.scope !4
247
+ %stack = load %Stack, ptr %stack_pointer, !alias.scope !13, !noalias !23
248
248
  ret %Stack %stack
249
249
  }
250
250
 
@@ -259,7 +259,7 @@ define private ptr @getVarPointer(%Reference %reference, %Stack %stack) {
259
259
 
260
260
  define private %Reference @newReference(%Stack %stack) alwaysinline {
261
261
  %stackPointer_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 1
262
- %stackPointer = load %StackPointer, ptr %stackPointer_pointer
262
+ %stackPointer = load %StackPointer, ptr %stackPointer_pointer, !alias.scope !11, !noalias !21
263
263
 
264
264
  %intStack = ptrtoint %StackPointer %stackPointer to i64
265
265
  %intBase = ptrtoint %Stack %stack to i64
@@ -280,8 +280,8 @@ define private %Stack @checkLimit(%Stack %stack, i64 %n) alwaysinline {
280
280
  %stackPointer_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 1
281
281
  %limit_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 2
282
282
 
283
- %currentStackPointer = load %StackPointer, ptr %stackPointer_pointer, !alias.scope !3
284
- %limit = load %Limit, ptr %limit_pointer, !alias.scope !3
283
+ %currentStackPointer = load %StackPointer, ptr %stackPointer_pointer, !alias.scope !11, !noalias !21
284
+ %limit = load %Limit, ptr %limit_pointer, !alias.scope !11, !noalias !21
285
285
  %nextStackPointer = getelementptr i8, %StackPointer %currentStackPointer, i64 %n
286
286
  %isInside = icmp ule %StackPointer %nextStackPointer, %limit
287
287
  br i1 %isInside, label %done, label %realloc
@@ -304,13 +304,13 @@ realloc:
304
304
  %newStackPointer_pointer = getelementptr %StackValue, %Stack %newStack, i64 0, i32 1
305
305
  %newLimit_pointer = getelementptr %StackValue, %Stack %newStack, i64 0, i32 2
306
306
 
307
- store %StackPointer %newStackPointer, ptr %newStackPointer_pointer, !alias.scope !3
308
- store %Limit %newLimit, ptr %newLimit_pointer, !alias.scope !3
307
+ store %StackPointer %newStackPointer, ptr %newStackPointer_pointer, !alias.scope !11, !noalias !21
308
+ store %Limit %newLimit, ptr %newLimit_pointer, !alias.scope !11, !noalias !21
309
309
 
310
310
  %prompt_pointer = getelementptr %StackValue, %Stack %newStack, i64 0, i32 3
311
- %prompt = load %Prompt, ptr %prompt_pointer
311
+ %prompt = load %Prompt, ptr %prompt_pointer, !alias.scope !11, !noalias !21
312
312
  %promptStack = getelementptr %PromptValue, %Prompt %prompt, i64 0, i32 1
313
- store %Stack %newStack, ptr %promptStack, !alias.scope !4
313
+ store %Stack %newStack, ptr %promptStack, !alias.scope !13, !noalias !23
314
314
 
315
315
  ret %Stack %newStack
316
316
  }
@@ -319,26 +319,26 @@ define private %StackPointer @stackAllocate(%Stack %stack, i64 %n) alwaysinline
319
319
  %stackPointer_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 1
320
320
  %limit_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 2
321
321
 
322
- %currentStackPointer = load %StackPointer, ptr %stackPointer_pointer, !alias.scope !3
323
- %limit = load %Limit, ptr %limit_pointer, !alias.scope !3
322
+ %currentStackPointer = load %StackPointer, ptr %stackPointer_pointer, !alias.scope !11, !noalias !21
323
+ %limit = load %Limit, ptr %limit_pointer, !alias.scope !11, !noalias !21
324
324
  %nextStackPointer = getelementptr i8, %StackPointer %currentStackPointer, i64 %n
325
325
 
326
- store %StackPointer %nextStackPointer, ptr %stackPointer_pointer, !alias.scope !3
326
+ store %StackPointer %nextStackPointer, ptr %stackPointer_pointer, !alias.scope !11, !noalias !21
327
327
  ret %StackPointer %currentStackPointer
328
328
  }
329
329
 
330
330
  define private %StackPointer @stackDeallocate(%Stack %stack, i64 %n) {
331
331
  %stackPointer_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 1
332
- %stackPointer = load %StackPointer, ptr %stackPointer_pointer, !alias.scope !3
332
+ %stackPointer = load %StackPointer, ptr %stackPointer_pointer, !alias.scope !11, !noalias !21
333
333
 
334
334
  %limit_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 2
335
- %limit = load %Limit, ptr %limit_pointer, !alias.scope !3
335
+ %limit = load %Limit, ptr %limit_pointer, !alias.scope !11, !noalias !21
336
336
  %isInside = icmp ule %StackPointer %stackPointer, %limit
337
337
  call void @llvm.assume(i1 %isInside)
338
338
 
339
339
  %o = sub i64 0, %n
340
340
  %newStackPointer = getelementptr i8, %StackPointer %stackPointer, i64 %o
341
- store %StackPointer %newStackPointer, ptr %stackPointer_pointer, !alias.scope !3
341
+ store %StackPointer %newStackPointer, ptr %stackPointer_pointer, !alias.scope !11, !noalias !21
342
342
 
343
343
  ret %StackPointer %newStackPointer
344
344
  }
@@ -352,11 +352,11 @@ define private i64 @nextPowerOfTwo(i64 %x) {
352
352
 
353
353
  define private void @assumeFrameHeaderWasPopped(%Stack %stack) alwaysinline {
354
354
  %stackPointer_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 1
355
- %stackPointer = load %StackPointer, ptr %stackPointer_pointer, !alias.scope !3
355
+ %stackPointer = load %StackPointer, ptr %stackPointer_pointer, !alias.scope !11, !noalias !21
356
356
  %oldStackPointer = getelementptr %FrameHeader, %StackPointer %stackPointer, i64 1
357
357
 
358
358
  %limit_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 2
359
- %limit = load %Limit, ptr %limit_pointer, !alias.scope !3
359
+ %limit = load %Limit, ptr %limit_pointer, !alias.scope !11, !noalias !21
360
360
  %isInside = icmp ule %StackPointer %oldStackPointer, %limit
361
361
  call void @llvm.assume(i1 %isInside)
362
362
  ret void
@@ -378,19 +378,19 @@ define private %Stack @reset(%Stack %oldStack) {
378
378
  %stack.2 = insertvalue %StackValue %stack.1, %Prompt %prompt, 3
379
379
  %stack.3 = insertvalue %StackValue %stack.2, %Stack %oldStack, 4
380
380
 
381
- store %StackValue %stack.3, %Stack %stack
381
+ store %StackValue %stack.3, %Stack %stack, !alias.scope !11, !noalias !21
382
382
 
383
383
  %promptStack = getelementptr %PromptValue, %Prompt %prompt, i64 0, i32 1
384
- store %Stack %stack, ptr %promptStack, !alias.scope !4
384
+ store %Stack %stack, ptr %promptStack, !alias.scope !13, !noalias !23
385
385
 
386
386
  ret %Stack %stack
387
387
  }
388
388
 
389
389
  define private void @revalidate(%Stack %stack) {
390
390
  %prompt_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 3
391
- %prompt = load %Prompt, ptr %prompt_pointer
391
+ %prompt = load %Prompt, ptr %prompt_pointer, !alias.scope !11, !noalias !21
392
392
  %stack_pointer = getelementptr %PromptValue, %Prompt %prompt, i64 0, i32 1
393
- %promptStack = load %Stack, ptr %stack_pointer, !alias.scope !4
393
+ %promptStack = load %Stack, ptr %stack_pointer, !alias.scope !13, !noalias !23
394
394
  %isThis = icmp eq %Stack %promptStack, %stack
395
395
  br i1 %isThis, label %done, label %continue
396
396
 
@@ -406,10 +406,10 @@ displace:
406
406
  br label %update
407
407
 
408
408
  update:
409
- store %Stack %stack, ptr %stack_pointer, !alias.scope !4
409
+ store %Stack %stack, ptr %stack_pointer, !alias.scope !13, !noalias !23
410
410
 
411
411
  %next_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 4
412
- %next = load %Stack, ptr %next_pointer
412
+ %next = load %Stack, ptr %next_pointer, !alias.scope !11, !noalias !21
413
413
  tail call void @revalidate(%Stack %next)
414
414
  ret void
415
415
  }
@@ -418,11 +418,11 @@ update:
418
418
  define private void @invalidate(%Stack %stack, %Stack %end) {
419
419
  %prompt_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 3
420
420
  %next_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 4
421
- %prompt = load %Prompt, ptr %prompt_pointer
421
+ %prompt = load %Prompt, ptr %prompt_pointer, !alias.scope !11, !noalias !21
422
422
  %stack_pointer = getelementptr %PromptValue, %Prompt %prompt, i64 0, i32 1
423
- store %Stack null, ptr %stack_pointer, !alias.scope !4
423
+ store %Stack null, ptr %stack_pointer, !alias.scope !13, !noalias !23
424
424
 
425
- %next = load %Stack, ptr %next_pointer
425
+ %next = load %Stack, ptr %next_pointer, !alias.scope !11, !noalias !21
426
426
 
427
427
  %isNull = icmp eq %Stack %next, null
428
428
  br i1 %isNull, label %error, label %check
@@ -446,21 +446,21 @@ continue:
446
446
  define private %Stack @resume(%Resumption %resumption, %Stack %oldStack) {
447
447
  %uniqueResumption = call %Resumption @uniqueStack(%Resumption %resumption)
448
448
  %rest_pointer = getelementptr %StackValue, %Resumption %uniqueResumption, i64 0, i32 4
449
- %start = load %Stack, ptr %rest_pointer
449
+ %start = load %Stack, ptr %rest_pointer, !alias.scope !11, !noalias !21
450
450
  call void @revalidate(%Stack %start)
451
451
 
452
- store %Stack %oldStack, ptr %rest_pointer
452
+ store %Stack %oldStack, ptr %rest_pointer, !alias.scope !11, !noalias !21
453
453
 
454
454
  ret %Stack %start
455
455
  }
456
456
 
457
457
  define private {%Resumption, %Stack} @shift(%Stack %stack, %Prompt %prompt) {
458
458
  %resumpion_pointer = getelementptr %PromptValue, %Prompt %prompt, i64 0, i32 1
459
- %resumption = load %Stack, ptr %resumpion_pointer, !alias.scope !4
459
+ %resumption = load %Stack, ptr %resumpion_pointer, !alias.scope !13, !noalias !23
460
460
  %next_pointer = getelementptr %StackValue, %Stack %resumption, i64 0, i32 4
461
- %next = load %Stack, ptr %next_pointer
461
+ %next = load %Stack, ptr %next_pointer, !alias.scope !11, !noalias !21
462
462
 
463
- store %Stack %stack, ptr %next_pointer
463
+ store %Stack %stack, ptr %next_pointer, !alias.scope !11, !noalias !21
464
464
 
465
465
  %result.0 = insertvalue {%Resumption, %Stack} undef, %Resumption %resumption, 0
466
466
  %result = insertvalue {%Resumption, %Stack} %result.0, %Stack %next, 1
@@ -469,12 +469,12 @@ define private {%Resumption, %Stack} @shift(%Stack %stack, %Prompt %prompt) {
469
469
 
470
470
  define private void @erasePrompt(%Prompt %prompt) alwaysinline {
471
471
  %referenceCount_pointer = getelementptr %PromptValue, %Prompt %prompt, i64 0, i32 0
472
- %referenceCount = load %ReferenceCount, ptr %referenceCount_pointer, !alias.scope !4
472
+ %referenceCount = load %ReferenceCount, ptr %referenceCount_pointer, !alias.scope !13, !noalias !23
473
473
  switch %ReferenceCount %referenceCount, label %decrement [%ReferenceCount 0, label %free]
474
474
 
475
475
  decrement:
476
476
  %newReferenceCount = sub %ReferenceCount %referenceCount, 1
477
- store %ReferenceCount %newReferenceCount, ptr %referenceCount_pointer, !alias.scope !4
477
+ store %ReferenceCount %newReferenceCount, ptr %referenceCount_pointer, !alias.scope !13, !noalias !23
478
478
  ret void
479
479
 
480
480
  free:
@@ -484,9 +484,9 @@ free:
484
484
 
485
485
  define private void @sharePrompt(%Prompt %prompt) alwaysinline {
486
486
  %referenceCount_pointer = getelementptr %PromptValue, %Prompt %prompt, i64 0, i32 0
487
- %referenceCount = load %ReferenceCount, ptr %referenceCount_pointer, !alias.scope !4
487
+ %referenceCount = load %ReferenceCount, ptr %referenceCount_pointer, !alias.scope !13, !noalias !23
488
488
  %newReferenceCount = add %ReferenceCount %referenceCount, 1
489
- store %ReferenceCount %newReferenceCount, ptr %referenceCount_pointer, !alias.scope !4
489
+ store %ReferenceCount %newReferenceCount, ptr %referenceCount_pointer, !alias.scope !13, !noalias !23
490
490
  ret void
491
491
  }
492
492
 
@@ -494,11 +494,11 @@ define private %Stack @underflowStack(%Stack %stack) {
494
494
  %stackPrompt = getelementptr %StackValue, %Stack %stack, i64 0, i32 3
495
495
  %stackRest = getelementptr %StackValue, %Stack %stack, i64 0, i32 4
496
496
 
497
- %prompt = load %Prompt, ptr %stackPrompt
498
- %rest = load %Stack, ptr %stackRest
497
+ %prompt = load %Prompt, ptr %stackPrompt, !alias.scope !11, !noalias !21
498
+ %rest = load %Stack, ptr %stackRest, !alias.scope !11, !noalias !21
499
499
 
500
500
  %promptStack_pointer = getelementptr %PromptValue, %Prompt %prompt, i64 0, i32 1
501
- store %Stack null, ptr %promptStack_pointer, !alias.scope !4
501
+ store %Stack null, ptr %promptStack_pointer, !alias.scope !13, !noalias !23
502
502
 
503
503
  call void @erasePrompt(%Prompt %prompt)
504
504
  call void @free(%Stack %stack)
@@ -514,8 +514,8 @@ define private %Stack @copyStack(%Stack %stack) alwaysinline {
514
514
  %stackPointer_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 1
515
515
  %limit_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 2
516
516
 
517
- %stackPointer = load %StackPointer, ptr %stackPointer_pointer
518
- %limit = load %Limit, ptr %limit_pointer
517
+ %stackPointer = load %StackPointer, ptr %stackPointer_pointer, !alias.scope !11, !noalias !21
518
+ %limit = load %Limit, ptr %limit_pointer, !alias.scope !11, !noalias !21
519
519
 
520
520
  %intStackPointer = ptrtoint %StackPointer %stackPointer to i64
521
521
  %intBase = ptrtoint %Stack %stack to i64
@@ -532,17 +532,17 @@ define private %Stack @copyStack(%Stack %stack) alwaysinline {
532
532
  %newStackPointer_pointer = getelementptr %StackValue, %Stack %newStack, i64 0, i32 1
533
533
  %newLimit_pointer = getelementptr %StackValue, %Stack %newStack, i64 0, i32 2
534
534
 
535
- store %StackPointer %newStackPointer, ptr %newStackPointer_pointer
536
- store %Limit %newLimit, ptr %newLimit_pointer
535
+ store %StackPointer %newStackPointer, ptr %newStackPointer_pointer, !alias.scope !11, !noalias !21
536
+ store %Limit %newLimit, ptr %newLimit_pointer, !alias.scope !11, !noalias !21
537
537
 
538
538
  call void @shareFrames(%StackPointer %newStackPointer)
539
539
 
540
540
  %prompt_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 3
541
- %prompt = load %Prompt, ptr %prompt_pointer
541
+ %prompt = load %Prompt, ptr %prompt_pointer, !alias.scope !11, !noalias !21
542
542
  call void @sharePrompt(%Prompt %prompt)
543
543
 
544
544
  %referenceCount_pointer = getelementptr %StackValue, %Stack %newStack, i64 0, i32 0
545
- store i64 0, ptr %referenceCount_pointer
545
+ store i64 0, ptr %referenceCount_pointer, !alias.scope !11, !noalias !21
546
546
 
547
547
  ret %Stack %newStack
548
548
  }
@@ -552,7 +552,7 @@ define private %Resumption @uniqueStack(%Resumption %resumption) alwaysinline {
552
552
 
553
553
  entry:
554
554
  %referenceCount_pointer = getelementptr %StackValue, %Resumption %resumption, i64 0, i32 0
555
- %referenceCount = load %ReferenceCount, ptr %referenceCount_pointer
555
+ %referenceCount = load %ReferenceCount, ptr %referenceCount_pointer, !alias.scope !11, !noalias !21
556
556
  switch %ReferenceCount %referenceCount, label %copy [%ReferenceCount 0, label %done]
557
557
 
558
558
  done:
@@ -560,12 +560,12 @@ done:
560
560
 
561
561
  copy:
562
562
  %newOldReferenceCount = sub %ReferenceCount %referenceCount, 1
563
- store %ReferenceCount %newOldReferenceCount, ptr %referenceCount_pointer
563
+ store %ReferenceCount %newOldReferenceCount, ptr %referenceCount_pointer, !alias.scope !11, !noalias !21
564
564
 
565
565
  %firstCopy = call %Stack @copyStack(%Stack %resumption)
566
566
 
567
567
  %stack_pointer = getelementptr %StackValue, %Resumption %resumption, i64 0, i32 4
568
- %stack = load %Stack, ptr %stack_pointer
568
+ %stack = load %Stack, ptr %stack_pointer, !alias.scope !11, !noalias !21
569
569
 
570
570
  br label %check
571
571
 
@@ -582,40 +582,40 @@ loop:
582
582
 
583
583
  %newCopy = call %Stack @copyStack(%Stack %current)
584
584
 
585
- store %Stack %newCopy, ptr %rest_pointer
585
+ store %Stack %newCopy, ptr %rest_pointer, !alias.scope !11, !noalias !21
586
586
 
587
587
  %next_pointer = getelementptr %StackValue, %Stack %current, i64 0, i32 4
588
- %next = load %Stack, ptr %next_pointer
588
+ %next = load %Stack, ptr %next_pointer, !alias.scope !11, !noalias !21
589
589
 
590
590
  br label %check
591
591
 
592
592
  stop:
593
- store %Stack %firstCopy, ptr %rest_pointer
593
+ store %Stack %firstCopy, ptr %rest_pointer, !alias.scope !11, !noalias !21
594
594
  ret %Stack %firstCopy
595
595
  }
596
596
 
597
597
  define void @shareResumption(%Resumption %resumption) alwaysinline {
598
598
  %referenceCount_pointer = getelementptr %StackValue, %Resumption %resumption, i64 0, i32 0
599
- %referenceCount = load %ReferenceCount, ptr %referenceCount_pointer
599
+ %referenceCount = load %ReferenceCount, ptr %referenceCount_pointer, !alias.scope !11, !noalias !21
600
600
  %referenceCount.1 = add %ReferenceCount %referenceCount, 1
601
- store %ReferenceCount %referenceCount.1, ptr %referenceCount_pointer
601
+ store %ReferenceCount %referenceCount.1, ptr %referenceCount_pointer, !alias.scope !11, !noalias !21
602
602
  ret void
603
603
  }
604
604
 
605
605
  define void @eraseResumption(%Resumption %resumption) alwaysinline {
606
606
  %referenceCount_pointer = getelementptr %StackValue, %Resumption %resumption, i64 0, i32 0
607
- %referenceCount = load %ReferenceCount, ptr %referenceCount_pointer
607
+ %referenceCount = load %ReferenceCount, ptr %referenceCount_pointer, !alias.scope !11, !noalias !21
608
608
  switch %ReferenceCount %referenceCount, label %decr [%ReferenceCount 0, label %free]
609
609
 
610
610
  decr:
611
611
  %referenceCount.1 = sub %ReferenceCount %referenceCount, 1
612
- store %ReferenceCount %referenceCount.1, ptr %referenceCount_pointer
612
+ store %ReferenceCount %referenceCount.1, ptr %referenceCount_pointer, !alias.scope !11, !noalias !21
613
613
  ret void
614
614
 
615
615
  free:
616
616
  %stack_pointer = getelementptr %StackValue, %Resumption %resumption, i64 0, i32 4
617
- %stack = load %Stack, ptr %stack_pointer
618
- store %Stack null, ptr %stack_pointer
617
+ %stack = load %Stack, ptr %stack_pointer, !alias.scope !11, !noalias !21
618
+ store %Stack null, ptr %stack_pointer, !alias.scope !11, !noalias !21
619
619
  call void @eraseStack(%Stack %stack)
620
620
  ret void
621
621
  }
@@ -625,17 +625,17 @@ define void @eraseStack(%Stack %stack) alwaysinline {
625
625
  %prompt_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 3
626
626
  %rest_pointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 4
627
627
 
628
- %stackPointer = load %StackPointer, ptr %stackPointer_pointer
629
- %prompt = load %Stack, ptr %prompt_pointer
630
- %rest = load %Stack, ptr %rest_pointer
628
+ %stackPointer = load %StackPointer, ptr %stackPointer_pointer, !alias.scope !11, !noalias !21
629
+ %prompt = load %Stack, ptr %prompt_pointer, !alias.scope !11, !noalias !21
630
+ %rest = load %Stack, ptr %rest_pointer, !alias.scope !11, !noalias !21
631
631
 
632
632
  %promptStack_pointer = getelementptr %PromptValue, %Prompt %prompt, i64 0, i32 1
633
- %promptStack = load %Stack, ptr %promptStack_pointer, !alias.scope !4
633
+ %promptStack = load %Stack, ptr %promptStack_pointer, !alias.scope !13, !noalias !23
634
634
  %isThisStack = icmp eq %Stack %promptStack, %stack
635
635
  br i1 %isThisStack, label %clearPrompt, label %free
636
636
 
637
637
  clearPrompt:
638
- store %Stack null, ptr %promptStack_pointer, !alias.scope !4
638
+ store %Stack null, ptr %promptStack_pointer, !alias.scope !13, !noalias !23
639
639
  br label %free
640
640
 
641
641
  free:
@@ -656,7 +656,7 @@ done:
656
656
  define private void @shareFrames(%StackPointer %stackPointer) alwaysinline {
657
657
  %newStackPointer = getelementptr %FrameHeader, %StackPointer %stackPointer, i64 -1
658
658
  %stackSharer = getelementptr %FrameHeader, %StackPointer %newStackPointer, i64 0, i32 1
659
- %sharer = load %Sharer, ptr %stackSharer
659
+ %sharer = load %Sharer, ptr %stackSharer, !alias.scope !12, !noalias !22
660
660
  tail call void %sharer(%StackPointer %newStackPointer)
661
661
  ret void
662
662
  }
@@ -664,7 +664,7 @@ define private void @shareFrames(%StackPointer %stackPointer) alwaysinline {
664
664
  define private void @eraseFrames(%StackPointer %stackPointer) alwaysinline {
665
665
  %newStackPointer = getelementptr %FrameHeader, %StackPointer %stackPointer, i64 -1
666
666
  %stackEraser = getelementptr %FrameHeader, %StackPointer %newStackPointer, i64 0, i32 2
667
- %eraser = load %Eraser, ptr %stackEraser
667
+ %eraser = load %Eraser, ptr %stackEraser, !alias.scope !12, !noalias !22
668
668
  tail call void %eraser(%StackPointer %newStackPointer)
669
669
  ret void
670
670
  }
@@ -678,14 +678,7 @@ define private void @freeStack(%StackPointer %stackPointer) alwaysinline {
678
678
  ; RTS initialization
679
679
 
680
680
  define private tailcc void @topLevel(%Pos %val, %Stack %stack) {
681
- %rest = call %Stack @underflowStack(%Stack %stack)
682
- ; rest holds global variables
683
- call void @resume_Pos(%Stack %rest, %Pos %val)
684
- ret void
685
- }
686
-
687
- define private tailcc void @globalsReturn(%Pos %val, %Stack %stack) {
688
- %rest = call %Stack @underflowStack(%Stack %stack)
681
+ call %Stack @underflowStack(%Stack %stack)
689
682
  ret void
690
683
  }
691
684
 
@@ -699,43 +692,22 @@ define private void @topLevelEraser(%Environment %environment) {
699
692
  ret void
700
693
  }
701
694
 
702
- @global = private global { i64, %Stack } { i64 0, %Stack null }
703
-
704
695
  define private %Stack @withEmptyStack() {
705
- %globals = call %Stack @reset(%Stack null)
706
-
707
- %globalsStackPointer_pointer = getelementptr %StackValue, %Stack %globals, i64 0, i32 1
708
- %globalsStackPointer = load %StackPointer, ptr %globalsStackPointer_pointer
709
-
710
- %returnAddressPointer.0 = getelementptr %FrameHeader, %StackPointer %globalsStackPointer, i64 0, i32 0
711
- %sharerPointer.0 = getelementptr %FrameHeader, %StackPointer %globalsStackPointer, i64 0, i32 1
712
- %eraserPointer.0 = getelementptr %FrameHeader, %StackPointer %globalsStackPointer, i64 0, i32 2
713
-
714
- store ptr @globalsReturn, ptr %returnAddressPointer.0
715
- store ptr @topLevelSharer, ptr %sharerPointer.0
716
- store ptr @topLevelEraser, ptr %eraserPointer.0
717
-
718
- %globalsStackPointer_2 = getelementptr %FrameHeader, %StackPointer %globalsStackPointer, i64 1
719
- store %StackPointer %globalsStackPointer_2, ptr %globalsStackPointer_pointer
720
-
721
- %stack = call %Stack @reset(%Stack %globals)
722
-
723
- %globalStack = getelementptr %PromptValue, %Prompt @global, i64 0, i32 1
724
- store %Stack %stack, ptr %globalStack, !alias.scope !4
696
+ %stack = call %Stack @reset(%Stack null)
725
697
 
726
698
  %stackStackPointer = getelementptr %StackValue, %Stack %stack, i64 0, i32 1
727
- %stackPointer = load %StackPointer, ptr %stackStackPointer
699
+ %stackPointer = load %StackPointer, ptr %stackStackPointer, !alias.scope !11, !noalias !21
728
700
 
729
701
  %returnAddressPointer = getelementptr %FrameHeader, %StackPointer %stackPointer, i64 0, i32 0
730
702
  %sharerPointer = getelementptr %FrameHeader, %StackPointer %stackPointer, i64 0, i32 1
731
703
  %eraserPointer = getelementptr %FrameHeader, %StackPointer %stackPointer, i64 0, i32 2
732
704
 
733
- store %ReturnAddress @topLevel, ptr %returnAddressPointer
734
- store %Sharer @topLevelSharer, ptr %sharerPointer
735
- store %Eraser @topLevelEraser, ptr %eraserPointer
705
+ store %ReturnAddress @topLevel, ptr %returnAddressPointer, !alias.scope !12, !noalias !22
706
+ store %Sharer @topLevelSharer, ptr %sharerPointer, !alias.scope !12, !noalias !22
707
+ store %Eraser @topLevelEraser, ptr %eraserPointer, !alias.scope !12, !noalias !22
736
708
 
737
709
  %stackPointer_2 = getelementptr %FrameHeader, %StackPointer %stackPointer, i64 1
738
- store %StackPointer %stackPointer_2, ptr %stackStackPointer
710
+ store %StackPointer %stackPointer_2, ptr %stackStackPointer, !alias.scope !11, !noalias !21
739
711
 
740
712
  ret %Stack %stack
741
713
  }
@@ -743,7 +715,7 @@ define private %Stack @withEmptyStack() {
743
715
  define void @resume_Int(%Stack %stack, %Int %argument) {
744
716
  %stackPointer = call ccc %StackPointer @stackDeallocate(%Stack %stack, i64 24)
745
717
  %returnAddressPointer = getelementptr %FrameHeader, %StackPointer %stackPointer, i64 0, i32 0
746
- %returnAddress = load %ReturnAddress, ptr %returnAddressPointer
718
+ %returnAddress = load %ReturnAddress, ptr %returnAddressPointer, !alias.scope !12, !noalias !22
747
719
  tail call tailcc void %returnAddress(%Int %argument, %Stack %stack)
748
720
  ret void
749
721
  }
@@ -751,7 +723,7 @@ define void @resume_Int(%Stack %stack, %Int %argument) {
751
723
  define void @resume_Pos(%Stack %stack, %Pos %argument) {
752
724
  %stackPointer = call ccc %StackPointer @stackDeallocate(%Stack %stack, i64 24)
753
725
  %returnAddressPointer = getelementptr %FrameHeader, %StackPointer %stackPointer, i64 0, i32 0
754
- %returnAddress = load %ReturnAddress, ptr %returnAddressPointer
726
+ %returnAddress = load %ReturnAddress, ptr %returnAddressPointer, !alias.scope !12, !noalias !22
755
727
  tail call tailcc void %returnAddress(%Pos %argument, %Stack %stack)
756
728
  ret void
757
729
  }
@@ -764,7 +736,7 @@ define void @run(%Neg %f) {
764
736
  %arrayPointer = extractvalue %Neg %f, 0
765
737
  %object = extractvalue %Neg %f, 1
766
738
  %functionPointerPointer = getelementptr ptr, ptr %arrayPointer, i64 0
767
- %functionPointer = load ptr, ptr %functionPointerPointer
739
+ %functionPointer = load ptr, ptr %functionPointerPointer, !alias.scope !15, !noalias !25
768
740
 
769
741
  ; call
770
742
  tail call tailcc %Pos %functionPointer(%Object %object, %Stack %stack)
@@ -779,7 +751,7 @@ define void @run_Int(%Neg %f, i64 %argument) {
779
751
  %arrayPointer = extractvalue %Neg %f, 0
780
752
  %object = extractvalue %Neg %f, 1
781
753
  %functionPointerPointer = getelementptr ptr, ptr %arrayPointer, i64 0
782
- %functionPointer = load ptr, ptr %functionPointerPointer
754
+ %functionPointer = load ptr, ptr %functionPointerPointer, !alias.scope !15, !noalias !25
783
755
 
784
756
  ; call
785
757
  tail call tailcc %Pos %functionPointer(%Object %object, %Evidence 0, i64 %argument, %Stack %stack)
@@ -794,7 +766,7 @@ define void @run_Pos(%Neg %f, %Pos %argument) {
794
766
  %arrayPointer = extractvalue %Neg %f, 0
795
767
  %object = extractvalue %Neg %f, 1
796
768
  %functionPointerPointer = getelementptr ptr, ptr %arrayPointer, i64 0
797
- %functionPointer = load ptr, ptr %functionPointerPointer
769
+ %functionPointer = load ptr, ptr %functionPointerPointer, !alias.scope !15, !noalias !25
798
770
 
799
771
  ; call
800
772
  tail call tailcc %Pos %functionPointer(%Object %object, %Evidence 0, %Pos %argument, %Stack %stack)
@@ -806,10 +778,21 @@ define void @run_Pos(%Neg %f, %Pos %argument) {
806
778
  !0 = !{!"types"}
807
779
 
808
780
  ; Scopes
809
- !1 = !{!"stackValues", !0}
810
- !2 = !{!"prompts", !0}
781
+ !1 = !{!"stackBase", !0}
782
+ !2 = !{!"stackPointer", !0}
783
+ !3 = !{!"prompt", !0}
784
+ !4 = !{!"object", !0}
785
+ !5 = !{!"vtable", !0}
811
786
 
812
787
  ; Scope lists
813
- !3 = !{!1} ; stackValues
814
- !4 = !{!2} ; prompts
815
- !5 = !{!1, !2} ; stackValues & prompts
788
+ !11 = !{!1} ; stackBase
789
+ !12 = !{!2} ; stackPointer
790
+ !13 = !{!3} ; prompt
791
+ !14 = !{!4} ; object
792
+ !15 = !{!5} ; vtable
793
+
794
+ !21 = !{ !2, !3, !4, !5} ; not stackBase
795
+ !22 = !{!1, !3, !4, !5} ; not stackPointer
796
+ !23 = !{!1, !2, !4, !5} ; not prompt
797
+ !24 = !{!1, !2, !3, !5} ; not object
798
+ !25 = !{!1, !2, !3, !4 } ; not vtable