il: add Ptr type distinct from W64

b1f8d523dbff6618addd6a728774839d6dc6c68e0ef4ad5c518306d9a142ddba
Add a Ptr variant to il::Type that is semantically distinct from W64.
Both are 64-bit on RV64, but Ptr marks values with pointer provenance,
enabling future static verification of memory safety.

- il.rad: Add Type::Ptr, update typeSize
- il/printer.rad: Print 'ptr' for the new type
- lower.rad: ilType maps Pointer/Fn/TraitObject/Slice/Array/Optional/
  Nominal to Ptr; update pointer arithmetic, trait object loads/stores,
  null-pointer comparisons, return-param conventions
- rv64/emit.rad: Ptr uses same load/store instructions as W64
- rv64/isel.rad: Ptr uses same extension/range logic as W64
- Regenerate .ril test snapshots
Alexis Sellier committed ago 1 parent 41b8d492
lib/std/arch/rv64/emit.rad +6 -3
492 492
    let adj = adjustOffset(e, base, offset);
493 493
    match typ {
494 494
        case il::Type::W8 => emit(e, encode::lbu(rd, adj.base, adj.offset)),
495 495
        case il::Type::W16 => emit(e, encode::lhu(rd, adj.base, adj.offset)),
496 496
        case il::Type::W32 => emit(e, encode::lwu(rd, adj.base, adj.offset)),
497 -
        case il::Type::W64 => emit(e, encode::ld(rd, adj.base, adj.offset)),
497 +
        case il::Type::W64,
498 +
             il::Type::Ptr => emit(e, encode::ld(rd, adj.base, adj.offset)),
498 499
    }
499 500
}
500 501
501 502
/// Emit signed load with automatic offset adjustment.
502 503
pub fn emitSload(e: *mut Emitter, rd: gen::Reg, base: gen::Reg, offset: i32, typ: il::Type) {
503 504
    let adj = adjustOffset(e, base, offset);
504 505
    match typ {
505 506
        case il::Type::W8 => emit(e, encode::lb(rd, adj.base, adj.offset)),
506 507
        case il::Type::W16 => emit(e, encode::lh(rd, adj.base, adj.offset)),
507 508
        case il::Type::W32 => emit(e, encode::lw(rd, adj.base, adj.offset)),
508 -
        case il::Type::W64 => emit(e, encode::ld(rd, adj.base, adj.offset)),
509 +
        case il::Type::W64,
510 +
             il::Type::Ptr => emit(e, encode::ld(rd, adj.base, adj.offset)),
509 511
    }
510 512
}
511 513
512 514
/// Emit store with automatic offset adjustment.
513 515
pub fn emitStore(e: *mut Emitter, rs: gen::Reg, base: gen::Reg, offset: i32, typ: il::Type) {
514 516
    let adj = adjustOffset(e, base, offset);
515 517
    match typ {
516 518
        case il::Type::W8 => emit(e, encode::sb(rs, adj.base, adj.offset)),
517 519
        case il::Type::W16 => emit(e, encode::sh(rs, adj.base, adj.offset)),
518 520
        case il::Type::W32 => emit(e, encode::sw(rs, adj.base, adj.offset)),
519 -
        case il::Type::W64 => emit(e, encode::sd(rs, adj.base, adj.offset)),
521 +
        case il::Type::W64,
522 +
             il::Type::Ptr => emit(e, encode::sd(rs, adj.base, adj.offset)),
520 523
    }
521 524
}
522 525
523 526
/// Emit 64-bit load with automatic offset adjustment.
524 527
pub fn emitLd(e: *mut Emitter, rd: gen::Reg, base: gen::Reg, offset: i32) {
lib/std/arch/rv64/isel.rad +8 -4
228 228
        },
229 229
        case il::Type::W32 => {
230 230
            emit::emit(e, encode::slli(rd, rs, SHIFT_W32));
231 231
            emit::emit(e, encode::srli(rd, rd, SHIFT_W32));
232 232
        },
233 -
        case il::Type::W64 => {}
233 +
        case il::Type::W64,
234 +
             il::Type::Ptr => {}
234 235
    }
235 236
}
236 237
237 238
/// Emit sign-extension from a sub-word type to the full register width.
238 239
fn emitSext(e: *mut emit::Emitter, rd: gen::Reg, rs: gen::Reg, typ: il::Type) {
246 247
            emit::emit(e, encode::srai(rd, rd, SHIFT_W16));
247 248
        },
248 249
        case il::Type::W32 => {
249 250
            emit::emit(e, encode::addiw(rd, rs, 0));
250 251
        },
251 -
        case il::Type::W64 => {}
252 +
        case il::Type::W64,
253 +
             il::Type::Ptr => {}
252 254
    }
253 255
}
254 256
255 257
/// Resolve a value, trap if zero (unless known non-zero), and return the register.
256 258
fn resolveAndTrapIfZero(s: *mut Selector, b: il::Val) -> gen::Reg {
780 782
            // fits in the signed range of the target type.
781 783
            match typ {
782 784
                case il::Type::W8 => return imm >= I8_MIN and imm <= I8_MAX,
783 785
                case il::Type::W16 => return imm >= I16_MIN and imm <= I16_MAX,
784 786
                case il::Type::W32 => return imm >= I32_MIN and imm <= I32_MAX,
785 -
                case il::Type::W64 => return true,
787 +
                case il::Type::W64,
788 +
                     il::Type::Ptr => return true,
786 789
            }
787 790
        } else {
788 791
            // Zero-extension: value must be non-negative and within unsigned range.
789 792
            match typ {
790 793
                case il::Type::W8 => return imm >= 0 and imm <= U8_MAX,
791 794
                case il::Type::W16 => return imm >= 0 and imm <= U16_MAX,
792 795
                case il::Type::W32 => return imm >= 0 and imm <= U32_MAX,
793 -
                case il::Type::W64 => return true,
796 +
                case il::Type::W64,
797 +
                     il::Type::Ptr => return true,
794 798
            }
795 799
        }
796 800
    }
797 801
    return false;
798 802
}
lib/std/lang/il.rad +7 -2
109 109
    W8,
110 110
    /// 16-bit value.
111 111
    W16,
112 112
    /// 32-bit value.
113 113
    W32,
114 -
    /// 64-bit value (used for pointers on RV64).
114 +
    /// 64-bit value.
115 115
    W64,
116 +
    /// Pointer-width value with provenance.
117 +
    /// Same physical width as W64 on RV64, but semantically distinct:
118 +
    /// a verifier treats Ptr and W64 as incompatible types.
119 +
    Ptr,
116 120
}
117 121
118 122
/// Get the size of a type in bytes.
119 123
pub fn typeSize(t: Type) -> u32 {
120 124
    match t {
121 125
        case Type::W8 => return 1,
122 126
        case Type::W16 => return 2,
123 127
        case Type::W32 => return 4,
124 -
        case Type::W64 => return 8,
128 +
        case Type::W64,
129 +
             Type::Ptr => return 8,
125 130
    }
126 131
}
127 132
128 133
/// SSA register reference.
129 134
pub record Reg { n: u32 }
lib/std/lang/il/printer.rad +1 -0
97 97
    match typ {
98 98
        case super::Type::W8 => return "w8",
99 99
        case super::Type::W16 => return "w16",
100 100
        case super::Type::W32 => return "w32",
101 101
        case super::Type::W64 => return "w64",
102 +
        case super::Type::Ptr => return "ptr",
102 103
    }
103 104
}
104 105
105 106
/// Write a type.
106 107
fn writeType(out: *mut sexpr::Output, typ: super::Type) {
lib/std/lang/lower.rad +23 -23
936 936
        returnType: undefined,
937 937
        isExtern,
938 938
        isLeaf: true,
939 939
        blocks: &[],
940 940
    };
941 -
    // Throwing functions return a result aggregate (word-sized pointer).
941 +
    // Throwing functions return a result aggregate (pointer to stack slot).
942 942
    // TODO: The resolver should set an appropriate type that takes into account
943 943
    //       the throws list. It shouldn't set the return type to the "success"
944 944
    //       value only.
945 945
    if fnType.throwList.len > 0 {
946 -
        func.returnType = il::Type::W64;
946 +
        func.returnType = il::Type::Ptr;
947 947
    } else {
948 948
        func.returnType = ilType(self, *fnType.returnType);
949 949
    }
950 950
    let body = decl.body else {
951 951
        // Extern functions have no body.
1103 1103
        isExtern: false,
1104 1104
        isLeaf: true,
1105 1105
        blocks: &[],
1106 1106
    };
1107 1107
    if fnType.throwList.len > 0 {
1108 -
        func.returnType = il::Type::W64;
1108 +
        func.returnType = il::Type::Ptr;
1109 1109
    }
1110 1110
    func.blocks = try lowerFnBody(&mut fnLow, body);
1111 1111
    func.isLeaf = fnLow.isLeaf;
1112 1112
1113 1113
    return func;
2193 2193
2194 2194
    match subject.kind {
2195 2195
        case MatchSubjectKind::OptionalPtr if isNil => {
2196 2196
            // Null pointer optimization: branch on the data pointer being null.
2197 2197
            let nilReg = try optionalNilReg(self, subject.val, subject.type);
2198 -
            try emitBrCmp(self, il::CmpOp::Eq, il::Type::W64, il::Val::Reg(nilReg), il::Val::Imm(0), matchBlock, fallthrough);
2198 +
            try emitBrCmp(self, il::CmpOp::Eq, il::Type::Ptr, il::Val::Reg(nilReg), il::Val::Imm(0), matchBlock, fallthrough);
2199 2199
        }
2200 2200
        case MatchSubjectKind::OptionalAggregate => {
2201 2201
            let base = emitValToReg(self, subject.val);
2202 2202
2203 2203
            if isNil { // Optional aggregate: `nil` means tag is zero.
2881 2881
    let params = try! alloc::allocSlice(
2882 2882
        self.low.arena, @sizeOf(il::Param), @alignOf(il::Param), totalLen
2883 2883
    ) as *mut [il::Param];
2884 2884
2885 2885
    if let reg = self.returnReg {
2886 -
        params[0] = il::Param { value: reg, type: il::Type::W64 };
2886 +
        params[0] = il::Param { value: reg, type: il::Type::Ptr };
2887 2887
    }
2888 2888
    for i in 0..fnType.paramTypes.len as u32 {
2889 2889
        let type = ilType(self.low, *fnType.paramTypes[i]);
2890 2890
        let reg = nextReg(self);
2891 2891
2996 2996
    let val = try lowerExpr(self, opt);
2997 2997
    let cmpReg = try optionalNilReg(self, val, optTy);
2998 2998
2999 2999
    // Null-pointer-optimized types compare a 64-bit pointer against zero.
3000 3000
    // Aggregate optionals compare an 8-bit tag byte against zero.
3001 -
    let cmpType = il::Type::W64 if resolver::isOptionalPointer(optTy) else il::Type::W8;
3001 +
    let cmpType = il::Type::Ptr if resolver::isOptionalPointer(optTy) else il::Type::W8;
3002 3002
3003 3003
    let op = il::BinOp::Eq if isEq else il::BinOp::Ne;
3004 3004
    return emitTypedBinOp(self, op, cmpType, il::Val::Reg(cmpReg), il::Val::Imm(0));
3005 3005
}
3006 3006
4068 4068
        alignment: resolver::PTR_SIZE,
4069 4069
    });
4070 4070
4071 4071
    // Store data pointer.
4072 4072
    emit(self, il::Instr::Store {
4073 -
        typ: il::Type::W64,
4073 +
        typ: il::Type::Ptr,
4074 4074
        src: dataVal,
4075 4075
        dst: slot,
4076 4076
        offset: TRAIT_OBJ_DATA_OFFSET,
4077 4077
    });
4078 4078
4079 4079
    // Store v-table address.
4080 4080
    emit(self, il::Instr::Store {
4081 -
        typ: il::Type::W64,
4081 +
        typ: il::Type::Ptr,
4082 4082
        src: il::Val::DataSym(vName),
4083 4083
        dst: slot,
4084 4084
        offset: TRAIT_OBJ_VTABLE_OFFSET,
4085 4085
    });
4086 4086
    return il::Val::Reg(slot);
4093 4093
    }
4094 4094
    let dst = nextReg(self);
4095 4095
4096 4096
    emit(self, il::Instr::BinOp {
4097 4097
        op: il::BinOp::Add,
4098 -
        typ: il::Type::W64,
4098 +
        typ: il::Type::Ptr,
4099 4099
        dst,
4100 4100
        a: il::Val::Reg(base),
4101 4101
        b: il::Val::Imm(offset as i64),
4102 4102
    });
4103 4103
    return dst;
4114 4114
    if stride == 1 {
4115 4115
        let dst = nextReg(self);
4116 4116
4117 4117
        emit(self, il::Instr::BinOp {
4118 4118
            op: il::BinOp::Add,
4119 -
            typ: il::Type::W64,
4119 +
            typ: il::Type::Ptr,
4120 4120
            dst,
4121 4121
            a: il::Val::Reg(base),
4122 4122
            b: idx
4123 4123
        });
4124 4124
        return dst;
4135 4135
    });
4136 4136
    // Compute `dst = base + offset`.
4137 4137
    let dst = nextReg(self);
4138 4138
    emit(self, il::Instr::BinOp {
4139 4139
        op: il::BinOp::Add,
4140 -
        typ: il::Type::W64,
4140 +
        typ: il::Type::Ptr,
4141 4141
        dst,
4142 4142
        a: il::Val::Reg(base),
4143 4143
        b: il::Val::Reg(offset)
4144 4144
    });
4145 4145
    return dst;
6271 6271
    args[1] = byteSize;
6272 6272
    args[2] = il::Val::Imm(alignment as i64);
6273 6273
6274 6274
    let newPtrReg = nextReg(self);
6275 6275
    emit(self, il::Instr::Call {
6276 -
        retTy: il::Type::W64,
6276 +
        retTy: il::Type::Ptr,
6277 6277
        dst: newPtrReg,
6278 6278
        func: il::Val::Reg(allocFnReg),
6279 6279
        args,
6280 6280
    });
6281 6281
6407 6407
    let traitObjReg = emitValToReg(self, traitObjVal);
6408 6408
6409 6409
    // Load data pointer from trait object.
6410 6410
    let dataReg = nextReg(self);
6411 6411
    emit(self, il::Instr::Load {
6412 -
        typ: il::Type::W64,
6412 +
        typ: il::Type::Ptr,
6413 6413
        dst: dataReg,
6414 6414
        src: traitObjReg,
6415 6415
        offset: TRAIT_OBJ_DATA_OFFSET,
6416 6416
    });
6417 6417
6418 6418
    // Load v-table pointer from trait object.
6419 6419
    let vtableReg = nextReg(self);
6420 6420
    emit(self, il::Instr::Load {
6421 -
        typ: il::Type::W64,
6421 +
        typ: il::Type::Ptr,
6422 6422
        dst: vtableReg,
6423 6423
        src: traitObjReg,
6424 6424
        offset: TRAIT_OBJ_VTABLE_OFFSET,
6425 6425
    });
6426 6426
6427 6427
    // Load function pointer from v-table at the method's slot offset.
6428 6428
    let fnPtrReg = nextReg(self);
6429 6429
    let slotOffset = (methodIndex * resolver::PTR_SIZE) as i32;
6430 6430
6431 6431
    emit(self, il::Instr::Load {
6432 -
        typ: il::Type::W64,
6432 +
        typ: il::Type::Ptr,
6433 6433
        dst: fnPtrReg,
6434 6434
        src: vtableReg,
6435 6435
        offset: slotOffset,
6436 6436
    });
6437 6437
    let methodFnType = traitInfo.methods[methodIndex].fnType;
6469 6469
            args[0] = il::Val::Reg(try emitReserve(self, retTy));
6470 6470
        }
6471 6471
        let dst = nextReg(self);
6472 6472
6473 6473
        emit(self, il::Instr::Call {
6474 -
            retTy: il::Type::W64,
6474 +
            retTy: il::Type::Ptr,
6475 6475
            dst,
6476 6476
            func: callee,
6477 6477
            args,
6478 6478
        });
6479 6479
        return il::Val::Reg(dst);
6979 6979
        case resolver::Type::I16,
6980 6980
             resolver::Type::U16 => return il::Type::W16,
6981 6981
        case resolver::Type::I32,
6982 6982
             resolver::Type::U32 => return il::Type::W32,
6983 6983
        case resolver::Type::I64,
6984 -
             resolver::Type::U64,
6985 -
             resolver::Type::Pointer { .. },
6986 -
             resolver::Type::Slice { .. },
6987 -
             resolver::Type::Array(_),
6988 -
             resolver::Type::Optional(_),
6984 +
             resolver::Type::U64 => return il::Type::W64,
6985 +
        case resolver::Type::Pointer { .. },
6989 6986
             resolver::Type::Fn(_),
6990 -
             resolver::Type::TraitObject { .. } => return il::Type::W64,
6987 +
             resolver::Type::TraitObject { .. } => return il::Type::Ptr,
6988 +
        case resolver::Type::Slice { .. },
6989 +
             resolver::Type::Array(_),
6990 +
             resolver::Type::Optional(_) => return il::Type::Ptr,
6991 6991
        case resolver::Type::Nominal(_) => {
6992 6992
            if resolver::isVoidUnion(typ) {
6993 6993
                return il::Type::W8;
6994 6994
            }
6995 -
            return il::Type::W64;
6995 +
            return il::Type::Ptr;
6996 6996
        }
6997 6997
        case resolver::Type::Void => return il::Type::W64,
6998 6998
        // [`Type::Int`] is the type of unsuffixed integer literals and their
6999 6999
        // compound expressions (e.g. `1 + 2`). It defaults to W64 (i64) here,
7000 7000
        // matching the native word size on RV64. It cannot be resolved earlier
test/tests/arith.subword.ril +0 -1
242 242
  @assert.fail29
243 243
    unreachable;
244 244
  @assert.ok30
245 245
    ret 0;
246 246
}
247 -
test/tests/arith.w64.ril +0 -1
293 293
  @assert.fail35
294 294
    unreachable;
295 295
  @assert.ok36
296 296
    ret 0;
297 297
}
298 -
test/tests/array.aggregate.stride.ril +9 -9
1 -
fn w32 $arrayOfRecords(w64 %0, w32 %1) {
1 +
fn w32 $arrayOfRecords(ptr %0, w32 %1) {
2 2
  @entry0
3 3
    br.ult w32 %1 3 @guard#pass1 @guard#trap2;
4 4
  @guard#pass1
5 5
    mul w64 %2 %1 8;
6 -
    add w64 %3 %0 %2;
6 +
    add ptr %3 %0 %2;
7 7
    sload w32 %4 %3 0;
8 8
    ret %4;
9 9
  @guard#trap2
10 10
    ebreak;
11 11
    unreachable;
12 12
}
13 13
14 -
fn w64 $addressOfRecord(w64 %0, w32 %1) {
14 +
fn ptr $addressOfRecord(ptr %0, w32 %1) {
15 15
  @entry0
16 16
    br.ult w32 %1 3 @guard#pass1 @guard#trap2;
17 17
  @guard#pass1
18 18
    mul w64 %2 %1 8;
19 -
    add w64 %3 %0 %2;
19 +
    add ptr %3 %0 %2;
20 20
    ret %3;
21 21
  @guard#trap2
22 22
    ebreak;
23 23
    unreachable;
24 24
}
25 25
26 -
fn w32 $arrayOfArrays(w64 %0, w32 %1) {
26 +
fn w32 $arrayOfArrays(ptr %0, w32 %1) {
27 27
  @entry0
28 28
    br.ult w32 %1 3 @guard#pass1 @guard#trap2;
29 29
  @guard#pass1
30 30
    mul w64 %2 %1 16;
31 -
    add w64 %3 %0 %2;
31 +
    add ptr %3 %0 %2;
32 32
    sload w32 %4 %3 0;
33 33
    ret %4;
34 34
  @guard#trap2
35 35
    ebreak;
36 36
    unreachable;
37 37
}
38 38
39 -
fn w32 $nestedLargeStride(w64 %0, w32 %1, w32 %2) {
39 +
fn w32 $nestedLargeStride(ptr %0, w32 %1, w32 %2) {
40 40
  @entry0
41 41
    br.ult w32 %1 3 @guard#pass1 @guard#trap2;
42 42
  @guard#pass1
43 43
    mul w64 %3 %1 16;
44 -
    add w64 %4 %0 %3;
44 +
    add ptr %4 %0 %3;
45 45
    br.ult w32 %2 2 @guard#pass3 @guard#trap4;
46 46
  @guard#trap2
47 47
    ebreak;
48 48
    unreachable;
49 49
  @guard#pass3
50 50
    mul w64 %5 %2 8;
51 -
    add w64 %6 %4 %5;
51 +
    add ptr %6 %4 %5;
52 52
    sload w32 %7 %6 4;
53 53
    ret %7;
54 54
  @guard#trap4
55 55
    ebreak;
56 56
    unreachable;
test/tests/array.assign.ril +2 -3
13 13
    store w32 6 %1 12;
14 14
    store w32 0 %1 16;
15 15
    blit %1 %0 20;
16 16
    sload w32 %2 %1 0;
17 17
    mul w64 %3 3 4;
18 -
    add w64 %4 %1 %3;
18 +
    add ptr %4 %1 %3;
19 19
    sload w32 %5 %4 0;
20 20
    add w32 %6 %2 %5;
21 21
    mul w64 %7 2 4;
22 -
    add w64 %8 %1 %7;
22 +
    add ptr %8 %1 %7;
23 23
    sload w32 %9 %8 0;
24 24
    sub w32 %10 %6 %9;
25 25
    ret %10;
26 26
}
27 -
test/tests/array.index.ril +3 -4
6 6
    store w32 30 %0 8;
7 7
    store w32 40 %0 12;
8 8
    sload w32 %1 %0 0;
9 9
    add w32 %2 0 %1;
10 10
    mul w64 %3 1 4;
11 -
    add w64 %4 %0 %3;
11 +
    add ptr %4 %0 %3;
12 12
    sload w32 %5 %4 0;
13 13
    add w32 %6 %2 %5;
14 14
    mul w64 %7 2 4;
15 -
    add w64 %8 %0 %7;
15 +
    add ptr %8 %0 %7;
16 16
    sload w32 %9 %8 0;
17 17
    add w32 %10 %6 %9;
18 18
    mul w64 %11 3 4;
19 -
    add w64 %12 %0 %11;
19 +
    add ptr %12 %0 %11;
20 20
    sload w32 %13 %12 0;
21 21
    add w32 %14 %10 %13;
22 22
    sub w32 %15 %14 100;
23 23
    ret %15;
24 24
}
25 -
test/tests/array.len.const.ril +3 -3
1 -
fn w32 $arrayLen(w64 %0) {
1 +
fn w32 $arrayLen(ptr %0) {
2 2
  @entry0
3 3
    ret 5;
4 4
}
5 5
6 -
fn w32 $arrayLenExpr(w64 %0) {
6 +
fn w32 $arrayLenExpr(ptr %0) {
7 7
  @entry0
8 8
    add w32 %1 3 10;
9 9
    ret %1;
10 10
}
11 11
12 -
fn w8 $arrayLenCmp(w64 %0) {
12 +
fn w8 $arrayLenCmp(ptr %0) {
13 13
  @entry0
14 14
    eq w32 %1 4 4;
15 15
    ret %1;
16 16
}
test/tests/array.literal.ril +2 -2
4 4
    store w32 1 %0 0;
5 5
    store w32 2 %0 4;
6 6
    store w32 3 %0 8;
7 7
    sload w32 %1 %0 0;
8 8
    mul w64 %2 1 4;
9 -
    add w64 %3 %0 %2;
9 +
    add ptr %3 %0 %2;
10 10
    sload w32 %4 %3 0;
11 11
    add w32 %5 %1 %4;
12 12
    mul w64 %6 2 4;
13 -
    add w64 %7 %0 %6;
13 +
    add ptr %7 %0 %6;
14 14
    sload w32 %8 %7 0;
15 15
    add w32 %9 %5 %8;
16 16
    ret %9;
17 17
}
test/tests/array.nested.ril +8 -9
8 8
    blit %0 %1 12;
9 9
    reserve %2 12 4;
10 10
    store w32 4 %2 0;
11 11
    store w32 5 %2 4;
12 12
    store w32 6 %2 8;
13 -
    add w64 %3 %0 12;
13 +
    add ptr %3 %0 12;
14 14
    blit %3 %2 12;
15 15
    reserve %4 24 4;
16 16
    blit %4 %0 24;
17 17
    sload w32 %5 %0 0;
18 18
    mul w64 %6 1 4;
19 -
    add w64 %7 %4 %6;
19 +
    add ptr %7 %4 %6;
20 20
    sload w32 %8 %7 0;
21 21
    add w32 %9 %5 %8;
22 22
    mul w64 %10 2 4;
23 -
    add w64 %11 %0 %10;
23 +
    add ptr %11 %0 %10;
24 24
    sload w32 %12 %11 0;
25 25
    add w32 %13 %9 %12;
26 26
    mul w64 %14 1 12;
27 -
    add w64 %15 %4 %14;
27 +
    add ptr %15 %4 %14;
28 28
    sload w32 %16 %15 0;
29 29
    add w32 %17 %13 %16;
30 30
    mul w64 %18 1 12;
31 -
    add w64 %19 %0 %18;
31 +
    add ptr %19 %0 %18;
32 32
    mul w64 %20 1 4;
33 -
    add w64 %21 %19 %20;
33 +
    add ptr %21 %19 %20;
34 34
    sload w32 %22 %21 0;
35 35
    add w32 %23 %17 %22;
36 36
    mul w64 %24 1 12;
37 -
    add w64 %25 %4 %24;
37 +
    add ptr %25 %4 %24;
38 38
    mul w64 %26 2 4;
39 -
    add w64 %27 %25 %26;
39 +
    add ptr %27 %25 %26;
40 40
    sload w32 %28 %27 0;
41 41
    add w32 %29 %23 %28;
42 42
    ret %29;
43 43
}
44 -
test/tests/array.repeat.ril +9 -10
6 6
    store w32 42 %0 8;
7 7
    sload w32 %3 %0 0;
8 8
    br.eq w32 %3 42 @and#then4 @and#else5;
9 9
  @and#then1
10 10
    mul w64 %9 2 4;
11 -
    add w64 %10 %0 %9;
11 +
    add ptr %10 %0 %9;
12 12
    sload w32 %11 %10 0;
13 13
    eq w32 %12 %11 42;
14 14
    jmp @and#end3(%12);
15 15
  @and#else2
16 16
    jmp @and#end3(0);
17 17
  @and#end3(w8 %1)
18 18
    ret %1;
19 19
  @and#then4
20 20
    mul w64 %4 1 4;
21 -
    add w64 %5 %0 %4;
21 +
    add ptr %5 %0 %4;
22 22
    sload w32 %6 %5 0;
23 23
    eq w32 %7 %6 42;
24 24
    jmp @and#end6(%7);
25 25
  @and#else5
26 26
    jmp @and#end6(0);
38 38
    store w32 0 %0 16;
39 39
    sload w32 %5 %0 0;
40 40
    br.eq w32 %5 0 @and#then10 @and#else11;
41 41
  @and#then1
42 42
    mul w64 %21 4 4;
43 -
    add w64 %22 %0 %21;
43 +
    add ptr %22 %0 %21;
44 44
    sload w32 %23 %22 0;
45 45
    eq w32 %24 %23 0;
46 46
    jmp @and#end3(%24);
47 47
  @and#else2
48 48
    jmp @and#end3(0);
49 49
  @and#end3(w8 %1)
50 50
    ret %1;
51 51
  @and#then4
52 52
    mul w64 %16 3 4;
53 -
    add w64 %17 %0 %16;
53 +
    add ptr %17 %0 %16;
54 54
    sload w32 %18 %17 0;
55 55
    eq w32 %19 %18 0;
56 56
    jmp @and#end6(%19);
57 57
  @and#else5
58 58
    jmp @and#end6(0);
59 59
  @and#end6(w8 %2)
60 60
    br.ne w32 %2 0 @and#then1 @and#else2;
61 61
  @and#then7
62 62
    mul w64 %11 2 4;
63 -
    add w64 %12 %0 %11;
63 +
    add ptr %12 %0 %11;
64 64
    sload w32 %13 %12 0;
65 65
    eq w32 %14 %13 0;
66 66
    jmp @and#end9(%14);
67 67
  @and#else8
68 68
    jmp @and#end9(0);
69 69
  @and#end9(w8 %3)
70 70
    br.ne w32 %3 0 @and#then4 @and#else5;
71 71
  @and#then10
72 72
    mul w64 %6 1 4;
73 -
    add w64 %7 %0 %6;
73 +
    add ptr %7 %0 %6;
74 74
    sload w32 %8 %7 0;
75 75
    eq w32 %9 %8 0;
76 76
    jmp @and#end12(%9);
77 77
  @and#else11
78 78
    jmp @and#end12(0);
88 88
    store w8 1 %0 2;
89 89
    store w8 1 %0 3;
90 90
    load w8 %4 %0 0;
91 91
    br.ne w32 %4 0 @and#then7 @and#else8;
92 92
  @and#then1
93 -
    add w64 %11 %0 3;
93 +
    add ptr %11 %0 3;
94 94
    load w8 %12 %11 0;
95 95
    jmp @and#end3(%12);
96 96
  @and#else2
97 97
    jmp @and#end3(0);
98 98
  @and#end3(w8 %1)
99 99
    ret %1;
100 100
  @and#then4
101 -
    add w64 %8 %0 2;
101 +
    add ptr %8 %0 2;
102 102
    load w8 %9 %8 0;
103 103
    jmp @and#end6(%9);
104 104
  @and#else5
105 105
    jmp @and#end6(0);
106 106
  @and#end6(w8 %2)
107 107
    br.ne w32 %2 0 @and#then1 @and#else2;
108 108
  @and#then7
109 -
    add w64 %5 %0 1;
109 +
    add ptr %5 %0 1;
110 110
    load w8 %6 %5 0;
111 111
    jmp @and#end9(%6);
112 112
  @and#else8
113 113
    jmp @and#end9(0);
114 114
  @and#end9(w8 %3)
148 148
  @and#else8
149 149
    jmp @and#end9(0);
150 150
  @and#end9(w8 %2)
151 151
    br.ne w32 %2 0 @and#then4 @and#else5;
152 152
}
153 -
test/tests/array.slice.full.ril +2 -2
1 -
fn w64 $sliceFull(w64 %0, w64 %1) {
1 +
fn ptr $sliceFull(ptr %0, ptr %1) {
2 2
  @entry0
3 3
    reserve %2 16 8;
4 -
    store w64 %1 %2 0;
4 +
    store ptr %1 %2 0;
5 5
    store w32 4 %2 8;
6 6
    store w32 4 %2 12;
7 7
    blit %0 %2 16;
8 8
    ret %0;
9 9
}
test/tests/array.slice.openend.ril +3 -3
1 -
fn w64 $sliceOpenEnd(w64 %0, w64 %1, w32 %2) {
1 +
fn ptr $sliceOpenEnd(ptr %0, ptr %1, w32 %2) {
2 2
  @entry0
3 3
    mul w64 %3 %2 4;
4 -
    add w64 %4 %1 %3;
4 +
    add ptr %4 %1 %3;
5 5
    sub w32 %5 4 %2;
6 6
    reserve %6 16 8;
7 -
    store w64 %4 %6 0;
7 +
    store ptr %4 %6 0;
8 8
    store w32 %5 %6 8;
9 9
    store w32 %5 %6 12;
10 10
    blit %0 %6 16;
11 11
    ret %0;
12 12
}
test/tests/array.slice.openstart.ril +2 -2
1 -
fn w64 $sliceOpenStart(w64 %0, w64 %1, w32 %2) {
1 +
fn ptr $sliceOpenStart(ptr %0, ptr %1, w32 %2) {
2 2
  @entry0
3 3
    reserve %3 16 8;
4 -
    store w64 %1 %3 0;
4 +
    store ptr %1 %3 0;
5 5
    store w32 %2 %3 8;
6 6
    store w32 %2 %3 12;
7 7
    blit %0 %3 16;
8 8
    ret %0;
9 9
}
test/tests/assert.basic.ril +0 -1
25 25
  @assert.fail11
26 26
    unreachable;
27 27
  @assert.ok12
28 28
    ret 0;
29 29
}
30 -
test/tests/average.ril +2 -2
1 -
fn w32 $average(w64 %0) {
1 +
fn w32 $average(ptr %0) {
2 2
  @entry0
3 3
    load w32 %1 %0 8;
4 4
    load w64 %2 %0 0;
5 5
    jmp @loop1(0, 0);
6 6
  @loop1(w32 %3, w32 %7)
7 7
    br.slt w32 %3 %1 @body2 @merge3;
8 8
  @body2
9 9
    mul w64 %4 %3 4;
10 -
    add w64 %5 %2 %4;
10 +
    add ptr %5 %2 %4;
11 11
    load w32 %6 %5 0;
12 12
    add w32 %8 %7 %6;
13 13
    add w32 %9 %3 1;
14 14
    jmp @loop1(%9, %8);
15 15
  @merge3
test/tests/byte.load.store.ril +7 -7
1 -
fn w8 $loadByte(w64 %0) {
1 +
fn w8 $loadByte(ptr %0) {
2 2
  @entry0
3 3
    load w8 %1 %0 0;
4 4
    ret %1;
5 5
}
6 6
7 -
fn w64 $storeByte(w64 %0, w8 %1) {
7 +
fn w64 $storeByte(ptr %0, w8 %1) {
8 8
  @entry0
9 9
    store w8 %1 %0 0;
10 10
    ret;
11 11
}
12 12
13 -
fn w64 $loadStoreByte(w64 %0, w64 %1) {
13 +
fn w64 $loadStoreByte(ptr %0, ptr %1) {
14 14
  @entry0
15 15
    load w8 %2 %0 0;
16 16
    store w8 %2 %1 0;
17 17
    ret;
18 18
}
19 19
20 -
fn w8 $byteArrayAccess(w64 %0, w32 %1) {
20 +
fn w8 $byteArrayAccess(ptr %0, w32 %1) {
21 21
  @entry0
22 22
    br.ult w32 %1 4 @guard#pass1 @guard#trap2;
23 23
  @guard#pass1
24 -
    add w64 %2 %0 %1;
24 +
    add ptr %2 %0 %1;
25 25
    load w8 %3 %2 0;
26 26
    ret %3;
27 27
  @guard#trap2
28 28
    ebreak;
29 29
    unreachable;
30 30
}
31 31
32 -
fn w8 $byteSliceAccess(w64 %0, w32 %1) {
32 +
fn w8 $byteSliceAccess(ptr %0, w32 %1) {
33 33
  @entry0
34 34
    load w32 %2 %0 8;
35 35
    br.ult w32 %1 %2 @guard#pass1 @guard#trap2;
36 36
  @guard#pass1
37 37
    load w64 %3 %0 0;
38 -
    add w64 %4 %3 %1;
38 +
    add ptr %4 %3 %1;
39 39
    load w8 %5 %4 0;
40 40
    ret %5;
41 41
  @guard#trap2
42 42
    ebreak;
43 43
    unreachable;
test/tests/cast.basic.ril +1 -1
43 43
  @entry0
44 44
    sext w16 %1 %0;
45 45
    ret %1;
46 46
}
47 47
48 -
fn w64 $ptrCast(w64 %0) {
48 +
fn ptr $ptrCast(ptr %0) {
49 49
  @entry0
50 50
    ret %0;
51 51
}
test/tests/cast.same.size.ril +0 -1
46 46
  @assert.fail19
47 47
    unreachable;
48 48
  @assert.ok20
49 49
    ret 0;
50 50
}
51 -
test/tests/coercion.implicit.ril +1 -1
30 30
    ret %5;
31 31
  @else2
32 32
    ret 0;
33 33
}
34 34
35 -
fn w64 $optionalLiftReturn(w64 %0, w32 %1) {
35 +
fn ptr $optionalLiftReturn(ptr %0, w32 %1) {
36 36
  @entry0
37 37
    reserve %2 8 4;
38 38
    store w8 1 %2 0;
39 39
    store w32 %1 %2 4;
40 40
    blit %0 %2 8;
test/tests/compound.assign.ril +3 -4
53 53
    reserve %10 12 4;
54 54
    store w32 10 %10 0;
55 55
    store w32 20 %10 4;
56 56
    store w32 30 %10 8;
57 57
    mul w64 %11 1 4;
58 -
    add w64 %12 %10 %11;
58 +
    add ptr %12 %10 %11;
59 59
    sload w32 %13 %12 0;
60 60
    add w32 %14 %13 5;
61 61
    mul w64 %15 1 4;
62 -
    add w64 %16 %10 %15;
62 +
    add ptr %16 %10 %15;
63 63
    store w32 %14 %16 0;
64 64
    mul w64 %17 1 4;
65 -
    add w64 %18 %10 %17;
65 +
    add ptr %18 %10 %17;
66 66
    sload w32 %19 %18 0;
67 67
    br.eq w32 %19 25 @assert.ok22 @assert.fail21;
68 68
  @assert.fail21
69 69
    unreachable;
70 70
  @assert.ok22
85 85
  @assert.fail25
86 86
    unreachable;
87 87
  @assert.ok26
88 88
    ret 0;
89 89
}
90 -
test/tests/cond.iflet.mut.ril +1 -1
1 -
fn w32 $ifLetMut(w64 %0) {
1 +
fn w32 $ifLetMut(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 8 4;
4 4
    blit %1 %0 8;
5 5
    load w8 %2 %1 0;
6 6
    br.ne w32 %2 0 @then1 @else2;
test/tests/cond.iflet.noelse.ril +1 -1
1 -
fn w32 $ifLetNoElse(w64 %0) {
1 +
fn w32 $ifLetNoElse(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 8 4;
4 4
    blit %1 %0 8;
5 5
    load w8 %2 %1 0;
6 6
    br.ne w32 %2 0 @then1 @else2;
test/tests/cond.iflet.optional.ril +1 -1
1 -
fn w32 $ifLetOptional(w64 %0) {
1 +
fn w32 $ifLetOptional(ptr %0) {
2 2
  @entry0
3 3
    br.ne w32 %0 0 @then1 @else2;
4 4
  @then1
5 5
    ret 1;
6 6
  @else2
test/tests/cond.iflet.optional.value.ril +1 -1
1 -
fn w32 $ifLetOptionalValue(w64 %0) {
1 +
fn w32 $ifLetOptionalValue(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 8 4;
4 4
    blit %1 %0 8;
5 5
    load w8 %2 %1 0;
6 6
    br.ne w32 %2 0 @then1 @else2;
test/tests/cond.letelse.mut.ril +1 -1
1 -
fn w32 $letMutElse(w64 %0) {
1 +
fn w32 $letMutElse(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 8 4;
4 4
    blit %1 %0 8;
5 5
    load w8 %2 %1 0;
6 6
    br.ne w32 %2 0 @merge1 @else2;
test/tests/cond.letelse.optional.ril +1 -1
1 -
fn w32 $letElseOptional(w64 %0) {
1 +
fn w32 $letElseOptional(ptr %0) {
2 2
  @entry0
3 3
    br.ne w32 %0 0 @merge1 @else2;
4 4
  @merge1
5 5
    ret 1;
6 6
  @else2
test/tests/const.array.record.ident.ril +1 -1
19 19
  @entry0
20 20
    copy %0 $POINTS;
21 21
    sload w32 %1 %0 0;
22 22
    copy %2 $POINTS;
23 23
    mul w64 %3 1 8;
24 -
    add w64 %4 %2 %3;
24 +
    add ptr %4 %2 %3;
25 25
    sload w32 %5 %4 4;
26 26
    add w32 %6 %1 %5;
27 27
    ret %6;
28 28
}
test/tests/const.array.repeat.record.ril +2 -2
11 11
  @entry0
12 12
    copy %0 $POINTS;
13 13
    sload w32 %1 %0 0;
14 14
    copy %2 $POINTS;
15 15
    mul w64 %3 1 8;
16 -
    add w64 %4 %2 %3;
16 +
    add ptr %4 %2 %3;
17 17
    sload w32 %5 %4 4;
18 18
    add w32 %6 %1 %5;
19 19
    copy %7 $POINTS;
20 20
    mul w64 %8 2 8;
21 -
    add w64 %9 %7 %8;
21 +
    add ptr %9 %7 %8;
22 22
    sload w32 %10 %9 0;
23 23
    add w32 %11 %6 %10;
24 24
    ret %11;
25 25
}
test/tests/const.array.ril +1 -2
11 11
    jmp @loop1(0, 0);
12 12
  @loop1(w32 %1, w32 %5)
13 13
    br.slt w32 %1 4 @body2 @merge3;
14 14
  @body2
15 15
    mul w64 %2 %1 4;
16 -
    add w64 %3 %0 %2;
16 +
    add ptr %3 %0 %2;
17 17
    sload w32 %4 %3 0;
18 18
    add w32 %6 %5 %4;
19 19
    add w32 %7 %1 1;
20 20
    jmp @loop1(%7, %6);
21 21
  @merge3
22 22
    sub w32 %8 %5 10;
23 23
    ret %8;
24 24
}
25 -
test/tests/const.array.strings.slice.ril +2 -2
22 22
  @entry0
23 23
    copy %0 $WORDS;
24 24
    load w32 %1 %0 8;
25 25
    copy %2 $WORDS;
26 26
    mul w64 %3 1 16;
27 -
    add w64 %4 %2 %3;
27 +
    add ptr %4 %2 %3;
28 28
    load w32 %5 %4 8;
29 29
    add w32 %6 %1 %5;
30 30
    copy %7 $WORDS;
31 31
    mul w64 %8 2 16;
32 -
    add w64 %9 %7 %8;
32 +
    add ptr %9 %7 %8;
33 33
    load w32 %10 %9 8;
34 34
    add w32 %11 %6 %10;
35 35
    ret %11;
36 36
}
test/tests/const.record.ctor.ril +0 -1
20 20
  @assert.fail1
21 21
    unreachable;
22 22
  @assert.ok2
23 23
    ret 0;
24 24
}
25 -
test/tests/const.record.mutcopy.ril +1 -1
4 4
5 5
data $SCRATCH2 align 1 {
6 6
    w8 31;
7 7
}
8 8
9 -
fn w64 $test(w64 %0) {
9 +
fn ptr $test(ptr %0) {
10 10
  @entry0
11 11
    copy %1 $SCRATCH1;
12 12
    reserve %2 1 1;
13 13
    blit %2 %1 1;
14 14
    load w8 %3 %0 0;
test/tests/const.record.nested.ril +2 -2
16 16
}
17 17
18 18
fn w8 $getInnerA() {
19 19
  @entry0
20 20
    copy %0 $O;
21 -
    add w64 %1 %0 4;
21 +
    add ptr %1 %0 4;
22 22
    load w8 %2 %1 0;
23 23
    ret %2;
24 24
}
25 25
26 26
fn w32 $getInnerB() {
27 27
  @entry0
28 28
    copy %0 $O;
29 -
    add w64 %1 %0 4;
29 +
    add ptr %1 %0 4;
30 30
    sload w32 %2 %1 4;
31 31
    ret %2;
32 32
}
33 33
34 34
fn w8 $getY() {
test/tests/const.record.ril +0 -1
11 11
    sload w32 %3 %2 4;
12 12
    add w32 %4 %1 %3;
13 13
    sub w32 %5 %4 7;
14 14
    ret %5;
15 15
}
16 -
test/tests/const.slice.of.slices.ril +2 -2
38 38
  @entry0
39 39
    copy %0 $GROUPS;
40 40
    load w32 %1 %0 8;
41 41
    copy %2 $GROUPS;
42 42
    mul w64 %3 1 16;
43 -
    add w64 %4 %2 %3;
43 +
    add ptr %4 %2 %3;
44 44
    load w32 %5 %4 8;
45 45
    add w32 %6 %1 %5;
46 46
    copy %7 $GROUPS;
47 47
    load w32 %8 %7 8;
48 48
    br.ult w32 1 %8 @guard#pass1 @guard#trap2;
49 49
  @guard#pass1
50 50
    load w64 %9 %7 0;
51 51
    mul w64 %10 1 16;
52 -
    add w64 %11 %9 %10;
52 +
    add ptr %11 %9 %10;
53 53
    load w32 %12 %11 8;
54 54
    add w32 %13 %6 %12;
55 55
    ret %13;
56 56
  @guard#trap2
57 57
    ebreak;
test/tests/const.string.ril +1 -1
10 10
11 11
fn w32 $getLen() {
12 12
  @entry0
13 13
    copy %0 $HELLO$0;
14 14
    reserve %1 16 8;
15 -
    store w64 %0 %1 0;
15 +
    store ptr %0 %1 0;
16 16
    store w32 5 %1 8;
17 17
    store w32 5 %1 12;
18 18
    load w32 %2 %1 8;
19 19
    ret %2;
20 20
}
test/tests/const.string.scoped.names.ril +3 -3
29 29
30 30
fn w32 $totalLen() {
31 31
  @entry0
32 32
    copy %0 $HELLO1$0;
33 33
    reserve %1 16 8;
34 -
    store w64 %0 %1 0;
34 +
    store ptr %0 %1 0;
35 35
    store w32 5 %1 8;
36 36
    store w32 5 %1 12;
37 37
    load w32 %2 %1 8;
38 38
    copy %3 $HELLO1$0;
39 39
    reserve %4 16 8;
40 -
    store w64 %3 %4 0;
40 +
    store ptr %3 %4 0;
41 41
    store w32 5 %4 8;
42 42
    store w32 5 %4 12;
43 43
    load w32 %5 %4 8;
44 44
    add w32 %6 %2 %5;
45 45
    copy %7 $MSGS;
46 46
    load w32 %8 %7 8;
47 47
    add w32 %9 %6 %8;
48 48
    copy %10 $MSGS;
49 49
    mul w64 %11 1 16;
50 -
    add w64 %12 %10 %11;
50 +
    add ptr %12 %10 %11;
51 51
    load w32 %13 %12 8;
52 52
    add w32 %14 %9 %13;
53 53
    ret %14;
54 54
}
test/tests/const.union.payload.ctor.ril +0 -1
30 30
  @arm8
31 31
    jmp @case9;
32 32
  @case9
33 33
    ret 3;
34 34
}
35 -
test/tests/const.union.record.literal.ril +1 -2
17 17
  @case2
18 18
    ret 1;
19 19
  @arm3
20 20
    jmp @case4;
21 21
  @case4
22 -
    add w64 %3 %1 4;
22 +
    add ptr %3 %1 4;
23 23
    sload w32 %4 %3 0;
24 24
    sload w32 %5 %3 4;
25 25
    add w32 %6 %4 %5;
26 26
    br.eq w32 %6 42 @assert.ok7 @assert.fail6;
27 27
  @assert.fail6
29 29
  @assert.ok7
30 30
    jmp @merge8;
31 31
  @merge8
32 32
    ret 0;
33 33
}
34 -
test/tests/error.catch.return.ril +2 -2
1 -
fn w64 $fallible(w64 %0, w8 %1) {
1 +
fn ptr $fallible(ptr %0, w8 %1) {
2 2
  @entry0
3 3
    br.ne w32 %1 0 @then1 @merge2;
4 4
  @then1
5 5
    reserve %2 1 1;
6 6
    store w8 0 %2 0;
18 18
}
19 19
20 20
fn w32 $caller(w8 %0) {
21 21
  @entry0
22 22
    reserve %1 12 8;
23 -
    call w64 %2 $fallible(%1, %0);
23 +
    call ptr %2 $fallible(%1, %0);
24 24
    load w64 %3 %2 0;
25 25
    reserve %4 4 4;
26 26
    br.ne w32 %3 0 @err2 @ok1;
27 27
  @ok1
28 28
    sload w32 %5 %2 8;
test/tests/field.aggregate.ril +3 -3
8 8
    store w32 30 %0 8;
9 9
    sload w32 %2 %0 4;
10 10
    ret %2;
11 11
}
12 12
13 -
fn w64 $accessUnionField() {
13 +
fn ptr $accessUnionField() {
14 14
  @entry0
15 15
    reserve %0 12 4;
16 16
    reserve %1 4 4;
17 17
    store w32 42 %1 0;
18 18
    reserve %2 8 4;
19 19
    store w8 1 %2 0;
20 -
    add w64 %3 %2 4;
20 +
    add ptr %3 %2 4;
21 21
    blit %3 %1 4;
22 22
    blit %0 %2 8;
23 23
    store w32 99 %0 8;
24 24
    load w64 %4 %0 0;
25 25
    ret %4;
31 31
    store w32 1 %0 0;
32 32
    store w32 2 %0 4;
33 33
    store w32 3 %0 8;
34 34
    reserve %1 24 8;
35 35
    reserve %2 16 8;
36 -
    store w64 %0 %2 0;
36 +
    store ptr %0 %2 0;
37 37
    store w32 3 %2 8;
38 38
    store w32 3 %2 12;
39 39
    blit %1 %2 16;
40 40
    store w32 77 %1 16;
41 41
    load w32 %3 %1 8;
test/tests/fn.ptr.assign.ril +1 -1
2 2
  @entry0
3 3
    add w32 %2 %0 %1;
4 4
    ret %2;
5 5
}
6 6
7 -
fn w64 $assignFnPtr() {
7 +
fn ptr $assignFnPtr() {
8 8
  @entry0
9 9
    copy %0 $add;
10 10
    ret %0;
11 11
}
test/tests/fn.ptr.param.ril +1 -1
2 2
  @entry0
3 3
    add w32 %2 %0 %1;
4 4
    ret %2;
5 5
}
6 6
7 -
fn w32 $apply(w64 %0, w32 %1, w32 %2) {
7 +
fn w32 $apply(ptr %0, w32 %1, w32 %2) {
8 8
  @entry0
9 9
    call w32 %3 %0(%1, %2);
10 10
    ret %3;
11 11
}
12 12
test/tests/let.copy.semantics.ril +4 -4
1 -
fn w64 $makePoint() {
1 +
fn ptr $makePoint() {
2 2
  @entry0
3 3
    reserve %0 8 4;
4 4
    store w32 1 %0 0;
5 5
    store w32 2 %0 4;
6 6
    load w64 %1 %0 0;
7 7
    ret %1;
8 8
}
9 9
10 10
fn w32 $letFromCall() {
11 11
  @entry0
12 -
    call w64 %0 $makePoint();
12 +
    call ptr %0 $makePoint();
13 13
    reserve %1 8 8;
14 14
    store w64 %0 %1 0;
15 15
    sload w32 %2 %1 0;
16 16
    ret %2;
17 17
}
38 38
    store w32 2 %1 4;
39 39
    blit %0 %1 8;
40 40
    reserve %2 8 4;
41 41
    store w32 3 %2 0;
42 42
    store w32 4 %2 4;
43 -
    add w64 %3 %0 8;
43 +
    add ptr %3 %0 8;
44 44
    blit %3 %2 8;
45 45
    mul w64 %4 1 8;
46 -
    add w64 %5 %0 %4;
46 +
    add ptr %5 %0 %4;
47 47
    reserve %6 8 4;
48 48
    blit %6 %5 8;
49 49
    sload w32 %7 %6 0;
50 50
    ret %7;
51 51
}
test/tests/let.placeholder.ril +1 -1
1 1
fn w32 $placeholder() {
2 2
  @entry0
3 3
    ret 1;
4 4
}
5 5
6 -
fn w32 $placeholderWithSideEffect(w64 %0) {
6 +
fn w32 $placeholderWithSideEffect(ptr %0) {
7 7
  @entry0
8 8
    sload w32 %1 %0 0;
9 9
    ret 0;
10 10
}
11 11
test/tests/literal.slice.bytes.ril +1 -1
6 6
7 7
fn w32 $byteSlice() {
8 8
  @entry0
9 9
    copy %0 $byteSlice0;
10 10
    reserve %1 16 8;
11 -
    store w64 %0 %1 0;
11 +
    store ptr %0 %1 0;
12 12
    store w32 3 %1 8;
13 13
    store w32 3 %1 12;
14 14
    load w32 %2 %1 8;
15 15
    ret %2;
16 16
}
test/tests/literal.slice.dedup.ril +2 -2
6 6
7 7
fn w32 $dedupSlice() {
8 8
  @entry0
9 9
    copy %0 $dedupSlice0;
10 10
    reserve %1 16 8;
11 -
    store w64 %0 %1 0;
11 +
    store ptr %0 %1 0;
12 12
    store w32 3 %1 8;
13 13
    store w32 3 %1 12;
14 14
    copy %2 $dedupSlice0;
15 15
    reserve %3 16 8;
16 -
    store w64 %2 %3 0;
16 +
    store ptr %2 %3 0;
17 17
    store w32 3 %3 8;
18 18
    store w32 3 %3 12;
19 19
    load w32 %4 %1 8;
20 20
    load w32 %5 %3 8;
21 21
    add w32 %6 %4 %5;
test/tests/literal.slice.empty.ril +1 -1
1 1
fn w32 $emptySlice() {
2 2
  @entry0
3 3
    reserve %0 16 8;
4 -
    store w64 0 %0 0;
4 +
    store ptr 0 %0 0;
5 5
    store w32 0 %0 8;
6 6
    store w32 0 %0 12;
7 7
    load w32 %1 %0 8;
8 8
    ret %1;
9 9
}
test/tests/literal.slice.multi.ril +2 -2
11 11
12 12
fn w32 $multiSlice() {
13 13
  @entry0
14 14
    copy %0 $multiSlice0;
15 15
    reserve %1 16 8;
16 -
    store w64 %0 %1 0;
16 +
    store ptr %0 %1 0;
17 17
    store w32 2 %1 8;
18 18
    store w32 2 %1 12;
19 19
    copy %2 $multiSlice1;
20 20
    reserve %3 16 8;
21 -
    store w64 %2 %3 0;
21 +
    store ptr %2 %3 0;
22 22
    store w32 3 %3 8;
23 23
    store w32 3 %3 12;
24 24
    load w32 %4 %1 8;
25 25
    load w32 %5 %3 8;
26 26
    add w32 %6 %4 %5;
test/tests/literal.slice.record.ril +2 -2
7 7
8 8
fn w32 $localSliceOfRecords() {
9 9
  @entry0
10 10
    copy %0 $localSliceOfRecords0;
11 11
    reserve %1 16 8;
12 -
    store w64 %0 %1 0;
12 +
    store ptr %0 %1 0;
13 13
    store w32 2 %1 8;
14 14
    store w32 2 %1 12;
15 15
    load w32 %2 %1 8;
16 16
    br.ult w32 0 %2 @guard#pass1 @guard#trap2;
17 17
  @guard#pass1
23 23
    ebreak;
24 24
    unreachable;
25 25
  @guard#pass3
26 26
    load w64 %6 %1 0;
27 27
    mul w64 %7 1 8;
28 -
    add w64 %8 %6 %7;
28 +
    add ptr %8 %6 %7;
29 29
    sload w32 %9 %8 4;
30 30
    add w32 %10 %4 %9;
31 31
    ret %10;
32 32
  @guard#trap4
33 33
    ebreak;
test/tests/literal.slice.ril +1 -1
6 6
7 7
fn w32 $sliceLiteral() {
8 8
  @entry0
9 9
    copy %0 $sliceLiteral0;
10 10
    reserve %1 16 8;
11 -
    store w64 %0 %1 0;
11 +
    store ptr %0 %1 0;
12 12
    store w32 3 %1 8;
13 13
    store w32 3 %1 12;
14 14
    load w32 %2 %1 8;
15 15
    ret %2;
16 16
}
test/tests/literal.string.dedup.ril +2 -2
4 4
5 5
fn w32 $dedupString() {
6 6
  @entry0
7 7
    copy %0 $dedupString0;
8 8
    reserve %1 16 8;
9 -
    store w64 %0 %1 0;
9 +
    store ptr %0 %1 0;
10 10
    store w32 5 %1 8;
11 11
    store w32 5 %1 12;
12 12
    copy %2 $dedupString0;
13 13
    reserve %3 16 8;
14 -
    store w64 %2 %3 0;
14 +
    store ptr %2 %3 0;
15 15
    store w32 5 %3 8;
16 16
    store w32 5 %3 12;
17 17
    load w32 %4 %1 8;
18 18
    load w32 %5 %3 8;
19 19
    add w32 %6 %4 %5;
test/tests/literal.string.empty.ril +1 -1
4 4
5 5
fn w32 $emptyString() {
6 6
  @entry0
7 7
    copy %0 $emptyString0;
8 8
    reserve %1 16 8;
9 -
    store w64 %0 %1 0;
9 +
    store ptr %0 %1 0;
10 10
    store w32 0 %1 8;
11 11
    store w32 0 %1 12;
12 12
    load w32 %2 %1 8;
13 13
    ret %2;
14 14
}
test/tests/literal.string.fns.ril +2 -2
8 8
9 9
fn w32 $first() {
10 10
  @entry0
11 11
    copy %0 $first0;
12 12
    reserve %1 16 8;
13 -
    store w64 %0 %1 0;
13 +
    store ptr %0 %1 0;
14 14
    store w32 3 %1 8;
15 15
    store w32 3 %1 12;
16 16
    load w32 %2 %1 8;
17 17
    ret %2;
18 18
}
19 19
20 20
fn w32 $second() {
21 21
  @entry0
22 22
    copy %0 $second0;
23 23
    reserve %1 16 8;
24 -
    store w64 %0 %1 0;
24 +
    store ptr %0 %1 0;
25 25
    store w32 3 %1 8;
26 26
    store w32 3 %1 12;
27 27
    load w32 %2 %1 8;
28 28
    ret %2;
29 29
}
test/tests/literal.string.multi.ril +2 -2
8 8
9 9
fn w32 $multiString() {
10 10
  @entry0
11 11
    copy %0 $multiString0;
12 12
    reserve %1 16 8;
13 -
    store w64 %0 %1 0;
13 +
    store ptr %0 %1 0;
14 14
    store w32 5 %1 8;
15 15
    store w32 5 %1 12;
16 16
    copy %2 $multiString1;
17 17
    reserve %3 16 8;
18 -
    store w64 %2 %3 0;
18 +
    store ptr %2 %3 0;
19 19
    store w32 5 %3 8;
20 20
    store w32 5 %3 12;
21 21
    load w32 %4 %1 8;
22 22
    load w32 %5 %3 8;
23 23
    add w32 %6 %4 %5;
test/tests/literal.string.ril +1 -1
4 4
5 5
fn w32 $stringLen() {
6 6
  @entry0
7 7
    copy %0 $stringLen0;
8 8
    reserve %1 16 8;
9 -
    store w64 %0 %1 0;
9 +
    store ptr %0 %1 0;
10 10
    store w32 5 %1 8;
11 11
    store w32 5 %1 12;
12 12
    load w32 %2 %1 8;
13 13
    ret %2;
14 14
}
test/tests/loop.for.array.ril +2 -2
1 -
fn w32 $forArrayIndexed(w64 %0) {
1 +
fn w32 $forArrayIndexed(ptr %0) {
2 2
  @entry0
3 3
    jmp @loop1(0, 0);
4 4
  @loop1(w32 %1, w32 %5)
5 5
    br.slt w32 %1 3 @body2 @merge3;
6 6
  @body2
7 7
    mul w64 %2 %1 4;
8 -
    add w64 %3 %0 %2;
8 +
    add ptr %3 %0 %2;
9 9
    sload w32 %4 %3 0;
10 10
    add w32 %6 %4 %1;
11 11
    add w32 %7 %5 %6;
12 12
    add w32 %8 %1 1;
13 13
    jmp @loop1(%8, %7);
test/tests/loop.for.continue.ril +2 -2
15 15
  @step6(w32 %6)
16 16
    add w32 %5 %1 1;
17 17
    jmp @loop1(%5, %6);
18 18
}
19 19
20 -
fn w32 $forContinueArray(w64 %0) {
20 +
fn w32 $forContinueArray(ptr %0) {
21 21
  @entry0
22 22
    jmp @loop1(0, 0);
23 23
  @loop1(w32 %1, w32 %5)
24 24
    br.slt w32 %1 4 @body2 @merge3;
25 25
  @body2
26 26
    mul w64 %2 %1 4;
27 -
    add w64 %3 %0 %2;
27 +
    add ptr %3 %0 %2;
28 28
    sload w32 %4 %3 0;
29 29
    br.eq w32 %4 0 @then4 @merge5;
30 30
  @merge3
31 31
    ret %5;
32 32
  @then4
test/tests/loop.for.placeholder.ril +1 -1
9 9
    jmp @loop1(%4, %3);
10 10
  @merge3
11 11
    ret %2;
12 12
}
13 13
14 -
fn w32 $forPlaceholderArray(w64 %0) {
14 +
fn w32 $forPlaceholderArray(ptr %0) {
15 15
  @entry0
16 16
    jmp @loop1(0, 0);
17 17
  @loop1(w32 %1, w32 %2)
18 18
    br.slt w32 %1 4 @body2 @merge3;
19 19
  @body2
test/tests/loop.for.slice.ril +2 -2
1 -
fn w32 $forSliceIndexed(w64 %0) {
1 +
fn w32 $forSliceIndexed(ptr %0) {
2 2
  @entry0
3 3
    load w32 %1 %0 8;
4 4
    load w64 %2 %0 0;
5 5
    jmp @loop1(0, 0);
6 6
  @loop1(w32 %3, w32 %7)
7 7
    br.slt w32 %3 %1 @body2 @merge3;
8 8
  @body2
9 9
    mul w64 %4 %3 4;
10 -
    add w64 %5 %2 %4;
10 +
    add ptr %5 %2 %4;
11 11
    sload w32 %6 %5 0;
12 12
    add w32 %8 %6 %3;
13 13
    add w32 %9 %7 %8;
14 14
    add w32 %10 %3 1;
15 15
    jmp @loop1(%10, %9);
test/tests/loop.mutable.ril +3 -3
5 5
    ret %0;
6 6
  @merge2
7 7
    ret %1;
8 8
}
9 9
10 -
fn w32 $computeMaxAlign(w64 %0) {
10 +
fn w32 $computeMaxAlign(ptr %0) {
11 11
  @entry0
12 12
    load w32 %1 %0 8;
13 13
    jmp @loop1(0, 1, %0);
14 -
  @loop1(w32 %2, w32 %3, w64 %4)
14 +
  @loop1(w32 %2, w32 %3, ptr %4)
15 15
    br.ult w32 %2 %1 @body2 @merge3;
16 16
  @body2
17 17
    load w32 %5 %4 8;
18 18
    br.ult w32 %2 %5 @guard#pass4 @guard#trap5;
19 19
  @merge3
20 20
    ret %3;
21 21
  @guard#pass4
22 22
    load w64 %6 %4 0;
23 23
    mul w64 %7 %2 4;
24 -
    add w64 %8 %6 %7;
24 +
    add ptr %8 %6 %7;
25 25
    load w32 %9 %8 0;
26 26
    call w32 %10 $max(%3, %9);
27 27
    add w32 %11 %2 1;
28 28
    jmp @loop1(%11, %10, %4);
29 29
  @guard#trap5
test/tests/loop.whilelet.optional.ril +2 -2
1 -
fn w32 $whileLetOptional(w64 %0) {
1 +
fn w32 $whileLetOptional(ptr %0) {
2 2
  @entry0
3 3
    jmp @while1(%0, 0);
4 -
  @while1(w64 %1, w32 %2)
4 +
  @while1(ptr %1, w32 %2)
5 5
    br.ne w32 %1 0 @body2 @merge3(%2);
6 6
  @body2
7 7
    add w32 %3 %2 1;
8 8
    jmp @merge3(%3);
9 9
  @merge3(w32 %4)
test/tests/loop.whilelet.union.ril +2 -2
1 -
fn w32 $sumWhileLet(w64 %0) {
1 +
fn w32 $sumWhileLet(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 8 4;
4 4
    blit %1 %0 8;
5 5
    jmp @while1(%1, 0);
6 -
  @while1(w64 %2, w32 %6)
6 +
  @while1(ptr %2, w32 %6)
7 7
    reserve %3 8 4;
8 8
    blit %3 %2 8;
9 9
    load w8 %4 %3 0;
10 10
    br.eq w8 %4 1 @body2 @merge3;
11 11
  @body2
test/tests/match.multi.seal.ril +0 -1
44 44
  @assert.fail7
45 45
    unreachable;
46 46
  @assert.ok8
47 47
    ret 0;
48 48
}
49 -
test/tests/match.nested.iflet.ril +7 -8
1 -
fn w32 $ifLetNested(w64 %0) {
1 +
fn w32 $ifLetNested(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 16 4;
4 4
    blit %1 %0 16;
5 5
    load w8 %2 %1 0;
6 6
    br.eq w8 %2 0 @then1 @else2;
7 7
  @then1
8 -
    add w64 %3 %1 4;
8 +
    add ptr %3 %1 4;
9 9
    sload w32 %4 %3 0;
10 10
    sload w32 %5 %3 4;
11 11
    sload w32 %6 %3 8;
12 12
    add w32 %7 %4 %5;
13 13
    add w32 %8 %7 %6;
16 16
    jmp @merge3;
17 17
  @merge3
18 18
    ret -1;
19 19
}
20 20
21 -
fn w32 $ifLetNestedUnion(w64 %0) {
21 +
fn w32 $ifLetNestedUnion(ptr %0) {
22 22
  @entry0
23 23
    reserve %1 12 4;
24 24
    blit %1 %0 12;
25 25
    load w8 %2 %1 0;
26 26
    br.eq w8 %2 0 @then1 @else2;
27 27
  @then1
28 -
    add w64 %3 %1 4;
28 +
    add ptr %3 %1 4;
29 29
    load w8 %4 %3 0;
30 30
    br.eq w8 %4 0 @nest3 @else2;
31 31
  @else2
32 32
    jmp @merge5;
33 33
  @nest3
37 37
    ret %5;
38 38
  @merge5
39 39
    ret 0;
40 40
}
41 41
42 -
fn w32 $ifLetPlaceholder(w64 %0) {
42 +
fn w32 $ifLetPlaceholder(ptr %0) {
43 43
  @entry0
44 44
    reserve %1 16 4;
45 45
    blit %1 %0 16;
46 46
    load w8 %2 %1 0;
47 47
    br.eq w8 %2 0 @then1 @else2;
48 48
  @then1
49 -
    add w64 %3 %1 4;
49 +
    add ptr %3 %1 4;
50 50
    sload w32 %4 %3 0;
51 51
    ret %4;
52 52
  @else2
53 53
    jmp @merge3;
54 54
  @merge3
60 60
    reserve %0 16 4;
61 61
    store w8 0 %0 0;
62 62
    reserve %1 8 4;
63 63
    store w32 10 %1 0;
64 64
    store w32 20 %1 4;
65 -
    add w64 %2 %0 4;
65 +
    add ptr %2 %0 4;
66 66
    blit %2 %1 8;
67 67
    store w32 30 %0 12;
68 68
    call w32 %3 $ifLetNested(%0);
69 69
    br.eq w32 %3 60 @assert.ok2 @assert.fail1;
70 70
  @assert.fail1
114 114
  @assert.fail13
115 115
    unreachable;
116 116
  @assert.ok14
117 117
    ret 0;
118 118
}
119 -
test/tests/match.nested.pattern.ril +30 -31
1 -
fn w32 $testNestedMatch(w64 %0) {
1 +
fn w32 $testNestedMatch(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 16 4;
4 4
    blit %1 %0 16;
5 5
    jmp @arm1;
6 6
  @arm1
7 7
    load w8 %2 %1 0;
8 8
    br.eq w8 %2 0 @case2 @arm3;
9 9
  @case2
10 -
    add w64 %3 %1 4;
10 +
    add ptr %3 %1 4;
11 11
    sload w32 %4 %3 0;
12 12
    sload w32 %5 %3 4;
13 13
    sload w32 %6 %3 8;
14 14
    add w32 %7 %4 %5;
15 15
    add w32 %8 %7 %6;
18 18
    jmp @case4;
19 19
  @case4
20 20
    ret 0;
21 21
}
22 22
23 -
fn w32 $testNestedIfLetCase(w64 %0) {
23 +
fn w32 $testNestedIfLetCase(ptr %0) {
24 24
  @entry0
25 25
    reserve %1 16 4;
26 26
    blit %1 %0 16;
27 27
    load w8 %2 %1 0;
28 28
    br.eq w8 %2 0 @then1 @else2;
29 29
  @then1
30 -
    add w64 %3 %1 4;
30 +
    add ptr %3 %1 4;
31 31
    sload w32 %4 %3 0;
32 32
    sload w32 %5 %3 4;
33 33
    sload w32 %6 %3 8;
34 34
    add w32 %7 %4 %5;
35 35
    add w32 %8 %7 %6;
38 38
    jmp @merge3;
39 39
  @merge3
40 40
    ret 0;
41 41
}
42 42
43 -
fn w32 $testNestedPlaceholder(w64 %0) {
43 +
fn w32 $testNestedPlaceholder(ptr %0) {
44 44
  @entry0
45 45
    reserve %1 16 4;
46 46
    blit %1 %0 16;
47 47
    jmp @arm1;
48 48
  @arm1
49 49
    load w8 %2 %1 0;
50 50
    br.eq w8 %2 0 @case2 @arm3;
51 51
  @case2
52 -
    add w64 %3 %1 4;
52 +
    add ptr %3 %1 4;
53 53
    sload w32 %4 %3 0;
54 54
    sload w32 %5 %3 8;
55 55
    add w32 %6 %4 %5;
56 56
    ret %6;
57 57
  @arm3
58 58
    jmp @case4;
59 59
  @case4
60 60
    ret 0;
61 61
}
62 62
63 -
fn w32 $testDeepNesting(w64 %0) {
63 +
fn w32 $testDeepNesting(ptr %0) {
64 64
  @entry0
65 65
    reserve %1 16 4;
66 66
    blit %1 %0 16;
67 67
    jmp @arm1;
68 68
  @arm1
69 69
    load w8 %2 %1 0;
70 70
    br.eq w8 %2 0 @case2 @arm3;
71 71
  @case2
72 -
    add w64 %3 %1 4;
72 +
    add ptr %3 %1 4;
73 73
    sload w32 %4 %3 0;
74 74
    sload w32 %5 %3 4;
75 75
    sload w32 %6 %3 8;
76 76
    add w32 %7 %4 %5;
77 77
    add w32 %8 %7 %6;
80 80
    jmp @case4;
81 81
  @case4
82 82
    ret 0;
83 83
}
84 84
85 -
fn w32 $testNestedUnionLiteral(w64 %0) {
85 +
fn w32 $testNestedUnionLiteral(ptr %0) {
86 86
  @entry0
87 87
    reserve %1 12 4;
88 88
    blit %1 %0 12;
89 89
    jmp @arm1;
90 90
  @arm1
91 91
    load w8 %2 %1 0;
92 92
    br.eq w8 %2 0 @case2 @arm3;
93 93
  @case2
94 -
    add w64 %3 %1 4;
94 +
    add ptr %3 %1 4;
95 95
    load w8 %4 %3 0;
96 96
    br.eq w8 %4 0 @nest4 @arm3;
97 97
  @arm3
98 98
    load w8 %6 %1 0;
99 99
    br.eq w8 %6 0 @case6 @arm7;
101 101
    sload w32 %5 %3 4;
102 102
    jmp @case5;
103 103
  @case5
104 104
    ret %5;
105 105
  @case6
106 -
    add w64 %7 %1 4;
106 +
    add ptr %7 %1 4;
107 107
    load w8 %8 %7 0;
108 108
    br.eq w8 %8 1 @nest8 @arm7;
109 109
  @arm7
110 110
    jmp @else10;
111 111
  @nest8
116 116
    ret %10;
117 117
  @else10
118 118
    ret 0;
119 119
}
120 120
121 -
fn w32 $testMixedNesting(w64 %0) {
121 +
fn w32 $testMixedNesting(ptr %0) {
122 122
  @entry0
123 123
    reserve %1 20 4;
124 124
    blit %1 %0 20;
125 125
    jmp @arm1;
126 126
  @arm1
127 127
    load w8 %2 %1 0;
128 128
    br.eq w8 %2 0 @case2 @arm3;
129 129
  @case2
130 -
    add w64 %3 %1 4;
130 +
    add ptr %3 %1 4;
131 131
    sload w32 %4 %3 0;
132 132
    sload w32 %5 %3 4;
133 133
    sload w32 %6 %3 8;
134 134
    add w32 %7 %4 %5;
135 135
    add w32 %8 %7 %6;
136 136
    ret %8;
137 137
  @arm3
138 138
    load w8 %9 %1 0;
139 139
    br.eq w8 %9 1 @case4 @arm5;
140 140
  @case4
141 -
    add w64 %10 %1 4;
141 +
    add ptr %10 %1 4;
142 142
    sload w32 %11 %10 0;
143 143
    sload w32 %12 %10 4;
144 -
    add w64 %13 %10 8;
144 +
    add ptr %13 %10 8;
145 145
    sload w32 %14 %13 0;
146 146
    sload w32 %15 %13 4;
147 147
    add w32 %16 %11 %12;
148 148
    add w32 %17 %16 %14;
149 149
    add w32 %18 %17 %15;
152 152
    jmp @case6;
153 153
  @case6
154 154
    ret 0;
155 155
}
156 156
157 -
fn w32 $testNestedUnionInRecord(w64 %0) {
157 +
fn w32 $testNestedUnionInRecord(ptr %0) {
158 158
  @entry0
159 159
    reserve %1 20 4;
160 160
    blit %1 %0 20;
161 161
    jmp @arm1;
162 162
  @arm1
163 163
    load w8 %2 %1 0;
164 164
    br.eq w8 %2 0 @case2 @arm3;
165 165
  @case2
166 -
    add w64 %3 %1 4;
166 +
    add ptr %3 %1 4;
167 167
    load w8 %4 %3 0;
168 168
    br.eq w8 %4 0 @nest4 @arm3;
169 169
  @arm3
170 170
    load w8 %11 %1 0;
171 171
    br.eq w8 %11 0 @case6 @arm7;
172 172
  @nest4
173 -
    add w64 %5 %3 4;
173 +
    add ptr %5 %3 4;
174 174
    sload w32 %6 %5 0;
175 175
    sload w32 %7 %5 4;
176 176
    sload w32 %8 %3 12;
177 177
    jmp @case5;
178 178
  @case5
179 179
    add w32 %9 %6 %7;
180 180
    add w32 %10 %9 %8;
181 181
    ret %10;
182 182
  @case6
183 -
    add w64 %12 %1 4;
183 +
    add ptr %12 %1 4;
184 184
    load w8 %13 %12 0;
185 185
    br.eq w8 %13 1 @nest8 @arm7;
186 186
  @arm7
187 187
    jmp @else10;
188 188
  @nest8
191 191
    ret -1;
192 192
  @else10
193 193
    ret 0;
194 194
}
195 195
196 -
fn w32 $testPartialNesting(w64 %0) {
196 +
fn w32 $testPartialNesting(ptr %0) {
197 197
  @entry0
198 198
    reserve %1 20 4;
199 199
    blit %1 %0 20;
200 200
    jmp @arm1;
201 201
  @arm1
202 202
    load w8 %2 %1 0;
203 203
    br.eq w8 %2 0 @case2 @arm3;
204 204
  @case2
205 -
    add w64 %3 %1 4;
205 +
    add ptr %3 %1 4;
206 206
    sload w32 %4 %3 8;
207 207
    sload w32 %5 %3 0;
208 208
    sload w32 %6 %3 4;
209 209
    add w32 %7 %5 %6;
210 210
    add w32 %8 %7 %4;
211 211
    ret %8;
212 212
  @arm3
213 213
    load w8 %9 %1 0;
214 214
    br.eq w8 %9 1 @case4 @arm5;
215 215
  @case4
216 -
    add w64 %10 %1 4;
217 -
    add w64 %11 %10 8;
216 +
    add ptr %10 %1 4;
217 +
    add ptr %11 %10 8;
218 218
    sload w32 %12 %11 0;
219 219
    sload w32 %13 %11 4;
220 220
    sload w32 %14 %10 0;
221 221
    sload w32 %15 %10 4;
222 222
    add w32 %16 %14 %15;
234 234
    reserve %0 16 4;
235 235
    store w8 0 %0 0;
236 236
    reserve %1 8 4;
237 237
    store w32 10 %1 0;
238 238
    store w32 20 %1 4;
239 -
    add w64 %2 %0 4;
239 +
    add ptr %2 %0 4;
240 240
    blit %2 %1 8;
241 241
    store w32 30 %0 12;
242 242
    call w32 %3 $testNestedMatch(%0);
243 243
    br.eq w32 %3 60 @assert.ok2 @assert.fail1;
244 244
  @assert.fail1
273 273
    reserve %11 8 4;
274 274
    reserve %12 4 4;
275 275
    store w32 100 %12 0;
276 276
    blit %11 %12 4;
277 277
    store w32 200 %11 4;
278 -
    add w64 %13 %10 4;
278 +
    add ptr %13 %10 4;
279 279
    blit %13 %11 8;
280 280
    store w32 300 %10 12;
281 281
    call w32 %14 $testDeepNesting(%10);
282 282
    br.eq w32 %14 600 @assert.ok12 @assert.fail11;
283 283
  @assert.fail11
318 318
    reserve %23 20 4;
319 319
    store w8 0 %23 0;
320 320
    reserve %24 8 4;
321 321
    store w32 1 %24 0;
322 322
    store w32 2 %24 4;
323 -
    add w64 %25 %23 4;
323 +
    add ptr %25 %23 4;
324 324
    blit %25 %24 8;
325 325
    store w32 10 %23 12;
326 326
    call w32 %26 $testMixedNesting(%23);
327 327
    br.eq w32 %26 13 @assert.ok22 @assert.fail21;
328 328
  @assert.fail21
331 331
    reserve %27 20 4;
332 332
    store w8 1 %27 0;
333 333
    reserve %28 8 4;
334 334
    store w32 3 %28 0;
335 335
    store w32 4 %28 4;
336 -
    add w64 %29 %27 4;
336 +
    add ptr %29 %27 4;
337 337
    blit %29 %28 8;
338 338
    reserve %30 8 4;
339 339
    store w32 5 %30 0;
340 340
    store w32 6 %30 4;
341 -
    add w64 %31 %27 12;
341 +
    add ptr %31 %27 12;
342 342
    blit %31 %30 8;
343 343
    call w32 %32 $testMixedNesting(%27);
344 344
    br.eq w32 %32 18 @assert.ok24 @assert.fail23;
345 345
  @assert.fail23
346 346
    unreachable;
359 359
    store w8 0 %37 0;
360 360
    store w32 7 %37 4;
361 361
    store w32 8 %37 8;
362 362
    blit %36 %37 12;
363 363
    store w32 100 %36 12;
364 -
    add w64 %38 %35 4;
364 +
    add ptr %38 %35 4;
365 365
    blit %38 %36 16;
366 366
    call w32 %39 $testNestedUnionInRecord(%35);
367 367
    br.eq w32 %39 115 @assert.ok28 @assert.fail27;
368 368
  @assert.fail27
369 369
    unreachable;
373 373
    reserve %41 16 4;
374 374
    reserve %42 12 4;
375 375
    store w8 1 %42 0;
376 376
    blit %41 %42 12;
377 377
    store w32 99 %41 12;
378 -
    add w64 %43 %40 4;
378 +
    add ptr %43 %40 4;
379 379
    blit %43 %41 16;
380 380
    call w32 %44 $testNestedUnionInRecord(%40);
381 381
    br.eq w32 %44 -1 @assert.ok30 @assert.fail29;
382 382
  @assert.fail29
383 383
    unreachable;
406 406
  @assert.fail37
407 407
    unreachable;
408 408
  @assert.ok38
409 409
    ret 0;
410 410
}
411 -
test/tests/match.nested.record.ril +16 -17
1 -
fn w32 $area(w64 %0) {
1 +
fn w32 $area(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 20 4;
4 4
    blit %1 %0 20;
5 5
    jmp @arm1;
6 6
  @arm1
7 7
    load w8 %2 %1 0;
8 8
    br.eq w8 %2 0 @case2 @arm3;
9 9
  @case2
10 -
    add w64 %3 %1 4;
10 +
    add ptr %3 %1 4;
11 11
    sload w32 %4 %3 0;
12 12
    sload w32 %5 %3 4;
13 13
    sload w32 %6 %3 8;
14 14
    add w32 %7 %4 %5;
15 15
    add w32 %8 %7 %6;
16 16
    ret %8;
17 17
  @arm3
18 18
    load w8 %9 %1 0;
19 19
    br.eq w8 %9 1 @case4 @arm5;
20 20
  @case4
21 -
    add w64 %10 %1 4;
21 +
    add ptr %10 %1 4;
22 22
    sload w32 %11 %10 0;
23 23
    sload w32 %12 %10 4;
24 -
    add w64 %13 %10 8;
24 +
    add ptr %13 %10 8;
25 25
    sload w32 %14 %13 0;
26 26
    sload w32 %15 %13 4;
27 27
    add w32 %16 %11 %12;
28 28
    mul w32 %17 %14 %15;
29 29
    add w32 %18 %16 %17;
32 32
    jmp @case6;
33 33
  @case6
34 34
    ret 0;
35 35
}
36 36
37 -
fn w32 $partial(w64 %0) {
37 +
fn w32 $partial(ptr %0) {
38 38
  @entry0
39 39
    reserve %1 20 4;
40 40
    blit %1 %0 20;
41 41
    jmp @arm1;
42 42
  @arm1
43 43
    load w8 %2 %1 0;
44 44
    br.eq w8 %2 0 @case2 @arm3;
45 45
  @case2
46 -
    add w64 %3 %1 4;
46 +
    add ptr %3 %1 4;
47 47
    sload w32 %4 %3 8;
48 48
    sload w32 %5 %3 0;
49 49
    sload w32 %6 %3 4;
50 50
    add w32 %7 %5 %6;
51 51
    add w32 %8 %7 %4;
52 52
    ret %8;
53 53
  @arm3
54 54
    load w8 %9 %1 0;
55 55
    br.eq w8 %9 1 @case4 @arm5;
56 56
  @case4
57 -
    add w64 %10 %1 4;
57 +
    add ptr %10 %1 4;
58 58
    sload w32 %11 %10 0;
59 -
    add w64 %12 %10 8;
59 +
    add ptr %12 %10 8;
60 60
    sload w32 %13 %12 0;
61 -
    add w64 %14 %10 8;
61 +
    add ptr %14 %10 8;
62 62
    sload w32 %15 %14 4;
63 63
    mul w32 %16 %13 %15;
64 64
    add w32 %17 %11 %16;
65 65
    ret %17;
66 66
  @arm5
67 67
    jmp @case6;
68 68
  @case6
69 69
    ret -1;
70 70
}
71 71
72 -
fn w32 $withPlaceholder(w64 %0) {
72 +
fn w32 $withPlaceholder(ptr %0) {
73 73
  @entry0
74 74
    reserve %1 20 4;
75 75
    blit %1 %0 20;
76 76
    jmp @arm1;
77 77
  @arm1
78 78
    load w8 %2 %1 0;
79 79
    br.eq w8 %2 0 @case2 @arm3;
80 80
  @case2
81 -
    add w64 %3 %1 4;
81 +
    add ptr %3 %1 4;
82 82
    sload w32 %4 %3 0;
83 83
    sload w32 %5 %3 8;
84 84
    add w32 %6 %4 %5;
85 85
    ret %6;
86 86
  @arm3
87 87
    load w8 %7 %1 0;
88 88
    br.eq w8 %7 1 @case4 @arm5;
89 89
  @case4
90 -
    add w64 %8 %1 4;
91 -
    add w64 %9 %8 8;
90 +
    add ptr %8 %1 4;
91 +
    add ptr %9 %8 8;
92 92
    sload w32 %10 %9 0;
93 93
    sload w32 %11 %9 4;
94 94
    mul w32 %12 %10 %11;
95 95
    ret %12;
96 96
  @arm5
104 104
    reserve %0 20 4;
105 105
    store w8 0 %0 0;
106 106
    reserve %1 8 4;
107 107
    store w32 3 %1 0;
108 108
    store w32 4 %1 4;
109 -
    add w64 %2 %0 4;
109 +
    add ptr %2 %0 4;
110 110
    blit %2 %1 8;
111 111
    store w32 5 %0 12;
112 112
    reserve %3 20 4;
113 113
    store w8 1 %3 0;
114 114
    reserve %4 16 4;
117 117
    store w32 2 %5 4;
118 118
    blit %4 %5 8;
119 119
    reserve %6 8 4;
120 120
    store w32 10 %6 0;
121 121
    store w32 20 %6 4;
122 -
    add w64 %7 %4 8;
122 +
    add ptr %7 %4 8;
123 123
    blit %7 %6 8;
124 -
    add w64 %8 %3 4;
124 +
    add ptr %8 %3 4;
125 125
    blit %8 %4 16;
126 126
    call w32 %9 $area(%0);
127 127
    br.eq w32 %9 12 @assert.ok2 @assert.fail1;
128 128
  @assert.fail1
129 129
    unreachable;
174 174
  @assert.fail17
175 175
    unreachable;
176 176
  @assert.ok18
177 177
    ret 0;
178 178
}
179 -
test/tests/match.nested.union.ril +10 -11
1 -
fn w32 $dispatch(w64 %0) {
1 +
fn w32 $dispatch(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 12 4;
4 4
    blit %1 %0 12;
5 5
    jmp @arm1;
6 6
  @arm1
7 7
    load w8 %2 %1 0;
8 8
    br.eq w8 %2 0 @case2 @arm3;
9 9
  @case2
10 -
    add w64 %3 %1 4;
10 +
    add ptr %3 %1 4;
11 11
    load w8 %4 %3 0;
12 12
    br.eq w8 %4 0 @nest4 @arm3;
13 13
  @arm3
14 14
    load w8 %6 %1 0;
15 15
    br.eq w8 %6 0 @case6 @arm7;
17 17
    sload w32 %5 %3 4;
18 18
    jmp @case5;
19 19
  @case5
20 20
    ret %5;
21 21
  @case6
22 -
    add w64 %7 %1 4;
22 +
    add ptr %7 %1 4;
23 23
    load w8 %8 %7 0;
24 24
    br.eq w8 %8 1 @nest8 @arm7;
25 25
  @arm7
26 26
    load w8 %11 %1 0;
27 27
    br.eq w8 %11 0 @case10 @arm11;
30 30
    jmp @case9;
31 31
  @case9
32 32
    sub w32 %10 0 %9;
33 33
    ret %10;
34 34
  @case10
35 -
    add w64 %12 %1 4;
35 +
    add ptr %12 %1 4;
36 36
    load w8 %13 %12 0;
37 37
    br.eq w8 %13 2 @nest12 @arm11;
38 38
  @arm11
39 39
    load w8 %16 %1 0;
40 40
    br.eq w8 %16 0 @case14 @arm15;
43 43
    jmp @case13;
44 44
  @case13
45 45
    mul w32 %15 %14 2;
46 46
    ret %15;
47 47
  @case14
48 -
    add w64 %17 %1 4;
48 +
    add ptr %17 %1 4;
49 49
    load w8 %18 %17 0;
50 50
    br.eq w8 %18 3 @nest16 @arm15;
51 51
  @arm15
52 52
    load w8 %21 %1 0;
53 53
    br.eq w8 %21 1 @case18 @arm19;
56 56
    jmp @case17;
57 57
  @case17
58 58
    mul w32 %20 %19 3;
59 59
    ret %20;
60 60
  @case18
61 -
    add w64 %22 %1 4;
61 +
    add ptr %22 %1 4;
62 62
    load w8 %23 %22 0;
63 63
    br.eq w8 %23 0 @nest20 @arm19;
64 64
  @arm19
65 65
    load w8 %24 %1 0;
66 66
    br.eq w8 %24 1 @case22 @arm23;
67 67
  @nest20
68 68
    jmp @case21;
69 69
  @case21
70 70
    ret 100;
71 71
  @case22
72 -
    add w64 %25 %1 4;
72 +
    add ptr %25 %1 4;
73 73
    load w8 %26 %25 0;
74 74
    br.eq w8 %26 1 @nest24 @arm23;
75 75
  @arm23
76 76
    jmp @else26;
77 77
  @nest24
80 80
    ret 200;
81 81
  @else26
82 82
    ret 0;
83 83
}
84 84
85 -
fn w32 $moveOnly(w64 %0) {
85 +
fn w32 $moveOnly(ptr %0) {
86 86
  @entry0
87 87
    reserve %1 12 4;
88 88
    blit %1 %0 12;
89 89
    jmp @arm1;
90 90
  @arm1
91 91
    load w8 %2 %1 0;
92 92
    br.eq w8 %2 0 @case2 @arm3;
93 93
  @case2
94 -
    add w64 %3 %1 4;
94 +
    add ptr %3 %1 4;
95 95
    load w8 %4 %3 0;
96 96
    br.eq w8 %4 0 @nest4 @arm3;
97 97
  @arm3
98 98
    load w8 %7 %1 0;
99 99
    br.eq w8 %7 0 @case6 @arm7;
102 102
    jmp @case5;
103 103
  @case5
104 104
    add w32 %6 %5 10;
105 105
    ret %6;
106 106
  @case6
107 -
    add w64 %8 %1 4;
107 +
    add ptr %8 %1 4;
108 108
    load w8 %9 %8 0;
109 109
    br.eq w8 %9 1 @nest8 @arm7;
110 110
  @arm7
111 111
    jmp @else10;
112 112
  @nest8
222 222
  @assert.fail23
223 223
    unreachable;
224 224
  @assert.ok24
225 225
    ret 0;
226 226
}
227 -
test/tests/match.optional.aggregate.ril +1 -1
1 -
fn w32 $matchOptionalAggregate(w64 %0) {
1 +
fn w32 $matchOptionalAggregate(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 8 4;
4 4
    blit %1 %0 8;
5 5
    jmp @arm1;
6 6
  @arm1
test/tests/match.optional.ril +2 -2
1 -
fn w32 $matchOptional(w64 %0) {
1 +
fn w32 $matchOptional(ptr %0) {
2 2
  @entry0
3 3
    jmp @arm1;
4 4
  @arm1
5 -
    br.eq w64 %0 0 @case2 @arm3;
5 +
    br.eq ptr %0 0 @case2 @arm3;
6 6
  @case2
7 7
    ret 0;
8 8
  @arm3
9 9
    jmp @case4;
10 10
  @case4
test/tests/match.record.pattern.ril +2 -2
1 -
fn w32 $getFirst(w64 %0) {
1 +
fn w32 $getFirst(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 12 4;
4 4
    blit %1 %0 12;
5 5
    jmp @arm1;
6 6
  @arm1
9 9
  @case2
10 10
    ret 0;
11 11
  @arm3
12 12
    jmp @case4;
13 13
  @case4
14 -
    add w64 %3 %1 4;
14 +
    add ptr %3 %1 4;
15 15
    sload w32 %4 %3 0;
16 16
    sload w32 %5 %3 4;
17 17
    ret %4;
18 18
}
test/tests/multi.throw.basic.ril +1 -1
1 -
fn w64 $fallible(w64 %0, w32 %1) {
1 +
fn ptr $fallible(ptr %0, w32 %1) {
2 2
  @entry0
3 3
    br.eq w32 %1 1 @then1 @merge2;
4 4
  @then1
5 5
    reserve %2 1 1;
6 6
    store w8 0 %2 0;
test/tests/multi.throw.catch.typed.ril +2 -2
1 -
fn w64 $fallible(w64 %0, w32 %1) {
1 +
fn ptr $fallible(ptr %0, w32 %1) {
2 2
  @entry0
3 3
    br.eq w32 %1 1 @then1 @merge2;
4 4
  @then1
5 5
    reserve %2 1 1;
6 6
    store w8 0 %2 0;
28 28
}
29 29
30 30
fn w32 $caller(w32 %0) {
31 31
  @entry0
32 32
    reserve %1 12 8;
33 -
    call w64 %2 $fallible(%1, %0);
33 +
    call ptr %2 $fallible(%1, %0);
34 34
    load w64 %3 %2 0;
35 35
    reserve %4 4 4;
36 36
    br.ne w32 %3 0 @err2 @ok1;
37 37
  @ok1
38 38
    sload w32 %5 %2 8;
test/tests/multi.throw.propagate.ril +5 -5
1 -
fn w64 $inner(w64 %0, w8 %1) {
1 +
fn ptr $inner(ptr %0, w8 %1) {
2 2
  @entry0
3 3
    br.ne w32 %1 0 @then1 @merge2;
4 4
  @then1
5 5
    reserve %2 1 1;
6 6
    store w8 0 %2 0;
15 15
    store w32 10 %4 8;
16 16
    blit %0 %4 12;
17 17
    ret %0;
18 18
}
19 19
20 -
fn w64 $outer(w64 %0, w8 %1) {
20 +
fn ptr $outer(ptr %0, w8 %1) {
21 21
  @entry0
22 22
    reserve %2 12 8;
23 -
    call w64 %3 $inner(%2, %1);
23 +
    call ptr %3 $inner(%2, %1);
24 24
    load w64 %4 %3 0;
25 25
    reserve %5 4 4;
26 26
    br.ne w32 %4 0 @err2 @ok1;
27 27
  @ok1
28 28
    sload w32 %6 %3 8;
29 29
    store w32 %6 %5 0;
30 30
    jmp @merge3;
31 31
  @err2
32 32
    reserve %7 12 8;
33 33
    store w64 %4 %7 0;
34 -
    add w64 %8 %3 8;
35 -
    add w64 %9 %7 8;
34 +
    add ptr %8 %3 8;
35 +
    add ptr %9 %7 8;
36 36
    blit %9 %8 1;
37 37
    blit %0 %7 12;
38 38
    ret %0;
39 39
  @merge3
40 40
    sload w32 %10 %5 0;
test/tests/mutref.loop.ril +1 -1
1 -
fn w64 $callback(w32 %0, w64 %1) {
1 +
fn w64 $callback(w32 %0, ptr %1) {
2 2
  @entry0
3 3
    store w32 %0 %1 0;
4 4
    ret;
5 5
}
6 6
test/tests/mutref.scalar.ril +1 -1
1 -
fn w8 $modify(w64 %0, w8 %1) {
1 +
fn w8 $modify(ptr %0, w8 %1) {
2 2
  @entry0
3 3
    sload w32 %2 %0 0;
4 4
    add w32 %3 %2 1;
5 5
    store w32 %3 %0 0;
6 6
    ret %1;
test/tests/nil.cmp.ril +6 -6
6 6
fn w8 $nilNeNil() {
7 7
  @entry0
8 8
    ret 0;
9 9
}
10 10
11 -
fn w8 $nilEqOptPtr(w64 %0) {
11 +
fn w8 $nilEqOptPtr(ptr %0) {
12 12
  @entry0
13 -
    eq w64 %1 %0 0;
13 +
    eq ptr %1 %0 0;
14 14
    ret %1;
15 15
}
16 16
17 -
fn w8 $nilNeOptPtr(w64 %0) {
17 +
fn w8 $nilNeOptPtr(ptr %0) {
18 18
  @entry0
19 -
    ne w64 %1 %0 0;
19 +
    ne ptr %1 %0 0;
20 20
    ret %1;
21 21
}
22 22
23 -
fn w8 $nilEqOptAgg(w64 %0) {
23 +
fn w8 $nilEqOptAgg(ptr %0) {
24 24
  @entry0
25 25
    load w8 %1 %0 0;
26 26
    eq w8 %2 %1 0;
27 27
    ret %2;
28 28
}
29 29
30 -
fn w8 $nilNeOptAgg(w64 %0) {
30 +
fn w8 $nilNeOptAgg(ptr %0) {
31 31
  @entry0
32 32
    load w8 %1 %0 0;
33 33
    ne w8 %2 %1 0;
34 34
    ret %2;
35 35
}
test/tests/opt.ptr.return.nil.ril +1 -1
1 -
fn w64 $optPtrReturnNil() {
1 +
fn ptr $optPtrReturnNil() {
2 2
  @entry0
3 3
    ret 0;
4 4
}
test/tests/opt.record.eq.rev.ril +4 -4
1 -
fn w64 $makeOpt(w64 %0, w64 %1) {
1 +
fn ptr $makeOpt(ptr %0, ptr %1) {
2 2
  @entry0
3 3
    reserve %2 8 4;
4 4
    store w8 1 %2 0;
5 -
    add w64 %3 %2 4;
5 +
    add ptr %3 %2 4;
6 6
    blit %3 %1 4;
7 7
    blit %0 %2 8;
8 8
    ret %0;
9 9
}
10 10
11 11
fn w32 $main() {
12 12
  @entry0
13 13
    reserve %0 4 4;
14 14
    store w32 5 %0 0;
15 15
    reserve %1 8 4;
16 -
    call w64 %2 $makeOpt(%1, %0);
16 +
    call ptr %2 $makeOpt(%1, %0);
17 17
    reserve %3 8 4;
18 18
    store w8 1 %3 0;
19 -
    add w64 %4 %3 4;
19 +
    add ptr %4 %3 4;
20 20
    blit %4 %0 4;
21 21
    load w8 %5 %2 0;
22 22
    load w8 %6 %3 0;
23 23
    eq w8 %7 %5 %6;
24 24
    eq w8 %8 %5 0;
test/tests/opt.record.eq.ril +6 -7
4 4
    reserve %1 8 4;
5 5
    store w32 3 %1 0;
6 6
    store w32 9 %1 4;
7 7
    reserve %2 12 4;
8 8
    store w8 1 %2 0;
9 -
    add w64 %3 %2 4;
9 +
    add ptr %3 %2 4;
10 10
    blit %3 %1 8;
11 11
    blit %0 %2 12;
12 12
    reserve %4 12 4;
13 13
    reserve %5 8 4;
14 14
    store w32 3 %5 0;
15 15
    store w32 9 %5 4;
16 16
    reserve %6 12 4;
17 17
    store w8 1 %6 0;
18 -
    add w64 %7 %6 4;
18 +
    add ptr %7 %6 4;
19 19
    blit %7 %5 8;
20 20
    blit %4 %6 12;
21 21
    load w8 %8 %0 0;
22 22
    load w8 %9 %4 0;
23 23
    eq w8 %10 %8 %9;
40 40
    reserve %23 8 4;
41 41
    store w32 4 %23 0;
42 42
    store w32 6 %23 4;
43 43
    reserve %24 12 4;
44 44
    store w8 1 %24 0;
45 -
    add w64 %25 %24 4;
45 +
    add ptr %25 %24 4;
46 46
    blit %25 %23 8;
47 47
    blit %22 %24 12;
48 48
    load w8 %26 %0 0;
49 49
    load w8 %27 %22 0;
50 50
    eq w8 %28 %26 %27;
70 70
    store w8 0 %41 0;
71 71
    reserve %42 16 4;
72 72
    store w8 0 %42 0;
73 73
    reserve %43 16 4;
74 74
    store w8 1 %43 0;
75 -
    add w64 %44 %43 4;
75 +
    add ptr %44 %43 4;
76 76
    blit %44 %0 12;
77 77
    blit %39 %43 16;
78 78
    reserve %45 16 4;
79 79
    store w8 1 %45 0;
80 -
    add w64 %46 %45 4;
80 +
    add ptr %46 %45 4;
81 81
    blit %46 %4 12;
82 82
    blit %40 %45 16;
83 83
    reserve %47 16 4;
84 84
    store w8 1 %47 0;
85 -
    add w64 %48 %47 4;
85 +
    add ptr %48 %47 4;
86 86
    blit %48 %22 12;
87 87
    blit %41 %47 16;
88 88
    load w8 %49 %39 0;
89 89
    load w8 %50 %40 0;
90 90
    eq w8 %51 %49 %50;
155 155
  @then9
156 156
    ret 0;
157 157
  @merge10
158 158
    ret 1;
159 159
}
160 -
test/tests/opt.return.nil.ril +1 -1
1 -
fn w64 $optReturnNil(w64 %0) {
1 +
fn ptr $optReturnNil(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 8 4;
4 4
    store w8 0 %1 0;
5 5
    blit %0 %1 8;
6 6
    ret %0;
test/tests/opt.return.value.ril +1 -1
1 -
fn w64 $optReturnValue(w64 %0) {
1 +
fn ptr $optReturnValue(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 8 4;
4 4
    store w8 1 %1 0;
5 5
    store w32 7 %1 4;
6 6
    blit %0 %1 8;
test/tests/opt.slice.npo.ril +32 -33
20 20
}
21 21
22 22
fn w8 $checkNil() {
23 23
  @entry0
24 24
    reserve %0 16 8;
25 -
    store w64 0 %0 0;
25 +
    store ptr 0 %0 0;
26 26
    store w32 0 %0 8;
27 27
    store w32 0 %0 12;
28 28
    load w64 %1 %0 0;
29 -
    eq w64 %2 %1 0;
29 +
    eq ptr %2 %1 0;
30 30
    br.ne w32 %2 0 @assert.ok2 @assert.fail1;
31 31
  @assert.fail1
32 32
    unreachable;
33 33
  @assert.ok2
34 34
    ret 0;
39 39
    reserve %0 3 1;
40 40
    store w8 1 %0 0;
41 41
    store w8 2 %0 1;
42 42
    store w8 3 %0 2;
43 43
    reserve %1 16 8;
44 -
    store w64 %0 %1 0;
44 +
    store ptr %0 %1 0;
45 45
    store w32 3 %1 8;
46 46
    store w32 3 %1 12;
47 47
    reserve %2 16 8;
48 48
    blit %2 %1 16;
49 49
    load w64 %3 %2 0;
50 -
    ne w64 %4 %3 0;
50 +
    ne ptr %4 %3 0;
51 51
    br.ne w32 %4 0 @assert.ok2 @assert.fail1;
52 52
  @assert.fail1
53 53
    unreachable;
54 54
  @assert.ok2
55 55
    ret 0;
60 60
    reserve %0 3 1;
61 61
    store w8 10 %0 0;
62 62
    store w8 20 %0 1;
63 63
    store w8 30 %0 2;
64 64
    reserve %1 16 8;
65 -
    store w64 %0 %1 0;
65 +
    store ptr %0 %1 0;
66 66
    store w32 3 %1 8;
67 67
    store w32 3 %1 12;
68 68
    reserve %2 16 8;
69 69
    blit %2 %1 16;
70 70
    reserve %3 16 8;
97 97
    unreachable;
98 98
  @assert.ok10
99 99
    jmp @merge13;
100 100
  @guard#pass11
101 101
    load w64 %10 %3 0;
102 -
    add w64 %11 %10 1;
102 +
    add ptr %11 %10 1;
103 103
    load w8 %12 %11 0;
104 104
    br.eq w8 %12 20 @assert.ok10 @assert.fail9;
105 105
  @guard#trap12
106 106
    ebreak;
107 107
    unreachable;
108 108
  @merge13
109 109
    reserve %13 16 8;
110 -
    store w64 0 %13 0;
110 +
    store ptr 0 %13 0;
111 111
    store w32 0 %13 8;
112 112
    store w32 0 %13 12;
113 113
    reserve %14 16 8;
114 114
    blit %14 %13 16;
115 115
    load w64 %15 %14 0;
127 127
    reserve %0 3 1;
128 128
    store w8 10 %0 0;
129 129
    store w8 20 %0 1;
130 130
    store w8 30 %0 2;
131 131
    reserve %1 16 8;
132 -
    store w64 %0 %1 0;
132 +
    store ptr %0 %1 0;
133 133
    store w32 3 %1 8;
134 134
    store w32 3 %1 12;
135 135
    reserve %2 16 8;
136 136
    blit %2 %1 16;
137 137
    reserve %3 16 8;
147 147
    unreachable;
148 148
  @assert.ok4
149 149
    ret 0;
150 150
}
151 151
152 -
fn w64 $returnNil(w64 %0) {
152 +
fn ptr $returnNil(ptr %0) {
153 153
  @entry0
154 154
    reserve %1 16 8;
155 -
    store w64 0 %1 0;
155 +
    store ptr 0 %1 0;
156 156
    store w32 0 %1 8;
157 157
    store w32 0 %1 12;
158 158
    blit %0 %1 16;
159 159
    ret %0;
160 160
}
161 161
162 -
fn w64 $returnSome(w64 %0) {
162 +
fn ptr $returnSome(ptr %0) {
163 163
  @entry0
164 164
    reserve %1 2 1;
165 165
    store w8 42 %1 0;
166 166
    store w8 99 %1 1;
167 167
    reserve %2 16 8;
168 -
    store w64 %1 %2 0;
168 +
    store ptr %1 %2 0;
169 169
    store w32 2 %2 8;
170 170
    store w32 2 %2 12;
171 171
    blit %0 %2 16;
172 172
    ret %0;
173 173
}
174 174
175 175
fn w8 $checkReturn() {
176 176
  @entry0
177 177
    reserve %0 16 8;
178 -
    call w64 %1 $returnNil(%0);
178 +
    call ptr %1 $returnNil(%0);
179 179
    load w64 %2 %1 0;
180 -
    eq w64 %3 %2 0;
180 +
    eq ptr %3 %2 0;
181 181
    br.ne w32 %3 0 @assert.ok2 @assert.fail1;
182 182
  @assert.fail1
183 183
    unreachable;
184 184
  @assert.ok2
185 185
    reserve %4 16 8;
186 -
    call w64 %5 $returnSome(%4);
186 +
    call ptr %5 $returnSome(%4);
187 187
    load w64 %6 %5 0;
188 -
    ne w64 %7 %6 0;
188 +
    ne ptr %7 %6 0;
189 189
    br.ne w32 %7 0 @assert.ok4 @assert.fail3;
190 190
  @assert.fail3
191 191
    unreachable;
192 192
  @assert.ok4
193 193
    reserve %8 16 8;
218 218
  @entry0
219 219
    reserve %0 2 1;
220 220
    store w8 5 %0 0;
221 221
    store w8 6 %0 1;
222 222
    reserve %1 16 8;
223 -
    store w64 %0 %1 0;
223 +
    store ptr %0 %1 0;
224 224
    store w32 2 %1 8;
225 225
    store w32 2 %1 12;
226 226
    reserve %2 16 8;
227 227
    blit %2 %1 16;
228 228
    reserve %3 16 8;
229 229
    blit %3 %2 16;
230 230
    jmp @arm1;
231 231
  @arm1
232 232
    load w64 %4 %3 0;
233 -
    br.eq w64 %4 0 @case2 @arm3;
233 +
    br.eq ptr %4 0 @case2 @arm3;
234 234
  @case2
235 235
    ret 60;
236 236
  @arm3
237 237
    jmp @else4;
238 238
  @else4
239 239
    jmp @merge6;
240 240
  @merge6
241 241
    reserve %5 16 8;
242 -
    store w64 0 %5 0;
242 +
    store ptr 0 %5 0;
243 243
    store w32 0 %5 8;
244 244
    store w32 0 %5 12;
245 245
    reserve %6 16 8;
246 246
    blit %6 %5 16;
247 247
    jmp @arm7;
248 248
  @arm7
249 249
    load w64 %7 %6 0;
250 -
    br.eq w64 %7 0 @case8 @arm9;
250 +
    br.eq ptr %7 0 @case8 @arm9;
251 251
  @case8
252 252
    jmp @merge10;
253 253
  @arm9
254 254
    jmp @else11;
255 255
  @merge10
259 259
}
260 260
261 261
fn w8 $checkEq() {
262 262
  @entry0
263 263
    reserve %0 16 8;
264 -
    store w64 0 %0 0;
264 +
    store ptr 0 %0 0;
265 265
    store w32 0 %0 8;
266 266
    store w32 0 %0 12;
267 267
    reserve %1 16 8;
268 -
    store w64 0 %1 0;
268 +
    store ptr 0 %1 0;
269 269
    store w32 0 %1 8;
270 270
    store w32 0 %1 12;
271 -
    load w64 %2 %0 0;
272 -
    load w64 %3 %1 0;
273 -
    eq w64 %4 %2 %3;
271 +
    load ptr %2 %0 0;
272 +
    load ptr %3 %1 0;
273 +
    eq ptr %4 %2 %3;
274 274
    load w32 %5 %0 8;
275 275
    load w32 %6 %1 8;
276 276
    eq w32 %7 %5 %6;
277 277
    and w32 %8 %4 %7;
278 278
    br.ne w32 %8 0 @assert.ok2 @assert.fail1;
281 281
  @assert.ok2
282 282
    reserve %9 2 1;
283 283
    store w8 1 %9 0;
284 284
    store w8 2 %9 1;
285 285
    reserve %10 16 8;
286 -
    store w64 %9 %10 0;
286 +
    store ptr %9 %10 0;
287 287
    store w32 2 %10 8;
288 288
    store w32 2 %10 12;
289 289
    reserve %11 16 8;
290 290
    blit %11 %10 16;
291 -
    load w64 %12 %11 0;
292 -
    load w64 %13 %0 0;
293 -
    eq w64 %14 %12 %13;
291 +
    load ptr %12 %11 0;
292 +
    load ptr %13 %0 0;
293 +
    eq ptr %14 %12 %13;
294 294
    load w32 %15 %11 8;
295 295
    load w32 %16 %0 8;
296 296
    eq w32 %17 %15 %16;
297 297
    and w32 %18 %14 %17;
298 298
    eq w32 %19 %18 0;
300 300
  @assert.fail3
301 301
    unreachable;
302 302
  @assert.ok4
303 303
    reserve %20 16 8;
304 304
    blit %20 %10 16;
305 -
    load w64 %21 %11 0;
306 -
    load w64 %22 %20 0;
307 -
    eq w64 %23 %21 %22;
305 +
    load ptr %21 %11 0;
306 +
    load ptr %22 %20 0;
307 +
    eq ptr %23 %21 %22;
308 308
    load w32 %24 %11 8;
309 309
    load w32 %25 %20 8;
310 310
    eq w32 %26 %24 %25;
311 311
    and w32 %27 %23 %26;
312 312
    br.ne w32 %27 0 @assert.ok6 @assert.fail5;
358 358
  @then15
359 359
    ret %7;
360 360
  @merge16
361 361
    ret 0;
362 362
}
363 -
test/tests/optional.aggregate.eq.ril +3 -3
1 -
fn w8 $optPairEq(w64 %0, w64 %1) {
1 +
fn w8 $optPairEq(ptr %0, ptr %1) {
2 2
  @entry0
3 3
    load w8 %2 %0 0;
4 4
    load w8 %3 %1 0;
5 5
    eq w8 %4 %2 %3;
6 6
    eq w8 %5 %2 0;
14 14
    or w32 %13 %5 %12;
15 15
    and w32 %14 %4 %13;
16 16
    ret %14;
17 17
}
18 18
19 -
fn w8 $optI32Eq(w64 %0, w64 %1) {
19 +
fn w8 $optI32Eq(ptr %0, ptr %1) {
20 20
  @entry0
21 21
    load w8 %2 %0 0;
22 22
    load w8 %3 %1 0;
23 23
    eq w8 %4 %2 %3;
24 24
    eq w8 %5 %2 0;
28 28
    or w32 %9 %5 %8;
29 29
    and w32 %10 %4 %9;
30 30
    ret %10;
31 31
}
32 32
33 -
fn w8 $optI32EqNil(w64 %0) {
33 +
fn w8 $optI32EqNil(ptr %0) {
34 34
  @entry0
35 35
    load w8 %1 %0 0;
36 36
    eq w8 %2 %1 0;
37 37
    ret %2;
38 38
}
test/tests/optional.eq.ril +1 -1
1 -
fn w8 $optionalEq(w64 %0, w64 %1) {
1 +
fn w8 $optionalEq(ptr %0, ptr %1) {
2 2
  @entry0
3 3
    load w8 %2 %0 0;
4 4
    load w8 %3 %1 0;
5 5
    eq w8 %4 %2 %3;
6 6
    eq w8 %5 %2 0;
test/tests/optional.ptr.eq.ril +8 -8
1 -
fn w8 $optPtrEq(w64 %0, w64 %1) {
1 +
fn w8 $optPtrEq(ptr %0, ptr %1) {
2 2
  @entry0
3 -
    eq w64 %2 %0 %1;
3 +
    eq ptr %2 %0 %1;
4 4
    ret %2;
5 5
}
6 6
7 -
fn w8 $optPtrNeq(w64 %0, w64 %1) {
7 +
fn w8 $optPtrNeq(ptr %0, ptr %1) {
8 8
  @entry0
9 -
    ne w64 %2 %0 %1;
9 +
    ne ptr %2 %0 %1;
10 10
    ret %2;
11 11
}
12 12
13 -
fn w8 $optPtrEqNil(w64 %0) {
13 +
fn w8 $optPtrEqNil(ptr %0) {
14 14
  @entry0
15 -
    eq w64 %1 %0 0;
15 +
    eq ptr %1 %0 0;
16 16
    ret %1;
17 17
}
18 18
19 -
fn w8 $optPtrNeqNil(w64 %0) {
19 +
fn w8 $optPtrNeqNil(ptr %0) {
20 20
  @entry0
21 -
    ne w64 %1 %0 0;
21 +
    ne ptr %1 %0 0;
22 22
    ret %1;
23 23
}
test/tests/pointerfn.ril +1 -1
1 -
fn w64 $takePointer(w64 %0) {
1 +
fn ptr $takePointer(ptr %0) {
2 2
  @entry0
3 3
    ret %0;
4 4
}
test/tests/ptr.addressof.field.ril +2 -2
1 -
fn w64 $addressOfField(w64 %0) {
1 +
fn ptr $addressOfField(ptr %0) {
2 2
  @entry0
3 -
    add w64 %1 %0 4;
3 +
    add ptr %1 %0 4;
4 4
    ret %1;
5 5
}
test/tests/ptr.addressof.local.ril +3 -3
1 -
fn w64 $addressOfRecordLocal() {
1 +
fn ptr $addressOfRecordLocal() {
2 2
  @entry0
3 3
    reserve %0 8 4;
4 4
    store w32 1 %0 0;
5 5
    store w32 2 %0 4;
6 6
    ret %0;
7 7
}
8 8
9 -
fn w64 $addressOfScalarLocal() {
9 +
fn ptr $addressOfScalarLocal() {
10 10
  @entry0
11 11
    reserve %0 4 4;
12 12
    store w32 42 %0 0;
13 13
    ret %0;
14 14
}
15 15
16 -
fn w64 $addressOfDeref(w64 %0) {
16 +
fn ptr $addressOfDeref(ptr %0) {
17 17
  @entry0
18 18
    ret %0;
19 19
}
test/tests/ptr.addressof.ril +2 -2
1 -
fn w64 $addressOfElem(w64 %0, w32 %1) {
1 +
fn ptr $addressOfElem(ptr %0, w32 %1) {
2 2
  @entry0
3 3
    br.ult w32 %1 4 @guard#pass1 @guard#trap2;
4 4
  @guard#pass1
5 5
    mul w64 %2 %1 4;
6 -
    add w64 %3 %0 %2;
6 +
    add ptr %3 %0 %2;
7 7
    ret %3;
8 8
  @guard#trap2
9 9
    ebreak;
10 10
    unreachable;
11 11
}
test/tests/ptr.assign.ril +0 -1
4 4
    store w32 1 %0 0;
5 5
    store w32 42 %0 0;
6 6
    sload w32 %1 %0 0;
7 7
    ret %1;
8 8
}
9 -
test/tests/ptr.deref.record.ril +2 -2
1 -
fn w32 $derefField(w64 %0) {
1 +
fn w32 $derefField(ptr %0) {
2 2
  @entry0
3 3
    sload w32 %1 %0 0;
4 4
    ret %1;
5 5
}
6 6
7 -
fn w32 $derefCopy(w64 %0) {
7 +
fn w32 $derefCopy(ptr %0) {
8 8
  @entry0
9 9
    reserve %1 8 4;
10 10
    blit %1 %0 8;
11 11
    sload w32 %2 %1 4;
12 12
    ret %2;
test/tests/ptr.deref.ril +5 -6
2 2
    w32 2;
3 3
    w32 4;
4 4
    w32 6;
5 5
}
6 6
7 -
fn w32 $derefArrayIndex(w64 %0) {
7 +
fn w32 $derefArrayIndex(ptr %0) {
8 8
  @entry0
9 9
    mul w64 %1 1 4;
10 -
    add w64 %2 %0 %1;
10 +
    add ptr %2 %0 %1;
11 11
    sload w32 %3 %2 0;
12 12
    ret %3;
13 13
}
14 14
15 -
fn w32 $derefSliceIndex(w64 %0) {
15 +
fn w32 $derefSliceIndex(ptr %0) {
16 16
  @entry0
17 17
    load w32 %1 %0 8;
18 18
    br.ult w32 2 %1 @guard#pass1 @guard#trap2;
19 19
  @guard#pass1
20 20
    load w64 %2 %0 0;
21 21
    mul w64 %3 2 4;
22 -
    add w64 %4 %2 %3;
22 +
    add ptr %4 %2 %3;
23 23
    sload w32 %5 %4 0;
24 24
    ret %5;
25 25
  @guard#trap2
26 26
    ebreak;
27 27
    unreachable;
50 50
    store w32 8 %3 4;
51 51
    store w32 9 %3 8;
52 52
    call w32 %4 $derefArrayIndex(%3);
53 53
    copy %5 $main0;
54 54
    reserve %6 16 8;
55 -
    store w64 %5 %6 0;
55 +
    store ptr %5 %6 0;
56 56
    store w32 3 %6 8;
57 57
    store w32 3 %6 12;
58 58
    call w32 %7 $derefSliceIndex(%6);
59 59
    add w32 %8 %1 %2;
60 60
    add w32 %9 %8 %4;
61 61
    add w32 %10 %9 %7;
62 62
    ret %10;
63 63
}
64 -
test/tests/ptr.subscript.assign.ril +2 -2
1 -
fn w64 $subscriptAssign(w64 %0, w32 %1, w32 %2) {
1 +
fn w64 $subscriptAssign(ptr %0, w32 %1, w32 %2) {
2 2
  @entry0
3 3
    load w32 %3 %0 8;
4 4
    br.ult w32 %1 %3 @guard#pass1 @guard#trap2;
5 5
  @guard#pass1
6 6
    load w64 %4 %0 0;
7 7
    mul w64 %5 %1 4;
8 -
    add w64 %6 %4 %5;
8 +
    add ptr %6 %4 %5;
9 9
    store w32 %2 %6 0;
10 10
    ret;
11 11
  @guard#trap2
12 12
    ebreak;
13 13
    unreachable;
test/tests/record.ctor.tuple.ril +1 -1
1 -
fn w64 $make() {
1 +
fn ptr $make() {
2 2
  @entry0
3 3
    reserve %0 8 4;
4 4
    store w32 1 %0 0;
5 5
    store w32 2 %0 4;
6 6
    load w64 %1 %0 0;
test/tests/record.empty.eq.ril +2 -2
1 -
fn w8 $emptyEq(w64 %0, w64 %1) {
1 +
fn w8 $emptyEq(ptr %0, ptr %1) {
2 2
  @entry0
3 3
    ret 1;
4 4
}
5 5
6 -
fn w8 $emptyNeq(w64 %0, w64 %1) {
6 +
fn w8 $emptyNeq(ptr %0, ptr %1) {
7 7
  @entry0
8 8
    eq w32 %2 1 0;
9 9
    ret %2;
10 10
}
11 11
test/tests/record.eq.ril +1 -1
1 -
fn w8 $recordEq(w64 %0, w64 %1) {
1 +
fn w8 $recordEq(ptr %0, ptr %1) {
2 2
  @entry0
3 3
    sload w32 %2 %0 0;
4 4
    sload w32 %3 %1 0;
5 5
    eq w32 %4 %2 %3;
6 6
    sload w32 %5 %0 4;
test/tests/record.field.assign.ril +0 -1
12 12
    sload w32 %4 %0 4;
13 13
    add w32 %5 %3 %4;
14 14
    sub w32 %6 %5 42;
15 15
    ret %6;
16 16
}
17 -
test/tests/record.nested.eq.ril +2 -2
1 -
fn w8 $innerEq(w64 %0, w64 %1) {
1 +
fn w8 $innerEq(ptr %0, ptr %1) {
2 2
  @entry0
3 3
    sload w32 %2 %0 0;
4 4
    sload w32 %3 %1 0;
5 5
    eq w32 %4 %2 %3;
6 6
    sload w32 %5 %0 4;
8 8
    eq w32 %7 %5 %6;
9 9
    and w32 %8 %4 %7;
10 10
    ret %8;
11 11
}
12 12
13 -
fn w8 $outerEq(w64 %0, w64 %1) {
13 +
fn w8 $outerEq(ptr %0, ptr %1) {
14 14
  @entry0
15 15
    sload w32 %2 %0 0;
16 16
    sload w32 %3 %1 0;
17 17
    eq w32 %4 %2 %3;
18 18
    sload w32 %5 %0 4;
test/tests/record.ptr.access.ril +0 -1
7 7
    sload w32 %2 %0 4;
8 8
    add w32 %3 %1 %2;
9 9
    sub w32 %4 %3 42;
10 10
    ret %4;
11 11
}
12 -
test/tests/reserve.loop.ril +0 -1
19 19
  @assert.fail4
20 20
    unreachable;
21 21
  @assert.ok5
22 22
    ret 0;
23 23
}
24 -
test/tests/slice.append.ril +76 -77
1 1
data mut $BUF align 1 {
2 2
    undef * 4096;
3 3
}
4 4
5 -
fn w64 $newArena(w64 %0, w64 %1) {
5 +
fn ptr $newArena(ptr %0, ptr %1) {
6 6
  @entry0
7 7
    reserve %2 24 8;
8 8
    blit %2 %1 16;
9 9
    store w32 0 %2 16;
10 10
    blit %0 %2 24;
11 11
    ret %0;
12 12
}
13 13
14 -
fn w64 $arenaAlloc(w64 %0, w32 %1, w32 %2) {
14 +
fn ptr $arenaAlloc(ptr %0, w32 %1, w32 %2) {
15 15
  @entry0
16 16
    load w32 %3 %0 16;
17 17
    add w32 %4 %3 %2;
18 18
    sub w32 %5 %4 1;
19 19
    udiv w32 %6 %5 %2;
26 26
  @assert.ok2
27 27
    load w32 %10 %0 8;
28 28
    br.ult w32 %7 %10 @guard#pass3 @guard#trap4;
29 29
  @guard#pass3
30 30
    load w64 %11 %0 0;
31 -
    add w64 %12 %11 %7;
31 +
    add ptr %12 %11 %7;
32 32
    store w32 %8 %0 16;
33 33
    ret %12;
34 34
  @guard#trap4
35 35
    ebreak;
36 36
    unreachable;
37 37
}
38 38
39 -
fn w64 $arenaAllocFn(w64 %0, w32 %1, w32 %2) {
39 +
fn ptr $arenaAllocFn(ptr %0, w32 %1, w32 %2) {
40 40
  @entry0
41 -
    call w64 %3 $arenaAlloc(%0, %1, %2);
41 +
    call ptr %3 $arenaAlloc(%0, %1, %2);
42 42
    ret %3;
43 43
}
44 44
45 -
fn w64 $arenaAllocator(w64 %0, w64 %1) {
45 +
fn ptr $arenaAllocator(ptr %0, ptr %1) {
46 46
  @entry0
47 47
    reserve %2 16 8;
48 48
    copy %3 $arenaAllocFn;
49 -
    store w64 %3 %2 0;
50 -
    store w64 %1 %2 8;
49 +
    store ptr %3 %2 0;
50 +
    store ptr %1 %2 8;
51 51
    blit %0 %2 16;
52 52
    ret %0;
53 53
}
54 54
55 55
fn w32 $main() {
56 56
  @entry0
57 57
    copy %0 $BUF;
58 58
    reserve %1 16 8;
59 -
    store w64 %0 %1 0;
59 +
    store ptr %0 %1 0;
60 60
    store w32 4096 %1 8;
61 61
    store w32 4096 %1 12;
62 62
    reserve %2 24 8;
63 -
    call w64 %3 $newArena(%2, %1);
63 +
    call ptr %3 $newArena(%2, %1);
64 64
    reserve %4 16 8;
65 -
    call w64 %5 $arenaAllocator(%4, %3);
65 +
    call ptr %5 $arenaAllocator(%4, %3);
66 66
    mul w32 %6 4 4;
67 -
    call w64 %7 $arenaAlloc(%3, %6, 4);
67 +
    call ptr %7 $arenaAlloc(%3, %6, 4);
68 68
    reserve %8 16 8;
69 -
    store w64 %7 %8 0;
69 +
    store ptr %7 %8 0;
70 70
    store w32 0 %8 8;
71 71
    store w32 4 %8 12;
72 72
    load w32 %9 %8 8;
73 73
    load w32 %10 %8 12;
74 74
    br.ult w32 %9 %10 @append.store1 @append.grow2;
75 75
  @append.store1
76 76
    load w64 %24 %8 0;
77 77
    mul w64 %25 %9 4;
78 -
    add w64 %26 %24 %25;
78 +
    add ptr %26 %24 %25;
79 79
    store w32 10 %26 0;
80 80
    add w32 %27 %9 1;
81 81
    store w32 %27 %8 8;
82 82
    load w32 %32 %8 8;
83 83
    load w32 %33 %8 12;
86 86
    shl w32 %11 %10 1;
87 87
    or w32 %12 %11 1;
88 88
    load w64 %13 %5 0;
89 89
    load w64 %14 %5 8;
90 90
    mul w32 %15 %12 4;
91 -
    call w64 %16 %13(%14, %15, 4);
91 +
    call ptr %16 %13(%14, %15, 4);
92 92
    load w64 %17 %8 0;
93 93
    mul w32 %18 %9 4;
94 94
    jmp @append3(0);
95 95
  @append3(w32 %19)
96 96
    br.ult w32 %19 %18 @append4 @append5;
97 97
  @append4
98 -
    add w64 %20 %17 %19;
98 +
    add ptr %20 %17 %19;
99 99
    load w8 %21 %20 0;
100 -
    add w64 %22 %16 %19;
100 +
    add ptr %22 %16 %19;
101 101
    store w8 %21 %22 0;
102 102
    add w32 %23 %19 1;
103 103
    jmp @append3(%23);
104 104
  @append5
105 105
    store w64 %16 %8 0;
106 106
    store w32 %12 %8 12;
107 107
    jmp @append.store1;
108 108
  @append.store6
109 109
    load w64 %47 %8 0;
110 110
    mul w64 %48 %32 4;
111 -
    add w64 %49 %47 %48;
111 +
    add ptr %49 %47 %48;
112 112
    store w32 20 %49 0;
113 113
    add w32 %50 %32 1;
114 114
    store w32 %50 %8 8;
115 115
    load w32 %55 %8 8;
116 116
    load w32 %56 %8 12;
119 119
    shl w32 %34 %33 1;
120 120
    or w32 %35 %34 1;
121 121
    load w64 %36 %5 0;
122 122
    load w64 %37 %5 8;
123 123
    mul w32 %38 %35 4;
124 -
    call w64 %39 %36(%37, %38, 4);
124 +
    call ptr %39 %36(%37, %38, 4);
125 125
    load w64 %40 %8 0;
126 126
    mul w32 %41 %32 4;
127 127
    jmp @append8(0);
128 128
  @append8(w32 %42)
129 129
    br.ult w32 %42 %41 @append9 @append10;
130 130
  @append9
131 -
    add w64 %43 %40 %42;
131 +
    add ptr %43 %40 %42;
132 132
    load w8 %44 %43 0;
133 -
    add w64 %45 %39 %42;
133 +
    add ptr %45 %39 %42;
134 134
    store w8 %44 %45 0;
135 135
    add w32 %46 %42 1;
136 136
    jmp @append8(%46);
137 137
  @append10
138 138
    store w64 %39 %8 0;
139 139
    store w32 %35 %8 12;
140 140
    jmp @append.store6;
141 141
  @append.store11
142 142
    load w64 %70 %8 0;
143 143
    mul w64 %71 %55 4;
144 -
    add w64 %72 %70 %71;
144 +
    add ptr %72 %70 %71;
145 145
    store w32 30 %72 0;
146 146
    add w32 %73 %55 1;
147 147
    store w32 %73 %8 8;
148 148
    load w32 %76 %8 8;
149 149
    br.ne w32 %76 3 @then16 @merge17;
151 151
    shl w32 %57 %56 1;
152 152
    or w32 %58 %57 1;
153 153
    load w64 %59 %5 0;
154 154
    load w64 %60 %5 8;
155 155
    mul w32 %61 %58 4;
156 -
    call w64 %62 %59(%60, %61, 4);
156 +
    call ptr %62 %59(%60, %61, 4);
157 157
    load w64 %63 %8 0;
158 158
    mul w32 %64 %55 4;
159 159
    jmp @append13(0);
160 160
  @append13(w32 %65)
161 161
    br.ult w32 %65 %64 @append14 @append15;
162 162
  @append14
163 -
    add w64 %66 %63 %65;
163 +
    add ptr %66 %63 %65;
164 164
    load w8 %67 %66 0;
165 -
    add w64 %68 %62 %65;
165 +
    add ptr %68 %62 %65;
166 166
    store w8 %67 %68 0;
167 167
    add w32 %69 %65 1;
168 168
    jmp @append13(%69);
169 169
  @append15
170 170
    store w64 %62 %8 0;
198 198
    load w32 %86 %8 8;
199 199
    br.ult w32 2 %86 @guard#pass30 @guard#trap31;
200 200
  @guard#pass26
201 201
    load w64 %82 %8 0;
202 202
    mul w64 %83 1 4;
203 -
    add w64 %84 %82 %83;
203 +
    add ptr %84 %82 %83;
204 204
    sload w32 %85 %84 0;
205 205
    br.ne w32 %85 20 @then24 @merge25;
206 206
  @guard#trap27
207 207
    ebreak;
208 208
    unreachable;
213 213
    load w32 %94 %8 12;
214 214
    br.ult w32 %93 %94 @append.store32 @append.grow33;
215 215
  @guard#pass30
216 216
    load w64 %87 %8 0;
217 217
    mul w64 %88 2 4;
218 -
    add w64 %89 %87 %88;
218 +
    add ptr %89 %87 %88;
219 219
    sload w32 %90 %89 0;
220 220
    br.ne w32 %90 30 @then28 @merge29;
221 221
  @guard#trap31
222 222
    ebreak;
223 223
    unreachable;
224 224
  @append.store32
225 225
    load w64 %108 %8 0;
226 226
    mul w64 %109 %93 4;
227 -
    add w64 %110 %108 %109;
227 +
    add ptr %110 %108 %109;
228 228
    store w32 40 %110 0;
229 229
    add w32 %111 %93 1;
230 230
    store w32 %111 %8 8;
231 231
    load w32 %114 %8 8;
232 232
    br.ne w32 %114 4 @then37 @merge38;
234 234
    shl w32 %95 %94 1;
235 235
    or w32 %96 %95 1;
236 236
    load w64 %97 %5 0;
237 237
    load w64 %98 %5 8;
238 238
    mul w32 %99 %96 4;
239 -
    call w64 %100 %97(%98, %99, 4);
239 +
    call ptr %100 %97(%98, %99, 4);
240 240
    load w64 %101 %8 0;
241 241
    mul w32 %102 %93 4;
242 242
    jmp @append34(0);
243 243
  @append34(w32 %103)
244 244
    br.ult w32 %103 %102 @append35 @append36;
245 245
  @append35
246 -
    add w64 %104 %101 %103;
246 +
    add ptr %104 %101 %103;
247 247
    load w8 %105 %104 0;
248 -
    add w64 %106 %100 %103;
248 +
    add ptr %106 %100 %103;
249 249
    store w8 %105 %106 0;
250 250
    add w32 %107 %103 1;
251 251
    jmp @append34(%107);
252 252
  @append36
253 253
    store w64 %100 %8 0;
265 265
    load w32 %119 %8 12;
266 266
    br.ult w32 %118 %119 @append.store41 @append.grow42;
267 267
  @append.store41
268 268
    load w64 %133 %8 0;
269 269
    mul w64 %134 %118 4;
270 -
    add w64 %135 %133 %134;
270 +
    add ptr %135 %133 %134;
271 271
    store w32 50 %135 0;
272 272
    add w32 %136 %118 1;
273 273
    store w32 %136 %8 8;
274 274
    load w32 %139 %8 8;
275 275
    br.ne w32 %139 5 @then46 @merge47;
277 277
    shl w32 %120 %119 1;
278 278
    or w32 %121 %120 1;
279 279
    load w64 %122 %5 0;
280 280
    load w64 %123 %5 8;
281 281
    mul w32 %124 %121 4;
282 -
    call w64 %125 %122(%123, %124, 4);
282 +
    call ptr %125 %122(%123, %124, 4);
283 283
    load w64 %126 %8 0;
284 284
    mul w32 %127 %118 4;
285 285
    jmp @append43(0);
286 286
  @append43(w32 %128)
287 287
    br.ult w32 %128 %127 @append44 @append45;
288 288
  @append44
289 -
    add w64 %129 %126 %128;
289 +
    add ptr %129 %126 %128;
290 290
    load w8 %130 %129 0;
291 -
    add w64 %131 %125 %128;
291 +
    add ptr %131 %125 %128;
292 292
    store w8 %130 %131 0;
293 293
    add w32 %132 %128 1;
294 294
    jmp @append43(%132);
295 295
  @append45
296 296
    store w64 %125 %8 0;
312 312
    load w32 %146 %8 8;
313 313
    br.ult w32 0 %146 @guard#pass56 @guard#trap57;
314 314
  @guard#pass52
315 315
    load w64 %142 %8 0;
316 316
    mul w64 %143 4 4;
317 -
    add w64 %144 %142 %143;
317 +
    add ptr %144 %142 %143;
318 318
    sload w32 %145 %144 0;
319 319
    br.ne w32 %145 50 @then50 @merge51;
320 320
  @guard#trap53
321 321
    ebreak;
322 322
    unreachable;
334 334
    unreachable;
335 335
  @then58
336 336
    ret 12;
337 337
  @merge59
338 338
    reserve %164 16 8;
339 -
    store w64 %7 %164 0;
339 +
    store ptr %7 %164 0;
340 340
    store w32 0 %164 8;
341 341
    store w32 0 %164 12;
342 342
    load w32 %167 %164 8;
343 343
    load w32 %168 %164 12;
344 344
    br.ult w32 %167 %168 @append.store62 @append.grow63;
345 345
  @guard#pass60
346 346
    load w64 %150 %8 0;
347 347
    mul w64 %151 3 4;
348 -
    add w64 %152 %150 %151;
348 +
    add ptr %152 %150 %151;
349 349
    sload w32 %153 %152 0;
350 350
    br.ne w32 %153 40 @then58 @merge59;
351 351
  @guard#trap61
352 352
    ebreak;
353 353
    unreachable;
354 354
  @append.store62
355 355
    load w64 %182 %164 0;
356 356
    mul w64 %183 %167 4;
357 -
    add w64 %184 %182 %183;
357 +
    add ptr %184 %182 %183;
358 358
    store w32 99 %184 0;
359 359
    add w32 %185 %167 1;
360 360
    store w32 %185 %164 8;
361 361
    load w32 %188 %164 8;
362 362
    br.ne w32 %188 1 @then67 @merge68;
364 364
    shl w32 %169 %168 1;
365 365
    or w32 %170 %169 1;
366 366
    load w64 %171 %5 0;
367 367
    load w64 %172 %5 8;
368 368
    mul w32 %173 %170 4;
369 -
    call w64 %174 %171(%172, %173, 4);
369 +
    call ptr %174 %171(%172, %173, 4);
370 370
    load w64 %175 %164 0;
371 371
    mul w32 %176 %167 4;
372 372
    jmp @append64(0);
373 373
  @append64(w32 %177)
374 374
    br.ult w32 %177 %176 @append65 @append66;
375 375
  @append65
376 -
    add w64 %178 %175 %177;
376 +
    add ptr %178 %175 %177;
377 377
    load w8 %179 %178 0;
378 -
    add w64 %180 %174 %177;
378 +
    add ptr %180 %174 %177;
379 379
    store w8 %179 %180 0;
380 380
    add w32 %181 %177 1;
381 381
    jmp @append64(%181);
382 382
  @append66
383 383
    store w64 %174 %164 0;
408 408
    unreachable;
409 409
  @loop75(w32 %197, w32 %201)
410 410
    br.slt w32 %197 %195 @body76 @merge77;
411 411
  @body76
412 412
    mul w64 %198 %197 4;
413 -
    add w64 %199 %196 %198;
413 +
    add ptr %199 %196 %198;
414 414
    sload w32 %200 %199 0;
415 415
    add w32 %202 %201 %200;
416 416
    add w32 %203 %197 1;
417 417
    jmp @loop75(%203, %202);
418 418
  @merge77
419 419
    br.ne w32 %201 150 @then78 @merge79;
420 420
  @then78
421 421
    ret 16;
422 422
  @merge79
423 -
    call w64 %217 $arenaAlloc(%3, 2, 1);
423 +
    call ptr %217 $arenaAlloc(%3, 2, 1);
424 424
    reserve %218 16 8;
425 -
    store w64 %217 %218 0;
425 +
    store ptr %217 %218 0;
426 426
    store w32 0 %218 8;
427 427
    store w32 2 %218 12;
428 428
    load w32 %222 %218 8;
429 429
    load w32 %223 %218 12;
430 430
    br.ult w32 %222 %223 @append.store80 @append.grow81;
431 431
  @append.store80
432 432
    load w64 %237 %218 0;
433 -
    add w64 %238 %237 %222;
433 +
    add ptr %238 %237 %222;
434 434
    store w8 171 %238 0;
435 435
    add w32 %239 %222 1;
436 436
    store w32 %239 %218 8;
437 437
    load w32 %244 %218 8;
438 438
    load w32 %245 %218 12;
441 441
    shl w32 %224 %223 1;
442 442
    or w32 %225 %224 1;
443 443
    load w64 %226 %5 0;
444 444
    load w64 %227 %5 8;
445 445
    mul w32 %228 %225 1;
446 -
    call w64 %229 %226(%227, %228, 1);
446 +
    call ptr %229 %226(%227, %228, 1);
447 447
    load w64 %230 %218 0;
448 448
    mul w32 %231 %222 1;
449 449
    jmp @append82(0);
450 450
  @append82(w32 %232)
451 451
    br.ult w32 %232 %231 @append83 @append84;
452 452
  @append83
453 -
    add w64 %233 %230 %232;
453 +
    add ptr %233 %230 %232;
454 454
    load w8 %234 %233 0;
455 -
    add w64 %235 %229 %232;
455 +
    add ptr %235 %229 %232;
456 456
    store w8 %234 %235 0;
457 457
    add w32 %236 %232 1;
458 458
    jmp @append82(%236);
459 459
  @append84
460 460
    store w64 %229 %218 0;
461 461
    store w32 %225 %218 12;
462 462
    jmp @append.store80;
463 463
  @append.store85
464 464
    load w64 %259 %218 0;
465 -
    add w64 %260 %259 %244;
465 +
    add ptr %260 %259 %244;
466 466
    store w8 205 %260 0;
467 467
    add w32 %261 %244 1;
468 468
    store w32 %261 %218 8;
469 469
    load w32 %264 %218 8;
470 470
    br.ne w32 %264 2 @then90 @merge91;
472 472
    shl w32 %246 %245 1;
473 473
    or w32 %247 %246 1;
474 474
    load w64 %248 %5 0;
475 475
    load w64 %249 %5 8;
476 476
    mul w32 %250 %247 1;
477 -
    call w64 %251 %248(%249, %250, 1);
477 +
    call ptr %251 %248(%249, %250, 1);
478 478
    load w64 %252 %218 0;
479 479
    mul w32 %253 %244 1;
480 480
    jmp @append87(0);
481 481
  @append87(w32 %254)
482 482
    br.ult w32 %254 %253 @append88 @append89;
483 483
  @append88
484 -
    add w64 %255 %252 %254;
484 +
    add ptr %255 %252 %254;
485 485
    load w8 %256 %255 0;
486 -
    add w64 %257 %251 %254;
486 +
    add ptr %257 %251 %254;
487 487
    store w8 %256 %257 0;
488 488
    add w32 %258 %254 1;
489 489
    jmp @append87(%258);
490 490
  @append89
491 491
    store w64 %251 %218 0;
514 514
    load w32 %274 %218 8;
515 515
    load w32 %275 %218 12;
516 516
    br.ult w32 %274 %275 @append.store100 @append.grow101;
517 517
  @guard#pass98
518 518
    load w64 %269 %218 0;
519 -
    add w64 %270 %269 1;
519 +
    add ptr %270 %269 1;
520 520
    load w8 %271 %270 0;
521 521
    br.ne w8 %271 205 @then96 @merge97;
522 522
  @guard#trap99
523 523
    ebreak;
524 524
    unreachable;
525 525
  @append.store100
526 526
    load w64 %289 %218 0;
527 -
    add w64 %290 %289 %274;
527 +
    add ptr %290 %289 %274;
528 528
    store w8 239 %290 0;
529 529
    add w32 %291 %274 1;
530 530
    store w32 %291 %218 8;
531 531
    load w32 %294 %218 8;
532 532
    br.ne w32 %294 3 @then105 @merge106;
534 534
    shl w32 %276 %275 1;
535 535
    or w32 %277 %276 1;
536 536
    load w64 %278 %5 0;
537 537
    load w64 %279 %5 8;
538 538
    mul w32 %280 %277 1;
539 -
    call w64 %281 %278(%279, %280, 1);
539 +
    call ptr %281 %278(%279, %280, 1);
540 540
    load w64 %282 %218 0;
541 541
    mul w32 %283 %274 1;
542 542
    jmp @append102(0);
543 543
  @append102(w32 %284)
544 544
    br.ult w32 %284 %283 @append103 @append104;
545 545
  @append103
546 -
    add w64 %285 %282 %284;
546 +
    add ptr %285 %282 %284;
547 547
    load w8 %286 %285 0;
548 -
    add w64 %287 %281 %284;
548 +
    add ptr %287 %281 %284;
549 549
    store w8 %286 %287 0;
550 550
    add w32 %288 %284 1;
551 551
    jmp @append102(%288);
552 552
  @append104
553 553
    store w64 %281 %218 0;
568 568
  @merge110
569 569
    load w32 %300 %218 8;
570 570
    br.ult w32 0 %300 @guard#pass115 @guard#trap116;
571 571
  @guard#pass111
572 572
    load w64 %297 %218 0;
573 -
    add w64 %298 %297 2;
573 +
    add ptr %298 %297 2;
574 574
    load w8 %299 %298 0;
575 575
    br.ne w8 %299 239 @then109 @merge110;
576 576
  @guard#trap112
577 577
    ebreak;
578 578
    unreachable;
579 579
  @then113
580 580
    ret 23;
581 581
  @merge114
582 582
    mul w32 %309 4 2;
583 -
    call w64 %310 $arenaAlloc(%3, %309, 4);
583 +
    call ptr %310 $arenaAlloc(%3, %309, 4);
584 584
    reserve %311 16 8;
585 -
    store w64 %310 %311 0;
585 +
    store ptr %310 %311 0;
586 586
    store w32 0 %311 8;
587 587
    store w32 2 %311 12;
588 588
    load w32 %314 %311 8;
589 589
    load w32 %315 %311 12;
590 590
    br.ult w32 %314 %315 @append.store117 @append.grow118;
596 596
    ebreak;
597 597
    unreachable;
598 598
  @append.store117
599 599
    load w64 %329 %311 0;
600 600
    mul w64 %330 %314 4;
601 -
    add w64 %331 %329 %330;
601 +
    add ptr %331 %329 %330;
602 602
    store w32 42 %331 0;
603 603
    add w32 %332 %314 1;
604 604
    store w32 %332 %311 8;
605 605
    blit %311 %311 16;
606 606
    load w32 %335 %311 8;
609 609
    shl w32 %316 %315 1;
610 610
    or w32 %317 %316 1;
611 611
    load w64 %318 %5 0;
612 612
    load w64 %319 %5 8;
613 613
    mul w32 %320 %317 4;
614 -
    call w64 %321 %318(%319, %320, 4);
614 +
    call ptr %321 %318(%319, %320, 4);
615 615
    load w64 %322 %311 0;
616 616
    mul w32 %323 %314 4;
617 617
    jmp @append119(0);
618 618
  @append119(w32 %324)
619 619
    br.ult w32 %324 %323 @append120 @append121;
620 620
  @append120
621 -
    add w64 %325 %322 %324;
621 +
    add ptr %325 %322 %324;
622 622
    load w8 %326 %325 0;
623 -
    add w64 %327 %321 %324;
623 +
    add ptr %327 %321 %324;
624 624
    store w8 %326 %327 0;
625 625
    add w32 %328 %324 1;
626 626
    jmp @append119(%328);
627 627
  @append121
628 628
    store w64 %321 %311 0;
647 647
    ebreak;
648 648
    unreachable;
649 649
  @append.store128
650 650
    load w64 %356 %311 0;
651 651
    mul w64 %357 %341 4;
652 -
    add w64 %358 %356 %357;
652 +
    add ptr %358 %356 %357;
653 653
    store w32 43 %358 0;
654 654
    add w32 %359 %341 1;
655 655
    store w32 %359 %311 8;
656 656
    blit %311 %311 16;
657 657
    load w32 %362 %311 8;
660 660
    shl w32 %343 %342 1;
661 661
    or w32 %344 %343 1;
662 662
    load w64 %345 %5 0;
663 663
    load w64 %346 %5 8;
664 664
    mul w32 %347 %344 4;
665 -
    call w64 %348 %345(%346, %347, 4);
665 +
    call ptr %348 %345(%346, %347, 4);
666 666
    load w64 %349 %311 0;
667 667
    mul w32 %350 %341 4;
668 668
    jmp @append130(0);
669 669
  @append130(w32 %351)
670 670
    br.ult w32 %351 %350 @append131 @append132;
671 671
  @append131
672 -
    add w64 %352 %349 %351;
672 +
    add ptr %352 %349 %351;
673 673
    load w8 %353 %352 0;
674 -
    add w64 %354 %348 %351;
674 +
    add ptr %354 %348 %351;
675 675
    store w8 %353 %354 0;
676 676
    add w32 %355 %351 1;
677 677
    jmp @append130(%355);
678 678
  @append132
679 679
    store w64 %348 %311 0;
693 693
    ebreak;
694 694
    unreachable;
695 695
  @append.store137
696 696
    load w64 %382 %311 0;
697 697
    mul w64 %383 %367 4;
698 -
    add w64 %384 %382 %383;
698 +
    add ptr %384 %382 %383;
699 699
    store w32 44 %384 0;
700 700
    add w32 %385 %367 1;
701 701
    store w32 %385 %311 8;
702 702
    blit %311 %311 16;
703 703
    load w32 %388 %311 8;
706 706
    shl w32 %369 %368 1;
707 707
    or w32 %370 %369 1;
708 708
    load w64 %371 %5 0;
709 709
    load w64 %372 %5 8;
710 710
    mul w32 %373 %370 4;
711 -
    call w64 %374 %371(%372, %373, 4);
711 +
    call ptr %374 %371(%372, %373, 4);
712 712
    load w64 %375 %311 0;
713 713
    mul w32 %376 %367 4;
714 714
    jmp @append139(0);
715 715
  @append139(w32 %377)
716 716
    br.ult w32 %377 %376 @append140 @append141;
717 717
  @append140
718 -
    add w64 %378 %375 %377;
718 +
    add ptr %378 %375 %377;
719 719
    load w8 %379 %378 0;
720 -
    add w64 %380 %374 %377;
720 +
    add ptr %380 %374 %377;
721 721
    store w8 %379 %380 0;
722 722
    add w32 %381 %377 1;
723 723
    jmp @append139(%381);
724 724
  @append141
725 725
    store w64 %374 %311 0;
735 735
  @assert.ok145
736 736
    load w32 %390 %311 8;
737 737
    br.ult w32 0 %390 @guard#pass146 @guard#trap147;
738 738
  @guard#pass146
739 739
    load w64 %391 %311 0;
740 -
    br.ne w64 %364 %391 @assert.ok149 @assert.fail148;
740 +
    br.ne ptr %364 %391 @assert.ok149 @assert.fail148;
741 741
  @guard#trap147
742 742
    ebreak;
743 743
    unreachable;
744 744
  @assert.fail148
745 745
    unreachable;
764 764
    load w32 %402 %311 8;
765 765
    br.ult w32 2 %402 @guard#pass160 @guard#trap161;
766 766
  @guard#pass156
767 767
    load w64 %398 %311 0;
768 768
    mul w64 %399 1 4;
769 -
    add w64 %400 %398 %399;
769 +
    add ptr %400 %398 %399;
770 770
    sload w32 %401 %400 0;
771 771
    br.eq w32 %401 43 @assert.ok155 @assert.fail154;
772 772
  @guard#trap157
773 773
    ebreak;
774 774
    unreachable;
777 777
  @assert.ok159
778 778
    ret 0;
779 779
  @guard#pass160
780 780
    load w64 %403 %311 0;
781 781
    mul w64 %404 2 4;
782 -
    add w64 %405 %403 %404;
782 +
    add ptr %405 %403 %404;
783 783
    sload w32 %406 %405 0;
784 784
    br.eq w32 %406 44 @assert.ok159 @assert.fail158;
785 785
  @guard#trap161
786 786
    ebreak;
787 787
    unreachable;
788 788
}
789 -
test/tests/slice.basic.ril +9 -9
1 -
fn w32 $sliceLen(w64 %0) {
1 +
fn w32 $sliceLen(ptr %0) {
2 2
  @entry0
3 3
    load w32 %1 %0 8;
4 4
    ret %1;
5 5
}
6 6
7 -
fn w32 $sliceCap(w64 %0) {
7 +
fn w32 $sliceCap(ptr %0) {
8 8
  @entry0
9 9
    load w32 %1 %0 12;
10 10
    ret %1;
11 11
}
12 12
13 -
fn w64 $slicePtr(w64 %0) {
13 +
fn ptr $slicePtr(ptr %0) {
14 14
  @entry0
15 -
    load w64 %1 %0 0;
15 +
    load ptr %1 %0 0;
16 16
    ret %1;
17 17
}
18 18
19 -
fn w64 $sliceCopy(w64 %0, w64 %1) {
19 +
fn ptr $sliceCopy(ptr %0, ptr %1) {
20 20
  @entry0
21 21
    reserve %2 16 8;
22 22
    blit %2 %1 16;
23 23
    blit %0 %2 16;
24 24
    ret %0;
25 25
}
26 26
27 -
fn w64 $sliceOf(w64 %0, w64 %1, w32 %2) {
27 +
fn ptr $sliceOf(ptr %0, ptr %1, w32 %2) {
28 28
  @entry0
29 29
    reserve %3 16 8;
30 -
    store w64 %1 %3 0;
30 +
    store ptr %1 %3 0;
31 31
    store w32 %2 %3 8;
32 32
    store w32 %2 %3 12;
33 33
    blit %0 %3 16;
34 34
    ret %0;
35 35
}
36 36
37 -
fn w64 $sliceOfWithCap(w64 %0, w64 %1, w32 %2, w32 %3) {
37 +
fn ptr $sliceOfWithCap(ptr %0, ptr %1, w32 %2, w32 %3) {
38 38
  @entry0
39 39
    reserve %4 16 8;
40 -
    store w64 %1 %4 0;
40 +
    store ptr %1 %4 0;
41 41
    store w32 %2 %4 8;
42 42
    store w32 %3 %4 12;
43 43
    blit %0 %4 16;
44 44
    ret %0;
45 45
}
test/tests/slice.delete.ril +18 -19
5 5
    store w32 20 %0 4;
6 6
    store w32 30 %0 8;
7 7
    store w32 40 %0 12;
8 8
    store w32 50 %0 16;
9 9
    reserve %1 16 8;
10 -
    store w64 %0 %1 0;
10 +
    store ptr %0 %1 0;
11 11
    store w32 5 %1 8;
12 12
    store w32 5 %1 12;
13 13
    load w32 %2 %1 8;
14 14
    br.ult w32 2 %2 @guard#pass1 @guard#trap2;
15 15
  @guard#pass1
16 16
    load w64 %3 %1 0;
17 17
    mul w64 %4 2 4;
18 -
    add w64 %5 %3 %4;
19 -
    add w64 %6 %5 4;
18 +
    add ptr %5 %3 %4;
19 +
    add ptr %6 %5 4;
20 20
    sub w32 %7 %2 2;
21 21
    sub w32 %8 %7 1;
22 22
    mul w32 %9 %8 4;
23 23
    jmp @delete3(0);
24 24
  @guard#trap2
25 25
    ebreak;
26 26
    unreachable;
27 27
  @delete3(w32 %10)
28 28
    br.ult w32 %10 %9 @delete4 @delete5;
29 29
  @delete4
30 -
    add w64 %11 %6 %10;
30 +
    add ptr %11 %6 %10;
31 31
    load w8 %12 %11 0;
32 -
    add w64 %13 %5 %10;
32 +
    add ptr %13 %5 %10;
33 33
    store w8 %12 %13 0;
34 34
    add w32 %14 %10 1;
35 35
    jmp @delete3(%14);
36 36
  @delete5
37 37
    sub w32 %15 %2 1;
61 61
    load w32 %26 %1 8;
62 62
    br.ult w32 2 %26 @guard#pass18 @guard#trap19;
63 63
  @guard#pass14
64 64
    load w64 %22 %1 0;
65 65
    mul w64 %23 1 4;
66 -
    add w64 %24 %22 %23;
66 +
    add ptr %24 %22 %23;
67 67
    sload w32 %25 %24 0;
68 68
    br.ne w32 %25 20 @then12 @merge13;
69 69
  @guard#trap15
70 70
    ebreak;
71 71
    unreachable;
75 75
    load w32 %31 %1 8;
76 76
    br.ult w32 3 %31 @guard#pass22 @guard#trap23;
77 77
  @guard#pass18
78 78
    load w64 %27 %1 0;
79 79
    mul w64 %28 2 4;
80 -
    add w64 %29 %27 %28;
80 +
    add ptr %29 %27 %28;
81 81
    sload w32 %30 %29 0;
82 82
    br.ne w32 %30 40 @then16 @merge17;
83 83
  @guard#trap19
84 84
    ebreak;
85 85
    unreachable;
89 89
    load w32 %36 %1 8;
90 90
    br.ult w32 0 %36 @guard#pass24 @guard#trap25;
91 91
  @guard#pass22
92 92
    load w64 %32 %1 0;
93 93
    mul w64 %33 3 4;
94 -
    add w64 %34 %32 %33;
94 +
    add ptr %34 %32 %33;
95 95
    sload w32 %35 %34 0;
96 96
    br.ne w32 %35 50 @then20 @merge21;
97 97
  @guard#trap23
98 98
    ebreak;
99 99
    unreachable;
100 100
  @guard#pass24
101 101
    load w64 %37 %1 0;
102 -
    add w64 %38 %37 4;
102 +
    add ptr %38 %37 4;
103 103
    sub w32 %39 %36 0;
104 104
    sub w32 %40 %39 1;
105 105
    mul w32 %41 %40 4;
106 106
    jmp @delete26(0);
107 107
  @guard#trap25
108 108
    ebreak;
109 109
    unreachable;
110 110
  @delete26(w32 %42)
111 111
    br.ult w32 %42 %41 @delete27 @delete28;
112 112
  @delete27
113 -
    add w64 %43 %38 %42;
113 +
    add ptr %43 %38 %42;
114 114
    load w8 %44 %43 0;
115 -
    add w64 %45 %37 %42;
115 +
    add ptr %45 %37 %42;
116 116
    store w8 %44 %45 0;
117 117
    add w32 %46 %42 1;
118 118
    jmp @delete26(%46);
119 119
  @delete28
120 120
    sub w32 %47 %36 1;
144 144
    load w32 %58 %1 8;
145 145
    br.ult w32 2 %58 @guard#pass41 @guard#trap42;
146 146
  @guard#pass37
147 147
    load w64 %54 %1 0;
148 148
    mul w64 %55 1 4;
149 -
    add w64 %56 %54 %55;
149 +
    add ptr %56 %54 %55;
150 150
    sload w32 %57 %56 0;
151 151
    br.ne w32 %57 40 @then35 @merge36;
152 152
  @guard#trap38
153 153
    ebreak;
154 154
    unreachable;
158 158
    load w32 %63 %1 8;
159 159
    br.ult w32 2 %63 @guard#pass43 @guard#trap44;
160 160
  @guard#pass41
161 161
    load w64 %59 %1 0;
162 162
    mul w64 %60 2 4;
163 -
    add w64 %61 %59 %60;
163 +
    add ptr %61 %59 %60;
164 164
    sload w32 %62 %61 0;
165 165
    br.ne w32 %62 50 @then39 @merge40;
166 166
  @guard#trap42
167 167
    ebreak;
168 168
    unreachable;
169 169
  @guard#pass43
170 170
    load w64 %64 %1 0;
171 171
    mul w64 %65 2 4;
172 -
    add w64 %66 %64 %65;
173 -
    add w64 %67 %66 4;
172 +
    add ptr %66 %64 %65;
173 +
    add ptr %67 %66 4;
174 174
    sub w32 %68 %63 2;
175 175
    sub w32 %69 %68 1;
176 176
    mul w32 %70 %69 4;
177 177
    jmp @delete45(0);
178 178
  @guard#trap44
179 179
    ebreak;
180 180
    unreachable;
181 181
  @delete45(w32 %71)
182 182
    br.ult w32 %71 %70 @delete46 @delete47;
183 183
  @delete46
184 -
    add w64 %72 %67 %71;
184 +
    add ptr %72 %67 %71;
185 185
    load w8 %73 %72 0;
186 -
    add w64 %74 %66 %71;
186 +
    add ptr %74 %66 %71;
187 187
    store w8 %73 %74 0;
188 188
    add w32 %75 %71 1;
189 189
    jmp @delete45(%75);
190 190
  @delete47
191 191
    sub w32 %76 %63 1;
215 215
    load w32 %87 %1 12;
216 216
    br.ne w32 %87 5 @then58 @merge59;
217 217
  @guard#pass56
218 218
    load w64 %83 %1 0;
219 219
    mul w64 %84 1 4;
220 -
    add w64 %85 %83 %84;
220 +
    add ptr %85 %83 %84;
221 221
    sload w32 %86 %85 0;
222 222
    br.ne w32 %86 40 @then54 @merge55;
223 223
  @guard#trap57
224 224
    ebreak;
225 225
    unreachable;
226 226
  @then58
227 227
    ret 13;
228 228
  @merge59
229 229
    ret 0;
230 230
}
231 -
test/tests/slice.eq.ril +4 -4
1 -
fn w8 $sliceEq(w64 %0, w64 %1) {
1 +
fn w8 $sliceEq(ptr %0, ptr %1) {
2 2
  @entry0
3 -
    load w64 %2 %0 0;
4 -
    load w64 %3 %1 0;
5 -
    eq w64 %4 %2 %3;
3 +
    load ptr %2 %0 0;
4 +
    load ptr %3 %1 0;
5 +
    eq ptr %4 %2 %3;
6 6
    load w32 %5 %0 8;
7 7
    load w32 %6 %1 8;
8 8
    eq w32 %7 %5 %6;
9 9
    and w32 %8 %4 %7;
10 10
    ret %8;
test/tests/slice.index.ril +2 -2
1 -
fn w32 $sliceIndex(w64 %0, w32 %1) {
1 +
fn w32 $sliceIndex(ptr %0, w32 %1) {
2 2
  @entry0
3 3
    load w32 %2 %0 8;
4 4
    br.ult w32 %1 %2 @guard#pass1 @guard#trap2;
5 5
  @guard#pass1
6 6
    load w64 %3 %0 0;
7 7
    mul w64 %4 %1 4;
8 -
    add w64 %5 %3 %4;
8 +
    add ptr %5 %3 %4;
9 9
    sload w32 %6 %5 0;
10 10
    ret %6;
11 11
  @guard#trap2
12 12
    ebreak;
13 13
    unreachable;
test/tests/slice.mutable.ril +10 -10
1 -
fn w64 $mutSliceStore(w64 %0, w32 %1, w32 %2) {
1 +
fn w64 $mutSliceStore(ptr %0, w32 %1, w32 %2) {
2 2
  @entry0
3 3
    load w32 %3 %0 8;
4 4
    br.ult w32 %1 %3 @guard#pass1 @guard#trap2;
5 5
  @guard#pass1
6 6
    load w64 %4 %0 0;
7 7
    mul w64 %5 %1 4;
8 -
    add w64 %6 %4 %5;
8 +
    add ptr %6 %4 %5;
9 9
    store w32 %2 %6 0;
10 10
    ret;
11 11
  @guard#trap2
12 12
    ebreak;
13 13
    unreachable;
14 14
}
15 15
16 -
fn w64 $mutSliceIncrement(w64 %0, w32 %1) {
16 +
fn w64 $mutSliceIncrement(ptr %0, w32 %1) {
17 17
  @entry0
18 18
    load w32 %2 %0 8;
19 19
    br.ult w32 %1 %2 @guard#pass1 @guard#trap2;
20 20
  @guard#pass1
21 21
    load w64 %3 %0 0;
22 22
    mul w64 %4 %1 4;
23 -
    add w64 %5 %3 %4;
23 +
    add ptr %5 %3 %4;
24 24
    sload w32 %6 %5 0;
25 25
    add w32 %7 %6 1;
26 26
    load w32 %8 %0 8;
27 27
    br.ult w32 %1 %8 @guard#pass3 @guard#trap4;
28 28
  @guard#trap2
29 29
    ebreak;
30 30
    unreachable;
31 31
  @guard#pass3
32 32
    load w64 %9 %0 0;
33 33
    mul w64 %10 %1 4;
34 -
    add w64 %11 %9 %10;
34 +
    add ptr %11 %9 %10;
35 35
    store w32 %7 %11 0;
36 36
    ret;
37 37
  @guard#trap4
38 38
    ebreak;
39 39
    unreachable;
40 40
}
41 41
42 -
fn w64 $mutSliceSwap(w64 %0, w32 %1, w32 %2) {
42 +
fn w64 $mutSliceSwap(ptr %0, w32 %1, w32 %2) {
43 43
  @entry0
44 44
    load w32 %3 %0 8;
45 45
    br.ult w32 %1 %3 @guard#pass1 @guard#trap2;
46 46
  @guard#pass1
47 47
    load w64 %4 %0 0;
48 48
    mul w64 %5 %1 4;
49 -
    add w64 %6 %4 %5;
49 +
    add ptr %6 %4 %5;
50 50
    sload w32 %7 %6 0;
51 51
    load w32 %8 %0 8;
52 52
    br.ult w32 %2 %8 @guard#pass3 @guard#trap4;
53 53
  @guard#trap2
54 54
    ebreak;
55 55
    unreachable;
56 56
  @guard#pass3
57 57
    load w64 %9 %0 0;
58 58
    mul w64 %10 %2 4;
59 -
    add w64 %11 %9 %10;
59 +
    add ptr %11 %9 %10;
60 60
    sload w32 %12 %11 0;
61 61
    load w32 %13 %0 8;
62 62
    br.ult w32 %1 %13 @guard#pass5 @guard#trap6;
63 63
  @guard#trap4
64 64
    ebreak;
65 65
    unreachable;
66 66
  @guard#pass5
67 67
    load w64 %14 %0 0;
68 68
    mul w64 %15 %1 4;
69 -
    add w64 %16 %14 %15;
69 +
    add ptr %16 %14 %15;
70 70
    store w32 %12 %16 0;
71 71
    load w32 %17 %0 8;
72 72
    br.ult w32 %2 %17 @guard#pass7 @guard#trap8;
73 73
  @guard#trap6
74 74
    ebreak;
75 75
    unreachable;
76 76
  @guard#pass7
77 77
    load w64 %18 %0 0;
78 78
    mul w64 %19 %2 4;
79 -
    add w64 %20 %18 %19;
79 +
    add ptr %20 %18 %19;
80 80
    store w32 %7 %20 0;
81 81
    ret;
82 82
  @guard#trap8
83 83
    ebreak;
84 84
    unreachable;
test/tests/slice.range.ril +13 -13
1 -
fn w64 $sliceRange(w64 %0, w64 %1, w32 %2, w32 %3) {
1 +
fn ptr $sliceRange(ptr %0, ptr %1, w32 %2, w32 %3) {
2 2
  @entry0
3 3
    load w64 %4 %1 0;
4 4
    load w32 %5 %1 8;
5 5
    mul w64 %6 %2 4;
6 -
    add w64 %7 %4 %6;
6 +
    add ptr %7 %4 %6;
7 7
    sub w32 %8 %3 %2;
8 8
    reserve %9 16 8;
9 -
    store w64 %7 %9 0;
9 +
    store ptr %7 %9 0;
10 10
    store w32 %8 %9 8;
11 11
    store w32 %8 %9 12;
12 12
    blit %0 %9 16;
13 13
    ret %0;
14 14
}
15 15
16 -
fn w64 $sliceRangeOpenEnd(w64 %0, w64 %1, w32 %2) {
16 +
fn ptr $sliceRangeOpenEnd(ptr %0, ptr %1, w32 %2) {
17 17
  @entry0
18 18
    load w64 %3 %1 0;
19 19
    load w32 %4 %1 8;
20 20
    mul w64 %5 %2 4;
21 -
    add w64 %6 %3 %5;
21 +
    add ptr %6 %3 %5;
22 22
    sub w32 %7 %4 %2;
23 23
    reserve %8 16 8;
24 -
    store w64 %6 %8 0;
24 +
    store ptr %6 %8 0;
25 25
    store w32 %7 %8 8;
26 26
    store w32 %7 %8 12;
27 27
    blit %0 %8 16;
28 28
    ret %0;
29 29
}
30 30
31 -
fn w64 $sliceRangeOpenStart(w64 %0, w64 %1, w32 %2) {
31 +
fn ptr $sliceRangeOpenStart(ptr %0, ptr %1, w32 %2) {
32 32
  @entry0
33 33
    load w64 %3 %1 0;
34 34
    load w32 %4 %1 8;
35 35
    reserve %5 16 8;
36 -
    store w64 %3 %5 0;
36 +
    store ptr %3 %5 0;
37 37
    store w32 %2 %5 8;
38 38
    store w32 %2 %5 12;
39 39
    blit %0 %5 16;
40 40
    ret %0;
41 41
}
42 42
43 -
fn w64 $sliceRangeFull(w64 %0, w64 %1) {
43 +
fn ptr $sliceRangeFull(ptr %0, ptr %1) {
44 44
  @entry0
45 45
    load w64 %2 %1 0;
46 46
    load w32 %3 %1 8;
47 47
    reserve %4 16 8;
48 -
    store w64 %2 %4 0;
48 +
    store ptr %2 %4 0;
49 49
    store w32 %3 %4 8;
50 50
    store w32 %3 %4 12;
51 51
    blit %0 %4 16;
52 52
    ret %0;
53 53
}
54 54
55 -
fn w64 $sliceArray(w64 %0, w64 %1) {
55 +
fn ptr $sliceArray(ptr %0, ptr %1) {
56 56
  @entry0
57 57
    mul w64 %2 1 4;
58 -
    add w64 %3 %1 %2;
58 +
    add ptr %3 %1 %2;
59 59
    sub w32 %4 3 1;
60 60
    reserve %5 16 8;
61 -
    store w64 %3 %5 0;
61 +
    store ptr %3 %5 0;
62 62
    store w32 %4 %5 8;
63 63
    store w32 %4 %5 12;
64 64
    blit %0 %5 16;
65 65
    ret %0;
66 66
}
test/tests/slice.runtime.i32.ril +6 -6
1 -
fn w64 $sliceWithVar(w64 %0, w32 %1) {
1 +
fn ptr $sliceWithVar(ptr %0, w32 %1) {
2 2
  @entry0
3 3
    reserve %2 4 4;
4 4
    store w32 %1 %2 0;
5 5
    reserve %3 16 8;
6 -
    store w64 %2 %3 0;
6 +
    store ptr %2 %3 0;
7 7
    store w32 1 %3 8;
8 8
    store w32 1 %3 12;
9 9
    blit %0 %3 16;
10 10
    ret %0;
11 11
}
12 12
13 -
fn w64 $sliceWithVars(w64 %0, w32 %1, w32 %2) {
13 +
fn ptr $sliceWithVars(ptr %0, w32 %1, w32 %2) {
14 14
  @entry0
15 15
    reserve %3 8 4;
16 16
    store w32 %1 %3 0;
17 17
    store w32 %2 %3 4;
18 18
    reserve %4 16 8;
19 -
    store w64 %3 %4 0;
19 +
    store ptr %3 %4 0;
20 20
    store w32 2 %4 8;
21 21
    store w32 2 %4 12;
22 22
    blit %0 %4 16;
23 23
    ret %0;
24 24
}
25 25
26 -
fn w64 $sliceWithMixed(w64 %0, w32 %1) {
26 +
fn ptr $sliceWithMixed(ptr %0, w32 %1) {
27 27
  @entry0
28 28
    reserve %2 12 4;
29 29
    store w32 %1 %2 0;
30 30
    store w32 42 %2 4;
31 31
    store w32 %1 %2 8;
32 32
    reserve %3 16 8;
33 -
    store w64 %2 %3 0;
33 +
    store ptr %2 %3 0;
34 34
    store w32 3 %3 8;
35 35
    store w32 3 %3 12;
36 36
    blit %0 %3 16;
37 37
    ret %0;
38 38
}
test/tests/slice.runtime.literal.ril +4 -4
1 -
fn w64 $sliceWithVar(w64 %0, w8 %1) {
1 +
fn ptr $sliceWithVar(ptr %0, w8 %1) {
2 2
  @entry0
3 3
    reserve %2 1 1;
4 4
    store w8 %1 %2 0;
5 5
    reserve %3 16 8;
6 -
    store w64 %2 %3 0;
6 +
    store ptr %2 %3 0;
7 7
    store w32 1 %3 8;
8 8
    store w32 1 %3 12;
9 9
    blit %0 %3 16;
10 10
    ret %0;
11 11
}
12 12
13 -
fn w64 $sliceWithVars(w64 %0, w8 %1, w8 %2) {
13 +
fn ptr $sliceWithVars(ptr %0, w8 %1, w8 %2) {
14 14
  @entry0
15 15
    reserve %3 2 1;
16 16
    store w8 %1 %3 0;
17 17
    store w8 %2 %3 1;
18 18
    reserve %4 16 8;
19 -
    store w64 %3 %4 0;
19 +
    store ptr %3 %4 0;
20 20
    store w32 2 %4 8;
21 21
    store w32 2 %4 12;
22 22
    blit %0 %4 16;
23 23
    ret %0;
24 24
}
test/tests/trait.dispatch.ril +9 -9
1 1
data $"vtable::Acc::Ops" align 8 {
2 2
    fn $"Acc::get";
3 3
    fn $"Acc::set";
4 4
}
5 5
6 -
fn w32 $"Acc::get"(w64 %0) {
6 +
fn w32 $"Acc::get"(ptr %0) {
7 7
  @entry0
8 8
    sload w32 %1 %0 0;
9 9
    ret %1;
10 10
}
11 11
12 -
fn w64 $"Acc::set"(w64 %0, w32 %1) {
12 +
fn w64 $"Acc::set"(ptr %0, w32 %1) {
13 13
  @entry0
14 14
    store w32 %1 %0 0;
15 15
    ret;
16 16
}
17 17
18 -
fn w32 $dispatch(w64 %0) {
18 +
fn w32 $dispatch(ptr %0) {
19 19
  @entry0
20 -
    load w64 %1 %0 0;
21 -
    load w64 %2 %0 8;
22 -
    load w64 %3 %2 8;
20 +
    load ptr %1 %0 0;
21 +
    load ptr %2 %0 8;
22 +
    load ptr %3 %2 8;
23 23
    call w64 %3(%1, 42);
24 -
    load w64 %4 %0 0;
25 -
    load w64 %5 %0 8;
26 -
    load w64 %6 %5 0;
24 +
    load ptr %4 %0 0;
25 +
    load ptr %5 %0 8;
26 +
    load ptr %6 %5 0;
27 27
    call w32 %7 %6(%4);
28 28
    ret %7;
29 29
}
test/tests/trait.object.ril +6 -6
1 1
data $"vtable::Counter::Adder" align 8 {
2 2
    fn $"Counter::add";
3 3
}
4 4
5 -
fn w32 $"Counter::add"(w64 %0, w32 %1) {
5 +
fn w32 $"Counter::add"(ptr %0, w32 %1) {
6 6
  @entry0
7 7
    sload w32 %2 %0 0;
8 8
    add w32 %3 %2 %1;
9 9
    store w32 %3 %0 0;
10 10
    sload w32 %4 %0 0;
14 14
fn w32 $use_adder() {
15 15
  @entry0
16 16
    reserve %0 4 4;
17 17
    store w32 0 %0 0;
18 18
    reserve %1 16 8;
19 -
    store w64 %0 %1 0;
20 -
    store w64 $"vtable::Counter::Adder" %1 8;
21 -
    load w64 %2 %1 0;
22 -
    load w64 %3 %1 8;
23 -
    load w64 %4 %3 0;
19 +
    store ptr %0 %1 0;
20 +
    store ptr $"vtable::Counter::Adder" %1 8;
21 +
    load ptr %2 %1 0;
22 +
    load ptr %3 %1 8;
23 +
    load ptr %4 %3 0;
24 24
    call w32 %5 %4(%2, 1);
25 25
    ret %5;
26 26
}
test/tests/trait.supertrait.ril +28 -29
14 14
15 15
data $main0 align 1 {
16 16
    str "abc";
17 17
}
18 18
19 -
fn w32 $"Socket::read"(w64 %0, w64 %1) {
19 +
fn w32 $"Socket::read"(ptr %0, ptr %1) {
20 20
  @entry0
21 21
    jmp @while1(0, %1, %0);
22 -
  @while1(w32 %3, w64 %4, w64 %6)
22 +
  @while1(w32 %3, ptr %4, ptr %6)
23 23
    load w32 %5 %4 8;
24 24
    br.ult w32 %3 %5 @and#then4 @and#else5;
25 25
  @body2
26 26
    sload w32 %11 %6 32;
27 27
    br.ult w32 %11 32 @guard#pass7 @guard#trap8;
35 35
  @and#else5
36 36
    jmp @and#end6(0);
37 37
  @and#end6(w8 %2)
38 38
    br.ne w32 %2 0 @body2 @merge3;
39 39
  @guard#pass7
40 -
    add w64 %12 %6 %11;
40 +
    add ptr %12 %6 %11;
41 41
    load w8 %13 %12 0;
42 42
    load w32 %16 %4 8;
43 43
    br.ult w32 %3 %16 @guard#pass9 @guard#trap10;
44 44
  @guard#trap8
45 45
    ebreak;
46 46
    unreachable;
47 47
  @guard#pass9
48 48
    load w64 %17 %4 0;
49 -
    add w64 %18 %17 %3;
49 +
    add ptr %18 %17 %3;
50 50
    store w8 %13 %18 0;
51 51
    sload w32 %19 %6 32;
52 52
    add w32 %20 %19 1;
53 53
    store w32 %20 %6 32;
54 54
    add w32 %21 %3 1;
56 56
  @guard#trap10
57 57
    ebreak;
58 58
    unreachable;
59 59
}
60 60
61 -
fn w32 $"Socket::write"(w64 %0, w64 %1) {
61 +
fn w32 $"Socket::write"(ptr %0, ptr %1) {
62 62
  @entry0
63 63
    jmp @while1(0, %1, %0);
64 -
  @while1(w32 %2, w64 %3, w64 %5)
64 +
  @while1(w32 %2, ptr %3, ptr %5)
65 65
    load w32 %4 %3 8;
66 66
    br.ult w32 %2 %4 @body2 @merge3;
67 67
  @body2
68 68
    sload w32 %6 %5 72;
69 69
    br.slt w32 %6 32 @merge5 @then4;
76 76
  @merge5
77 77
    load w32 %8 %3 8;
78 78
    br.ult w32 %2 %8 @guard#pass6 @guard#trap7;
79 79
  @guard#pass6
80 80
    load w64 %9 %3 0;
81 -
    add w64 %10 %9 %2;
81 +
    add ptr %10 %9 %2;
82 82
    load w8 %11 %10 0;
83 83
    sload w32 %12 %5 72;
84 -
    add w64 %13 %5 40;
84 +
    add ptr %13 %5 40;
85 85
    br.ult w32 %12 32 @guard#pass8 @guard#trap9;
86 86
  @guard#trap7
87 87
    ebreak;
88 88
    unreachable;
89 89
  @guard#pass8
90 -
    add w64 %14 %13 %12;
90 +
    add ptr %14 %13 %12;
91 91
    store w8 %11 %14 0;
92 92
    sload w32 %15 %5 72;
93 93
    add w32 %16 %15 1;
94 94
    store w32 %16 %5 72;
95 95
    add w32 %17 %2 1;
97 97
  @guard#trap9
98 98
    ebreak;
99 99
    unreachable;
100 100
}
101 101
102 -
fn w32 $"Socket::flush"(w64 %0) {
102 +
fn w32 $"Socket::flush"(ptr %0) {
103 103
  @entry0
104 104
    sload w32 %1 %0 72;
105 105
    store w32 0 %0 72;
106 106
    ret %1;
107 107
}
111 111
    reserve %0 76 4;
112 112
    store w32 0 %0 32;
113 113
    store w32 5 %0 36;
114 114
    store w32 0 %0 72;
115 115
    store w8 104 %0 0;
116 -
    add w64 %1 %0 1;
116 +
    add ptr %1 %0 1;
117 117
    store w8 101 %1 0;
118 -
    add w64 %2 %0 2;
118 +
    add ptr %2 %0 2;
119 119
    store w8 108 %2 0;
120 -
    add w64 %3 %0 3;
120 +
    add ptr %3 %0 3;
121 121
    store w8 108 %3 0;
122 -
    add w64 %4 %0 4;
122 +
    add ptr %4 %0 4;
123 123
    store w8 111 %4 0;
124 124
    reserve %5 16 8;
125 -
    store w64 %0 %5 0;
126 -
    store w64 $"vtable::Socket::ReadWriter" %5 8;
127 -
    load w64 %6 %5 0;
128 -
    load w64 %7 %5 8;
129 -
    load w64 %8 %7 8;
125 +
    store ptr %0 %5 0;
126 +
    store ptr $"vtable::Socket::ReadWriter" %5 8;
127 +
    load ptr %6 %5 0;
128 +
    load ptr %7 %5 8;
129 +
    load ptr %8 %7 8;
130 130
    copy %9 $main0;
131 131
    reserve %10 16 8;
132 -
    store w64 %9 %10 0;
132 +
    store ptr %9 %10 0;
133 133
    store w32 3 %10 8;
134 134
    store w32 3 %10 12;
135 135
    call w32 %11 %8(%6, %10);
136 136
    br.eq w32 %11 3 @assert.ok2 @assert.fail1;
137 137
  @assert.fail1
141 141
    br.eq w32 %12 3 @assert.ok4 @assert.fail3;
142 142
  @assert.fail3
143 143
    unreachable;
144 144
  @assert.ok4
145 145
    reserve %13 8 1;
146 -
    load w64 %14 %5 0;
147 -
    load w64 %15 %5 8;
148 -
    load w64 %16 %15 0;
146 +
    load ptr %14 %5 0;
147 +
    load ptr %15 %5 8;
148 +
    load ptr %16 %15 0;
149 149
    reserve %17 16 8;
150 -
    store w64 %13 %17 0;
150 +
    store ptr %13 %17 0;
151 151
    store w32 8 %17 8;
152 152
    store w32 8 %17 12;
153 153
    call w32 %18 %16(%14, %17);
154 154
    br.eq w32 %18 5 @assert.ok6 @assert.fail5;
155 155
  @assert.fail5
158 158
    load w8 %19 %13 0;
159 159
    br.eq w8 %19 104 @assert.ok8 @assert.fail7;
160 160
  @assert.fail7
161 161
    unreachable;
162 162
  @assert.ok8
163 -
    add w64 %20 %13 4;
163 +
    add ptr %20 %13 4;
164 164
    load w8 %21 %20 0;
165 165
    br.eq w8 %21 111 @assert.ok10 @assert.fail9;
166 166
  @assert.fail9
167 167
    unreachable;
168 168
  @assert.ok10
169 -
    load w64 %22 %5 0;
170 -
    load w64 %23 %5 8;
171 -
    load w64 %24 %23 16;
169 +
    load ptr %22 %5 0;
170 +
    load ptr %23 %5 8;
171 +
    load ptr %24 %23 16;
172 172
    call w32 %25 %24(%22);
173 173
    br.eq w32 %25 3 @assert.ok12 @assert.fail11;
174 174
  @assert.fail11
175 175
    unreachable;
176 176
  @assert.ok12
179 179
  @assert.fail13
180 180
    unreachable;
181 181
  @assert.ok14
182 182
    ret 0;
183 183
}
184 -
test/tests/try.basic.ril +5 -5
1 -
fn w64 $fallible(w64 %0, w8 %1) {
1 +
fn ptr $fallible(ptr %0, w8 %1) {
2 2
  @entry0
3 3
    br.ne w32 %1 0 @then1 @merge2;
4 4
  @then1
5 5
    reserve %2 1 1;
6 6
    store w8 0 %2 0;
15 15
    store w32 7 %4 8;
16 16
    blit %0 %4 12;
17 17
    ret %0;
18 18
}
19 19
20 -
fn w64 $caller(w64 %0, w8 %1) {
20 +
fn ptr $caller(ptr %0, w8 %1) {
21 21
  @entry0
22 22
    reserve %2 12 8;
23 -
    call w64 %3 $fallible(%2, %1);
23 +
    call ptr %3 $fallible(%2, %1);
24 24
    load w64 %4 %3 0;
25 25
    reserve %5 4 4;
26 26
    br.ne w32 %4 0 @err2 @ok1;
27 27
  @ok1
28 28
    sload w32 %6 %3 8;
29 29
    store w32 %6 %5 0;
30 30
    jmp @merge3;
31 31
  @err2
32 32
    reserve %7 12 8;
33 33
    store w64 %4 %7 0;
34 -
    add w64 %8 %3 8;
35 -
    add w64 %9 %7 8;
34 +
    add ptr %8 %3 8;
35 +
    add ptr %9 %7 8;
36 36
    blit %9 %8 1;
37 37
    blit %0 %7 12;
38 38
    ret %0;
39 39
  @merge3
40 40
    sload w32 %10 %5 0;
test/tests/try.catch.ril +3 -3
1 -
fn w64 $fallible(w64 %0, w8 %1) {
1 +
fn ptr $fallible(ptr %0, w8 %1) {
2 2
  @entry0
3 3
    br.ne w32 %1 0 @then1 @merge2;
4 4
  @then1
5 5
    reserve %2 1 1;
6 6
    store w8 0 %2 0;
15 15
    store w32 42 %4 8;
16 16
    blit %0 %4 12;
17 17
    ret %0;
18 18
}
19 19
20 -
fn w64 $caller(w64 %0, w8 %1) {
20 +
fn ptr $caller(ptr %0, w8 %1) {
21 21
  @entry0
22 22
    reserve %2 12 8;
23 -
    call w64 %3 $fallible(%2, %1);
23 +
    call ptr %3 $fallible(%2, %1);
24 24
    load w64 %4 %3 0;
25 25
    reserve %5 4 4;
26 26
    br.ne w32 %4 0 @err2 @ok1;
27 27
  @ok1
28 28
    sload w32 %6 %3 8;
test/tests/try.optional.ril +3 -3
1 -
fn w64 $fallible(w64 %0, w8 %1) {
1 +
fn ptr $fallible(ptr %0, w8 %1) {
2 2
  @entry0
3 3
    br.ne w32 %1 0 @then1 @merge2;
4 4
  @then1
5 5
    reserve %2 1 1;
6 6
    store w8 0 %2 0;
15 15
    store w32 3 %4 8;
16 16
    blit %0 %4 12;
17 17
    ret %0;
18 18
}
19 19
20 -
fn w64 $caller(w64 %0, w8 %1) {
20 +
fn ptr $caller(ptr %0, w8 %1) {
21 21
  @entry0
22 22
    reserve %2 12 8;
23 -
    call w64 %3 $fallible(%2, %1);
23 +
    call ptr %3 $fallible(%2, %1);
24 24
    load w64 %4 %3 0;
25 25
    reserve %5 8 4;
26 26
    br.ne w32 %4 0 @err2 @ok1;
27 27
  @ok1
28 28
    sload w32 %6 %3 8;
test/tests/try.panic.ril +2 -2
1 -
fn w64 $fallible(w64 %0, w8 %1) {
1 +
fn ptr $fallible(ptr %0, w8 %1) {
2 2
  @entry0
3 3
    br.ne w32 %1 0 @then1 @merge2;
4 4
  @then1
5 5
    reserve %2 1 1;
6 6
    store w8 0 %2 0;
18 18
}
19 19
20 20
fn w32 $caller(w8 %0) {
21 21
  @entry0
22 22
    reserve %1 12 8;
23 -
    call w64 %2 $fallible(%1, %0);
23 +
    call ptr %2 $fallible(%1, %0);
24 24
    load w64 %3 %2 0;
25 25
    reserve %4 4 4;
26 26
    br.ne w32 %3 0 @err2 @ok1;
27 27
  @ok1
28 28
    sload w32 %5 %2 8;
test/tests/undefined.record.field.ril +1 -1
35 35
    jmp @arm1;
36 36
  @arm1
37 37
    load w8 %2 %1 0;
38 38
    br.eq w8 %2 0 @case2 @arm3;
39 39
  @case2
40 -
    add w64 %3 %1 4;
40 +
    add ptr %3 %1 4;
41 41
    sload w32 %4 %3 16;
42 42
    ret %4;
43 43
  @arm3
44 44
    jmp @else4;
45 45
  @else4
test/tests/union.ctor.ril +3 -3
6 6
fn w8 $makeBlue() {
7 7
  @entry0
8 8
    ret 2;
9 9
}
10 10
11 -
fn w64 $makeSome() {
11 +
fn ptr $makeSome() {
12 12
  @entry0
13 13
    reserve %0 4 4;
14 14
    store w32 7 %0 0;
15 15
    reserve %1 8 4;
16 16
    store w8 1 %1 0;
17 -
    add w64 %2 %1 4;
17 +
    add ptr %2 %1 4;
18 18
    blit %2 %0 4;
19 19
    load w64 %3 %1 0;
20 20
    ret %3;
21 21
}
22 22
23 -
fn w64 $makeNone() {
23 +
fn ptr $makeNone() {
24 24
  @entry0
25 25
    reserve %0 8 4;
26 26
    store w8 0 %0 0;
27 27
    load w64 %1 %0 0;
28 28
    ret %1;
test/tests/union.eq.ril +3 -3
2 2
  @entry0
3 3
    eq w8 %2 %0 %1;
4 4
    ret %2;
5 5
}
6 6
7 -
fn w8 $maybeIntEq(w64 %0, w64 %1) {
7 +
fn w8 $maybeIntEq(ptr %0, ptr %1) {
8 8
  @entry0
9 9
    load w8 %2 %0 0;
10 10
    load w8 %3 %1 0;
11 11
    br.eq w8 %2 %3 @eq#tag2 @eq#merge1(0);
12 12
  @eq#merge1(w8 %4)
20 20
    jmp @eq#merge1(%7);
21 21
  @eq#unreachable4
22 22
    unreachable;
23 23
}
24 24
25 -
fn w8 $valueEq(w64 %0, w64 %1) {
25 +
fn w8 $valueEq(ptr %0, ptr %1) {
26 26
  @entry0
27 27
    load w8 %2 %0 0;
28 28
    load w8 %3 %1 0;
29 29
    br.eq w8 %2 %3 @eq#tag2 @eq#merge1(0);
30 30
  @eq#merge1(w8 %4)
43 43
    jmp @eq#merge1(%10);
44 44
  @eq#unreachable5
45 45
    unreachable;
46 46
}
47 47
48 -
fn w8 $shapeEq(w64 %0, w64 %1) {
48 +
fn w8 $shapeEq(ptr %0, ptr %1) {
49 49
  @entry0
50 50
    load w8 %2 %0 0;
51 51
    load w8 %3 %1 0;
52 52
    br.eq w8 %2 %3 @eq#tag2 @eq#merge1(0);
53 53
  @eq#merge1(w8 %4)
test/tests/union.match.bind.ril +1 -1
1 -
fn w32 $unwrap(w64 %0) {
1 +
fn w32 $unwrap(ptr %0) {
2 2
  @entry0
3 3
    reserve %1 8 4;
4 4
    blit %1 %0 8;
5 5
    jmp @arm1;
6 6
  @arm1
test/tests/union.match.ref.ril +9 -9
1 -
fn w32 $matchColorRef(w64 %0) {
1 +
fn w32 $matchColorRef(ptr %0) {
2 2
  @entry0
3 3
    jmp @arm1;
4 4
  @arm1
5 5
    load w8 %1 %0 0;
6 6
    br.eq w8 %1 0 @case2 @arm3;
15 15
    jmp @case6;
16 16
  @case6
17 17
    ret 2;
18 18
}
19 19
20 -
fn w32 $matchRef(w64 %0) {
20 +
fn w32 $matchRef(ptr %0) {
21 21
  @entry0
22 22
    jmp @arm1;
23 23
  @arm1
24 24
    load w8 %1 %0 0;
25 25
    br.eq w8 %1 0 @case2 @arm3;
26 26
  @case2
27 27
    ret 0;
28 28
  @arm3
29 29
    jmp @case4;
30 30
  @case4
31 -
    add w64 %2 %0 4;
31 +
    add ptr %2 %0 4;
32 32
    load w32 %3 %2 0;
33 33
    ret %3;
34 34
}
35 35
36 -
fn w32 $ifLetRef(w64 %0) {
36 +
fn w32 $ifLetRef(ptr %0) {
37 37
  @entry0
38 38
    load w8 %1 %0 0;
39 39
    br.eq w8 %1 1 @then1 @else2;
40 40
  @then1
41 -
    add w64 %2 %0 4;
41 +
    add ptr %2 %0 4;
42 42
    load w32 %3 %2 0;
43 43
    ret %3;
44 44
  @else2
45 45
    jmp @merge3;
46 46
  @merge3
47 47
    ret 0;
48 48
}
49 49
50 -
fn w32 $whileLetRef(w64 %0) {
50 +
fn w32 $whileLetRef(ptr %0) {
51 51
  @entry0
52 52
    jmp @while1(%0, 0);
53 -
  @while1(w64 %1, w32 %4)
53 +
  @while1(ptr %1, w32 %4)
54 54
    load w8 %2 %1 0;
55 55
    br.eq w8 %2 1 @body2 @merge3;
56 56
  @body2
57 -
    add w64 %3 %1 4;
57 +
    add ptr %3 %1 4;
58 58
    load w32 %5 %3 0;
59 59
    add w32 %6 %4 %5;
60 60
    reserve %7 8 4;
61 61
    store w8 0 %7 0;
62 62
    blit %1 %7 8;
63 63
    jmp @while1(%1, %6);
64 64
  @merge3
65 65
    ret %4;
66 66
}
67 67
68 -
fn w32 $optionalRef(w64 %0) {
68 +
fn w32 $optionalRef(ptr %0) {
69 69
  @entry0
70 70
    br.ne w32 %0 0 @then1 @else2;
71 71
  @then1
72 72
    load w32 %1 %0 0;
73 73
    ret %1;
test/tests/union.match.tag.ril +2 -2
26 26
    jmp @else4;
27 27
  @else4
28 28
    ret 1;
29 29
}
30 30
31 -
fn w32 $matchTag(w64 %0) {
31 +
fn w32 $matchTag(ptr %0) {
32 32
  @entry0
33 33
    reserve %1 8 4;
34 34
    blit %1 %0 8;
35 35
    jmp @arm1;
36 36
  @arm1
42 42
    jmp @case4;
43 43
  @case4
44 44
    ret 1;
45 45
}
46 46
47 -
fn w32 $matchElse(w64 %0) {
47 +
fn w32 $matchElse(ptr %0) {
48 48
  @entry0
49 49
    reserve %1 8 4;
50 50
    blit %1 %0 8;
51 51
    jmp @arm1;
52 52
  @arm1
test/tests/union.payload.record.eq.ril +2 -2
1 -
fn w8 $maybePointEq(w64 %0, w64 %1) {
1 +
fn w8 $maybePointEq(ptr %0, ptr %1) {
2 2
  @entry0
3 3
    load w8 %2 %0 0;
4 4
    load w8 %3 %1 0;
5 5
    br.eq w8 %2 %3 @eq#tag2 @eq#merge1(0);
6 6
  @eq#merge1(w8 %4)
18 18
    jmp @eq#merge1(%11);
19 19
  @eq#unreachable4
20 20
    unreachable;
21 21
}
22 22
23 -
fn w8 $maybePointNeq(w64 %0, w64 %1) {
23 +
fn w8 $maybePointNeq(ptr %0, ptr %1) {
24 24
  @entry0
25 25
    load w8 %2 %0 0;
26 26
    load w8 %3 %1 0;
27 27
    br.eq w8 %2 %3 @eq#tag2 @eq#merge1(0);
28 28
  @eq#merge1(w8 %4)
test/tests/union.record.literal.ril +2 -2
1 -
fn w64 $makePair(w64 %0, w32 %1, w32 %2) {
1 +
fn ptr $makePair(ptr %0, w32 %1, w32 %2) {
2 2
  @entry0
3 3
    reserve %3 12 4;
4 4
    store w8 1 %3 0;
5 5
    store w32 %1 %3 4;
6 6
    store w32 %2 %3 8;
7 7
    blit %0 %3 12;
8 8
    ret %0;
9 9
}
10 10
11 -
fn w8 $isPair(w64 %0) {
11 +
fn w8 $isPair(ptr %0) {
12 12
  @entry0
13 13
    reserve %1 12 4;
14 14
    blit %1 %0 12;
15 15
    jmp @arm1;
16 16
  @arm1
test/tests/union.variant.access.ril +4 -4
6 6
fn w8 $assignGreen() {
7 7
  @entry0
8 8
    ret 1;
9 9
}
10 10
11 -
fn w64 $makeNone() {
11 +
fn ptr $makeNone() {
12 12
  @entry0
13 13
    reserve %0 8 4;
14 14
    store w8 0 %0 0;
15 15
    load w64 %1 %0 0;
16 16
    ret %1;
17 17
}
18 18
19 -
fn w64 $makeSome(w32 %0) {
19 +
fn ptr $makeSome(w32 %0) {
20 20
  @entry0
21 21
    reserve %1 4 4;
22 22
    store w32 %0 %1 0;
23 23
    reserve %2 8 4;
24 24
    store w8 1 %2 0;
25 -
    add w64 %3 %2 4;
25 +
    add ptr %3 %2 4;
26 26
    blit %3 %1 4;
27 27
    load w64 %4 %2 0;
28 28
    ret %4;
29 29
}
30 30
31 -
fn w64 $assignNone() {
31 +
fn ptr $assignNone() {
32 32
  @entry0
33 33
    reserve %0 8 4;
34 34
    store w8 0 %0 0;
35 35
    load w64 %1 %0 0;
36 36
    ret %1;
test/tests/void.throw.ril +5 -5
1 -
fn w64 $fallible(w64 %0, w8 %1) {
1 +
fn ptr $fallible(ptr %0, w8 %1) {
2 2
  @entry0
3 3
    br.ne w32 %1 0 @then1 @merge2;
4 4
  @then1
5 5
    reserve %2 1 1;
6 6
    store w8 0 %2 0;
14 14
    store w64 0 %4 0;
15 15
    blit %0 %4 9;
16 16
    ret %0;
17 17
}
18 18
19 -
fn w64 $caller(w64 %0, w8 %1) {
19 +
fn ptr $caller(ptr %0, w8 %1) {
20 20
  @entry0
21 21
    reserve %2 9 8;
22 -
    call w64 %3 $fallible(%2, %1);
22 +
    call ptr %3 $fallible(%2, %1);
23 23
    load w64 %4 %3 0;
24 24
    br.ne w32 %4 0 @err2 @ok1;
25 25
  @ok1
26 26
    jmp @merge3;
27 27
  @err2
28 28
    reserve %5 9 8;
29 29
    store w64 %4 %5 0;
30 -
    add w64 %6 %3 8;
31 -
    add w64 %7 %5 8;
30 +
    add ptr %6 %3 8;
31 +
    add ptr %7 %5 8;
32 32
    blit %7 %6 1;
33 33
    blit %0 %5 9;
34 34
    ret %0;
35 35
  @merge3
36 36
    reserve %8 9 8;