@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.
- package/bin/effekt +0 -0
- package/libraries/common/buffer.effekt +32 -33
- package/libraries/common/queue.effekt +62 -62
- package/libraries/common/stream.effekt +11 -0
- package/libraries/common/stringbuffer.effekt +1 -1
- package/libraries/js/effekt_runtime.js +72 -69
- package/libraries/llvm/rts.ll +99 -116
- package/licenses/eclipse public license, version 2.0 - epl-2.0.html +23 -23
- package/licenses/mit license - mit-license.html +35 -25
- package/licenses/the bsd license - bsd-license.html +35 -25
- package/licenses/the mit license - mit.html +35 -25
- package/package.json +1 -1
package/libraries/llvm/rts.ll
CHANGED
|
@@ -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 !
|
|
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 !
|
|
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 !
|
|
284
|
-
%limit = load %Limit, ptr %limit_pointer, !alias.scope !
|
|
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 !
|
|
308
|
-
store %Limit %newLimit, ptr %newLimit_pointer, !alias.scope !
|
|
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 !
|
|
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 !
|
|
323
|
-
%limit = load %Limit, ptr %limit_pointer, !alias.scope !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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 !
|
|
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
|
-
|
|
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
|
-
%
|
|
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 = !{!"
|
|
810
|
-
!2 = !{!"
|
|
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
|
-
!
|
|
814
|
-
!
|
|
815
|
-
!
|
|
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
|