x86_64: rewrite float vector @abs and equality comparisons

This commit is contained in:
Jacob Young
2025-01-23 05:31:46 -05:00
parent ae3d95fc8d
commit b1fa89439a
13 changed files with 4116 additions and 519 deletions

View File

@@ -2128,7 +2128,7 @@ pub const Inst = struct {
ref_start_index = static_len,
_,
pub const static_len = 70;
pub const static_len = 76;
pub fn toRef(i: Index) Inst.Ref {
return @enumFromInt(@intFromEnum(Index.ref_start_index) + @intFromEnum(i));
@@ -2211,6 +2211,12 @@ pub const Inst = struct {
single_const_pointer_to_comptime_int_type,
slice_const_u8_type,
slice_const_u8_sentinel_0_type,
vector_4_f16_type,
vector_8_f16_type,
vector_4_f32_type,
vector_8_f32_type,
vector_2_f64_type,
vector_4_f64_type,
optional_noreturn_type,
anyerror_void_error_union_type,
adhoc_inferred_error_set_type,

View File

@@ -984,6 +984,12 @@ pub const Inst = struct {
single_const_pointer_to_comptime_int_type = @intFromEnum(InternPool.Index.single_const_pointer_to_comptime_int_type),
slice_const_u8_type = @intFromEnum(InternPool.Index.slice_const_u8_type),
slice_const_u8_sentinel_0_type = @intFromEnum(InternPool.Index.slice_const_u8_sentinel_0_type),
vector_4_f16_type = @intFromEnum(InternPool.Index.vector_4_f16_type),
vector_8_f16_type = @intFromEnum(InternPool.Index.vector_8_f16_type),
vector_4_f32_type = @intFromEnum(InternPool.Index.vector_4_f32_type),
vector_8_f32_type = @intFromEnum(InternPool.Index.vector_8_f32_type),
vector_2_f64_type = @intFromEnum(InternPool.Index.vector_2_f64_type),
vector_4_f64_type = @intFromEnum(InternPool.Index.vector_4_f64_type),
optional_noreturn_type = @intFromEnum(InternPool.Index.optional_noreturn_type),
anyerror_void_error_union_type = @intFromEnum(InternPool.Index.anyerror_void_error_union_type),
adhoc_inferred_error_set_type = @intFromEnum(InternPool.Index.adhoc_inferred_error_set_type),

View File

@@ -4559,12 +4559,21 @@ pub const Index = enum(u32) {
null_type,
undefined_type,
enum_literal_type,
manyptr_u8_type,
manyptr_const_u8_type,
manyptr_const_u8_sentinel_0_type,
single_const_pointer_to_comptime_int_type,
slice_const_u8_type,
slice_const_u8_sentinel_0_type,
vector_4_f16_type,
vector_8_f16_type,
vector_4_f32_type,
vector_8_f32_type,
vector_2_f64_type,
vector_4_f64_type,
optional_noreturn_type,
anyerror_void_error_union_type,
/// Used for the inferred error set of inline/comptime function calls.
@@ -5055,6 +5064,19 @@ pub const static_keys = [_]Key{
},
} },
// @Vector(4, f16)
.{ .vector_type = .{ .len = 4, .child = .f16_type } },
// @Vector(8, f16)
.{ .vector_type = .{ .len = 8, .child = .f16_type } },
// @Vector(4, f32)
.{ .vector_type = .{ .len = 4, .child = .f32_type } },
// @Vector(8, f32)
.{ .vector_type = .{ .len = 8, .child = .f32_type } },
// @Vector(2, f64)
.{ .vector_type = .{ .len = 2, .child = .f64_type } },
// @Vector(4, f64)
.{ .vector_type = .{ .len = 4, .child = .f64_type } },
// ?noreturn
.{ .opt_type = .noreturn_type },
@@ -11681,6 +11703,12 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
.single_const_pointer_to_comptime_int_type,
.slice_const_u8_type,
.slice_const_u8_sentinel_0_type,
.vector_4_f16_type,
.vector_8_f16_type,
.vector_4_f32_type,
.vector_8_f32_type,
.vector_2_f64_type,
.vector_4_f64_type,
.optional_noreturn_type,
.anyerror_void_error_union_type,
.adhoc_inferred_error_set_type,
@@ -11998,6 +12026,14 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId {
.slice_const_u8_sentinel_0_type,
=> .pointer,
.vector_4_f16_type,
.vector_8_f16_type,
.vector_4_f32_type,
.vector_8_f32_type,
.vector_2_f64_type,
.vector_4_f64_type,
=> .vector,
.optional_noreturn_type => .optional,
.anyerror_void_error_union_type => .error_union,
.empty_tuple_type => .@"struct",

View File

@@ -36611,6 +36611,12 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
.single_const_pointer_to_comptime_int_type,
.slice_const_u8_type,
.slice_const_u8_sentinel_0_type,
.vector_4_f16_type,
.vector_8_f16_type,
.vector_4_f32_type,
.vector_8_f32_type,
.vector_2_f64_type,
.vector_4_f64_type,
.anyerror_void_error_union_type,
=> null,
.void_type => Value.void,

View File

@@ -4174,7 +4174,15 @@ pub const single_const_pointer_to_comptime_int: Type = .{
.ip_index = .single_const_pointer_to_comptime_int_type,
};
pub const slice_const_u8_sentinel_0: Type = .{ .ip_index = .slice_const_u8_sentinel_0_type };
pub const empty_tuple_type: Type = .{ .ip_index = .empty_tuple_type };
pub const vector_4_f16: Type = .{ .ip_index = .vector_4_f16_type };
pub const vector_8_f16: Type = .{ .ip_index = .vector_8_f16_type };
pub const vector_4_f32: Type = .{ .ip_index = .vector_4_f32_type };
pub const vector_8_f32: Type = .{ .ip_index = .vector_8_f32_type };
pub const vector_2_f64: Type = .{ .ip_index = .vector_2_f64_type };
pub const vector_4_f64: Type = .{ .ip_index = .vector_4_f64_type };
pub const empty_tuple: Type = .{ .ip_index = .empty_tuple_type };
pub const generic_poison: Type = .{ .ip_index = .generic_poison_type };

File diff suppressed because it is too large Load Diff

View File

@@ -366,6 +366,7 @@ pub const Register = enum(u8) {
@intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => @intFromEnum(Register.eax),
@intFromEnum(Register.ax) ... @intFromEnum(Register.r15w) => @intFromEnum(Register.ax),
@intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => @intFromEnum(Register.al),
@intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => @intFromEnum(Register.ah),
else => unreachable,
// zig fmt: on
};

View File

@@ -706,7 +706,7 @@ pub const DeclGen = struct {
const uav_ty = uav_val.typeOf(zcu);
// Render an undefined pointer if we have a pointer to a zero-bit or comptime type.
const ptr_ty = Type.fromInterned(uav.orig_ty);
const ptr_ty: Type = .fromInterned(uav.orig_ty);
if (ptr_ty.isPtrAtRuntime(zcu) and !uav_ty.isFnOrHasRuntimeBits(zcu)) {
return dg.writeCValue(writer, .{ .undef = ptr_ty });
}
@@ -782,7 +782,7 @@ pub const DeclGen = struct {
};
// Render an undefined pointer if we have a pointer to a zero-bit or comptime type.
const nav_ty = Type.fromInterned(ip.getNav(owner_nav).typeOf(ip));
const nav_ty: Type = .fromInterned(ip.getNav(owner_nav).typeOf(ip));
const ptr_ty = try pt.navPtrType(owner_nav);
if (!nav_ty.isFnOrHasRuntimeBits(zcu)) {
return dg.writeCValue(writer, .{ .undef = ptr_ty });
@@ -819,7 +819,7 @@ pub const DeclGen = struct {
.comptime_alloc_ptr, .comptime_field_ptr => unreachable,
.int => |int| {
const ptr_ctype = try dg.ctypeFromType(int.ptr_ty, .complete);
const addr_val = try pt.intValue(Type.usize, int.addr);
const addr_val = try pt.intValue(.usize, int.addr);
try writer.writeByte('(');
try dg.renderCType(writer, ptr_ctype);
try writer.print("){x}", .{try dg.fmtIntLiteral(addr_val, .Other)});
@@ -859,7 +859,7 @@ pub const DeclGen = struct {
try writer.writeByte('(');
try dg.renderCType(writer, ptr_ctype);
try writer.writeByte(')');
const offset_val = try pt.intValue(Type.usize, byte_offset);
const offset_val = try pt.intValue(.usize, byte_offset);
try writer.writeAll("((char *)");
try dg.renderPointer(writer, field.parent.*, location);
try writer.print(" + {})", .{try dg.fmtIntLiteral(offset_val, .Other)});
@@ -875,7 +875,7 @@ pub const DeclGen = struct {
try writer.writeByte(')');
try dg.renderPointer(writer, elem.parent.*, location);
} else {
const index_val = try pt.intValue(Type.usize, elem.elem_idx);
const index_val = try pt.intValue(.usize, elem.elem_idx);
// We want to do pointer arithmetic on a pointer to the element type.
// We might have a pointer-to-array. In this case, we must cast first.
const result_ctype = try dg.ctypeFromType(elem.result_ptr_ty, .complete);
@@ -904,7 +904,7 @@ pub const DeclGen = struct {
if (oac.byte_offset == 0) {
try dg.renderPointer(writer, oac.parent.*, location);
} else {
const offset_val = try pt.intValue(Type.usize, oac.byte_offset);
const offset_val = try pt.intValue(.usize, oac.byte_offset);
try writer.writeAll("((char *)");
try dg.renderPointer(writer, oac.parent.*, location);
try writer.print(" + {})", .{try dg.fmtIntLiteral(offset_val, .Other)});
@@ -984,7 +984,7 @@ pub const DeclGen = struct {
try writer.writeAll("((");
try dg.renderCType(writer, ctype);
try writer.print("){x})", .{try dg.fmtIntLiteral(
try pt.intValue(Type.usize, val.toUnsignedInt(zcu)),
try pt.intValue(.usize, val.toUnsignedInt(zcu)),
.Other,
)});
},
@@ -1153,7 +1153,7 @@ pub const DeclGen = struct {
else => |payload| switch (ip.indexToKey(payload)) {
.undef => |err_ty| try dg.renderUndefValue(
writer,
Type.fromInterned(err_ty),
.fromInterned(err_ty),
location,
),
.err => |err| try dg.renderErrorName(writer, err.name),
@@ -1204,7 +1204,7 @@ pub const DeclGen = struct {
),
},
.ptr => try writer.writeAll("NULL"),
.len => try dg.renderUndefValue(writer, Type.usize, initializer_type),
.len => try dg.renderUndefValue(writer, .usize, initializer_type),
else => unreachable,
}
}
@@ -1219,7 +1219,7 @@ pub const DeclGen = struct {
try writer.writeByte(')');
}
const ai = ty.arrayInfo(zcu);
if (ai.elem_type.eql(Type.u8, zcu)) {
if (ai.elem_type.eql(.u8, zcu)) {
var literal = stringLiteral(writer, ty.arrayLenIncludingSentinel(zcu));
try literal.start();
var index: usize = 0;
@@ -1263,7 +1263,7 @@ pub const DeclGen = struct {
for (0..tuple.types.len) |field_index| {
const comptime_val = tuple.values.get(ip)[field_index];
if (comptime_val != .none) continue;
const field_ty = Type.fromInterned(tuple.types.get(ip)[field_index]);
const field_ty: Type = .fromInterned(tuple.types.get(ip)[field_index]);
if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
if (!empty) try writer.writeByte(',');
@@ -1298,7 +1298,7 @@ pub const DeclGen = struct {
var field_it = loaded_struct.iterateRuntimeOrder(ip);
var need_comma = false;
while (field_it.next()) |field_index| {
const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
if (need_comma) try writer.writeByte(',');
@@ -1325,7 +1325,7 @@ pub const DeclGen = struct {
var eff_num_fields: usize = 0;
for (0..loaded_struct.field_types.len) |field_index| {
const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
eff_num_fields += 1;
}
@@ -1346,7 +1346,7 @@ pub const DeclGen = struct {
var eff_index: usize = 0;
var needs_closing_paren = false;
for (0..loaded_struct.field_types.len) |field_index| {
const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
const field_val = switch (ip.indexToKey(val.toIntern()).aggregate.storage) {
@@ -1382,7 +1382,7 @@ pub const DeclGen = struct {
// a << a_off | b << b_off | c << c_off
var empty = true;
for (0..loaded_struct.field_types.len) |field_index| {
const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
if (!empty) try writer.writeAll(" | ");
@@ -1466,7 +1466,7 @@ pub const DeclGen = struct {
}
const field_index = zcu.unionTagFieldIndex(loaded_union, Value.fromInterned(un.tag)).?;
const field_ty = Type.fromInterned(loaded_union.field_types.get(ip)[field_index]);
const field_ty: Type = .fromInterned(loaded_union.field_types.get(ip)[field_index]);
const field_name = loaded_union.loadTagType(ip).names.get(ip)[field_index];
if (loaded_union.flagsUnordered(ip).layout == .@"packed") {
if (field_ty.hasRuntimeBits(zcu)) {
@@ -1509,7 +1509,7 @@ pub const DeclGen = struct {
);
try writer.writeByte(' ');
} else for (0..loaded_union.field_types.len) |inner_field_index| {
const inner_field_ty = Type.fromInterned(
const inner_field_ty: Type = .fromInterned(
loaded_union.field_types.get(ip)[inner_field_index],
);
if (!inner_field_ty.hasRuntimeBits(zcu)) continue;
@@ -1592,7 +1592,7 @@ pub const DeclGen = struct {
try writer.writeAll("((");
try dg.renderCType(writer, ctype);
return writer.print("){x})", .{
try dg.fmtIntLiteral(try pt.undefValue(Type.usize), .Other),
try dg.fmtIntLiteral(try pt.undefValue(.usize), .Other),
});
},
.slice => {
@@ -1606,14 +1606,14 @@ pub const DeclGen = struct {
const ptr_ty = ty.slicePtrFieldType(zcu);
try dg.renderType(writer, ptr_ty);
return writer.print("){x}, {0x}}}", .{
try dg.fmtIntLiteral(try dg.pt.undefValue(Type.usize), .Other),
try dg.fmtIntLiteral(try dg.pt.undefValue(.usize), .Other),
});
},
},
.opt_type => |child_type| switch (ctype.info(ctype_pool)) {
.basic, .pointer => try dg.renderUndefValue(
writer,
Type.fromInterned(if (ctype.isBool()) .bool_type else child_type),
.fromInterned(if (ctype.isBool()) .bool_type else child_type),
location,
),
.aligned, .array, .vector, .fwd_decl, .function => unreachable,
@@ -1622,7 +1622,7 @@ pub const DeclGen = struct {
.is_null, .payload => {},
.ptr, .len => return dg.renderUndefValue(
writer,
Type.fromInterned(child_type),
.fromInterned(child_type),
location,
),
else => unreachable,
@@ -1635,7 +1635,7 @@ pub const DeclGen = struct {
try writer.writeByte('{');
for (0..aggregate.fields.len) |field_index| {
if (field_index > 0) try writer.writeByte(',');
try dg.renderUndefValue(writer, Type.fromInterned(
try dg.renderUndefValue(writer, .fromInterned(
switch (aggregate.fields.at(field_index, ctype_pool).name.index) {
.is_null => .bool_type,
.payload => child_type,
@@ -1660,7 +1660,7 @@ pub const DeclGen = struct {
var field_it = loaded_struct.iterateRuntimeOrder(ip);
var need_comma = false;
while (field_it.next()) |field_index| {
const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
if (need_comma) try writer.writeByte(',');
@@ -1685,7 +1685,7 @@ pub const DeclGen = struct {
var need_comma = false;
for (0..tuple_info.types.len) |field_index| {
if (tuple_info.values.get(ip)[field_index] != .none) continue;
const field_ty = Type.fromInterned(tuple_info.types.get(ip)[field_index]);
const field_ty: Type = .fromInterned(tuple_info.types.get(ip)[field_index]);
if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
if (need_comma) try writer.writeByte(',');
@@ -1715,13 +1715,13 @@ pub const DeclGen = struct {
.payload) {
.tag => try dg.renderUndefValue(
writer,
Type.fromInterned(loaded_union.enum_tag_ty),
.fromInterned(loaded_union.enum_tag_ty),
initializer_type,
),
.payload => {
try writer.writeByte('{');
for (0..loaded_union.field_types.len) |inner_field_index| {
const inner_field_ty = Type.fromInterned(
const inner_field_ty: Type = .fromInterned(
loaded_union.field_types.get(ip)[inner_field_index],
);
if (!inner_field_ty.hasRuntimeBits(pt.zcu)) continue;
@@ -1747,7 +1747,7 @@ pub const DeclGen = struct {
.error_union_type => |error_union_type| switch (ctype.info(ctype_pool)) {
.basic => try dg.renderUndefValue(
writer,
Type.fromInterned(error_union_type.error_set_type),
.fromInterned(error_union_type.error_set_type),
location,
),
.pointer, .aligned, .array, .vector, .fwd_decl, .function => unreachable,
@@ -1762,7 +1762,7 @@ pub const DeclGen = struct {
if (field_index > 0) try writer.writeByte(',');
try dg.renderUndefValue(
writer,
Type.fromInterned(
.fromInterned(
switch (aggregate.fields.at(field_index, ctype_pool).name.index) {
.@"error" => error_union_type.error_set_type,
.payload => error_union_type.payload_type,
@@ -1777,7 +1777,7 @@ pub const DeclGen = struct {
},
.array_type, .vector_type => {
const ai = ty.arrayInfo(zcu);
if (ai.elem_type.eql(Type.u8, zcu)) {
if (ai.elem_type.eql(.u8, zcu)) {
const c_len = ty.arrayLenIncludingSentinel(zcu);
var literal = stringLiteral(writer, c_len);
try literal.start();
@@ -1981,8 +1981,8 @@ pub const DeclGen = struct {
const src_is_ptr = src_ty.isPtrAtRuntime(pt.zcu);
const src_eff_ty: Type = if (src_is_ptr) switch (dest_int_info.signedness) {
.unsigned => Type.usize,
.signed => Type.isize,
.unsigned => .usize,
.signed => .isize,
} else src_ty;
const src_bits = src_eff_ty.bitSize(zcu);
@@ -2022,8 +2022,8 @@ pub const DeclGen = struct {
const src_is_ptr = src_ty.isPtrAtRuntime(zcu);
const src_eff_ty: Type = if (src_is_ptr) switch (dest_int_info.signedness) {
.unsigned => Type.usize,
.signed => Type.isize,
.unsigned => .usize,
.signed => .isize,
} else src_ty;
const src_bits = src_eff_ty.bitSize(zcu);
@@ -2249,7 +2249,7 @@ pub const DeclGen = struct {
if (flags.is_threadlocal and !dg.mod.single_threaded) try fwd.writeAll("zig_threadlocal ");
try dg.renderTypeAndName(
fwd,
Type.fromInterned(nav.typeOf(ip)),
.fromInterned(nav.typeOf(ip)),
.{ .nav = nav_index },
CQualifiers.init(.{ .@"const" = flags.is_const }),
nav.getAlignment(),
@@ -2321,7 +2321,7 @@ pub const DeclGen = struct {
if (is_big) try writer.print(", {}", .{int_info.signedness == .signed});
try writer.print(", {}", .{try dg.fmtIntLiteral(
try pt.intValue(if (is_big) Type.u16 else Type.u8, int_info.bits),
try pt.intValue(if (is_big) .u16 else .u8, int_info.bits),
.FunctionArgument,
)});
}
@@ -2657,7 +2657,7 @@ pub fn genTypeDecl(
},
.index => |index| if (!found_existing) {
const ip = &zcu.intern_pool;
const ty = Type.fromInterned(index);
const ty: Type = .fromInterned(index);
_ = try renderTypePrefix(.flush, global_ctype_pool, zcu, writer, global_ctype, .suffix, .{});
try writer.writeByte(';');
const file_scope = ty.typeDeclInstAllowGeneratedTag(zcu).?.resolveFile(ip);
@@ -2772,7 +2772,7 @@ pub fn genErrDecls(o: *Object) !void {
if (val > 1) try writer.writeAll(", ");
try writer.print("{{" ++ name_prefix ++ "{}, {}}}", .{
fmtIdent(name),
try o.dg.fmtIntLiteral(try pt.intValue(Type.usize, name.len), .StaticInitializer),
try o.dg.fmtIntLiteral(try pt.intValue(.usize, name.len), .StaticInitializer),
});
}
try writer.writeAll("};\n");
@@ -2788,8 +2788,8 @@ pub fn genLazyFn(o: *Object, lazy_ctype_pool: *const CType.Pool, lazy_fn: LazyFn
const val = lazy_fn.value_ptr;
switch (key) {
.tag_name => |enum_ty_ip| {
const enum_ty = Type.fromInterned(enum_ty_ip);
const name_slice_ty = Type.slice_const_u8_sentinel_0;
const enum_ty: Type = .fromInterned(enum_ty_ip);
const name_slice_ty: Type = .slice_const_u8_sentinel_0;
try w.writeAll("static ");
try o.dg.renderType(w, name_slice_ty);
@@ -2822,7 +2822,7 @@ pub fn genLazyFn(o: *Object, lazy_ctype_pool: *const CType.Pool, lazy_fn: LazyFn
try o.dg.renderType(w, name_slice_ty);
try w.print("){{{}, {}}};\n", .{
fmtIdent("name"),
try o.dg.fmtIntLiteral(try pt.intValue(Type.usize, tag_name_len), .Other),
try o.dg.fmtIntLiteral(try pt.intValue(.usize, tag_name_len), .Other),
});
try w.writeAll(" }\n");
@@ -2966,7 +2966,7 @@ pub fn genDecl(o: *Object) !void {
const zcu = pt.zcu;
const ip = &zcu.intern_pool;
const nav = ip.getNav(o.dg.pass.nav);
const nav_ty = Type.fromInterned(nav.typeOf(ip));
const nav_ty: Type = .fromInterned(nav.typeOf(ip));
if (!nav_ty.isFnOrHasRuntimeBitsIgnoreComptime(zcu)) return;
switch (ip.indexToKey(nav.status.fully_resolved.val)) {
@@ -3717,7 +3717,7 @@ fn airArg(f: *Function, inst: Air.Inst.Index) !CValue {
if (f.liveness.isUnused(inst)) {
const writer = f.object.writer();
try writer.writeByte('(');
try f.renderType(writer, Type.void);
try f.renderType(writer, .void);
try writer.writeByte(')');
try f.writeCValue(writer, result, .Other);
try writer.writeAll(";\n");
@@ -3735,7 +3735,7 @@ fn airLoad(f: *Function, inst: Air.Inst.Index) !CValue {
const ptr_ty = f.typeOf(ty_op.operand);
const ptr_scalar_ty = ptr_ty.scalarType(zcu);
const ptr_info = ptr_scalar_ty.ptrInfo(zcu);
const src_ty = Type.fromInterned(ptr_info.child);
const src_ty: Type = .fromInterned(ptr_info.child);
if (!src_ty.hasRuntimeBitsIgnoreComptime(zcu)) {
try reap(f, inst, &.{ty_op.operand});
@@ -3953,7 +3953,7 @@ fn airTrunc(f: *Function, inst: Air.Inst.Index) !CValue {
.signed => {
const c_bits = toCIntBits(scalar_int_info.bits) orelse
return f.fail("TODO: C backend: implement integer types larger than 128 bits", .{});
const shift_val = try pt.intValue(Type.u8, c_bits - dest_bits);
const shift_val = try pt.intValue(.u8, c_bits - dest_bits);
try writer.writeAll("zig_shr_");
try f.object.dg.renderTypeForBuiltinFnName(writer, scalar_ty);
@@ -4019,7 +4019,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
try writer.writeAll("memset(");
try f.writeCValue(writer, ptr_val, .FunctionArgument);
try writer.writeAll(", 0xaa, sizeof(");
try f.renderType(writer, Type.fromInterned(ptr_info.child));
try f.renderType(writer, .fromInterned(ptr_info.child));
try writer.writeAll("));\n");
}
return .none;
@@ -4029,7 +4029,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
ptr_info.flags.alignment.order(src_ty.abiAlignment(zcu)).compare(.gte)
else
true;
const is_array = lowersToArray(Type.fromInterned(ptr_info.child), pt);
const is_array = lowersToArray(.fromInterned(ptr_info.child), pt);
const need_memcpy = !is_aligned or is_array;
const src_val = try f.resolveInst(bin_op.rhs);
@@ -4040,7 +4040,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
if (need_memcpy) {
// For this memcpy to safely work we need the rhs to have the same
// underlying type as the lhs (i.e. they must both be arrays of the same underlying type).
assert(src_ty.eql(Type.fromInterned(ptr_info.child), zcu));
assert(src_ty.eql(.fromInterned(ptr_info.child), zcu));
// If the source is a constant, writeCValue will emit a brace initialization
// so work around this by initializing into new local.
@@ -4120,7 +4120,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
if (src_ty.isPtrAtRuntime(zcu)) {
try writer.writeByte('(');
try f.renderType(writer, Type.usize);
try f.renderType(writer, .usize);
try writer.writeByte(')');
}
try f.writeCValue(writer, src_val, .Other);
@@ -4343,8 +4343,8 @@ fn airEquality(
try reap(f, inst, &.{ bin_op.lhs, bin_op.rhs });
const writer = f.object.writer();
const local = try f.allocLocal(inst, Type.bool);
const a = try Assignment.start(f, writer, CType.bool);
const local = try f.allocLocal(inst, .bool);
const a = try Assignment.start(f, writer, .bool);
try f.writeCValue(writer, local, .Other);
try a.assign(f, writer);
@@ -4401,7 +4401,7 @@ fn airCmpLtErrorsLen(f: *Function, inst: Air.Inst.Index) !CValue {
try reap(f, inst, &.{un_op});
const writer = f.object.writer();
const local = try f.allocLocal(inst, Type.bool);
const local = try f.allocLocal(inst, .bool);
try f.writeCValue(writer, local, .Other);
try writer.writeAll(" = ");
try f.writeCValue(writer, operand, .Other);
@@ -4517,7 +4517,7 @@ fn airSlice(f: *Function, inst: Air.Inst.Index) !CValue {
try a.end(f, writer);
}
{
const a = try Assignment.start(f, writer, CType.usize);
const a = try Assignment.start(f, writer, .usize);
try f.writeCValueMember(writer, local, .{ .identifier = "len" });
try a.assign(f, writer);
try f.writeCValue(writer, len, .Initializer);
@@ -4585,9 +4585,9 @@ fn airCall(
else => unreachable,
};
const fn_info = zcu.typeToFunc(if (callee_is_ptr) callee_ty.childType(zcu) else callee_ty).?;
const ret_ty = Type.fromInterned(fn_info.return_type);
const ret_ty: Type = .fromInterned(fn_info.return_type);
const ret_ctype: CType = if (ret_ty.isNoReturn(zcu))
CType.void
.void
else
try f.ctypeFromType(ret_ty, .parameter);
@@ -4599,7 +4599,7 @@ fn airCall(
break :result .none;
} else if (f.liveness.isUnused(inst)) {
try writer.writeByte('(');
try f.renderCType(writer, CType.void);
try f.renderCType(writer, .void);
try writer.writeByte(')');
break :result .none;
} else {
@@ -5081,20 +5081,20 @@ fn airBreakpoint(writer: anytype) !CValue {
fn airRetAddr(f: *Function, inst: Air.Inst.Index) !CValue {
const writer = f.object.writer();
const local = try f.allocLocal(inst, Type.usize);
const local = try f.allocLocal(inst, .usize);
try f.writeCValue(writer, local, .Other);
try writer.writeAll(" = (");
try f.renderType(writer, Type.usize);
try f.renderType(writer, .usize);
try writer.writeAll(")zig_return_address();\n");
return local;
}
fn airFrameAddress(f: *Function, inst: Air.Inst.Index) !CValue {
const writer = f.object.writer();
const local = try f.allocLocal(inst, Type.usize);
const local = try f.allocLocal(inst, .usize);
try f.writeCValue(writer, local, .Other);
try writer.writeAll(" = (");
try f.renderType(writer, Type.usize);
try f.renderType(writer, .usize);
try writer.writeAll(")zig_frame_address();\n");
return local;
}
@@ -5179,10 +5179,10 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index, is_dispatch_loop: bool) !void
try writer.writeAll("switch (");
const lowered_condition_ty = if (condition_ty.toIntern() == .bool_type)
Type.u1
const lowered_condition_ty: Type = if (condition_ty.toIntern() == .bool_type)
.u1
else if (condition_ty.isPtrAtRuntime(zcu))
Type.usize
.usize
else
condition_ty;
if (condition_ty.toIntern() != lowered_condition_ty.toIntern()) {
@@ -5219,7 +5219,7 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index, is_dispatch_loop: bool) !void
}
if (condition_ty.isPtrAtRuntime(zcu)) {
try writer.writeByte('(');
try f.renderType(writer, Type.usize);
try f.renderType(writer, .usize);
try writer.writeByte(')');
}
try f.object.dg.renderValue(writer, (try f.air.value(item, pt)).?, .Other);
@@ -5604,8 +5604,8 @@ fn airIsNull(
const operand = try f.resolveInst(un_op);
try reap(f, inst, &.{un_op});
const local = try f.allocLocal(inst, Type.bool);
const a = try Assignment.start(f, writer, CType.bool);
const local = try f.allocLocal(inst, .bool);
const a = try Assignment.start(f, writer, .bool);
try f.writeCValue(writer, local, .Other);
try a.assign(f, writer);
@@ -5750,7 +5750,7 @@ fn fieldLocation(
} {
const zcu = pt.zcu;
const ip = &zcu.intern_pool;
const container_ty = Type.fromInterned(ip.indexToKey(container_ptr_ty.toIntern()).ptr_type.child);
const container_ty: Type = .fromInterned(ip.indexToKey(container_ptr_ty.toIntern()).ptr_type.child);
switch (ip.indexToKey(container_ty.toIntern())) {
.struct_type => {
const loaded_struct = ip.loadStructType(container_ty.toIntern());
@@ -5781,7 +5781,7 @@ fn fieldLocation(
const loaded_union = ip.loadUnionType(container_ty.toIntern());
switch (loaded_union.flagsUnordered(ip).layout) {
.auto, .@"extern" => {
const field_ty = Type.fromInterned(loaded_union.field_types.get(ip)[field_index]);
const field_ty: Type = .fromInterned(loaded_union.field_types.get(ip)[field_index]);
if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu))
return if (loaded_union.hasTag(ip) and !container_ty.unionHasAllZeroBitFieldTypes(zcu))
.{ .field = .{ .identifier = "payload" } }
@@ -5850,7 +5850,7 @@ fn airFieldParentPtr(f: *Function, inst: Air.Inst.Index) !CValue {
switch (fieldLocation(container_ptr_ty, field_ptr_ty, extra.field_index, pt)) {
.begin => try f.writeCValue(writer, field_ptr_val, .Initializer),
.field => |field| {
const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, Type.u8);
const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, .u8);
try writer.writeAll("((");
try f.renderType(writer, u8_ptr_ty);
@@ -5863,14 +5863,14 @@ fn airFieldParentPtr(f: *Function, inst: Air.Inst.Index) !CValue {
try writer.writeAll("))");
},
.byte_offset => |byte_offset| {
const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, Type.u8);
const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, .u8);
try writer.writeAll("((");
try f.renderType(writer, u8_ptr_ty);
try writer.writeByte(')');
try f.writeCValue(writer, field_ptr_val, .Other);
try writer.print(" - {})", .{
try f.fmtIntLiteral(try pt.intValue(Type.usize, byte_offset)),
try f.fmtIntLiteral(try pt.intValue(.usize, byte_offset)),
});
},
}
@@ -5908,14 +5908,14 @@ fn fieldPtr(
try f.writeCValueDerefMember(writer, container_ptr_val, field);
},
.byte_offset => |byte_offset| {
const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, Type.u8);
const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, .u8);
try writer.writeAll("((");
try f.renderType(writer, u8_ptr_ty);
try writer.writeByte(')');
try f.writeCValue(writer, container_ptr_val, .Other);
try writer.print(" + {})", .{
try f.fmtIntLiteral(try pt.intValue(Type.usize, byte_offset)),
try f.fmtIntLiteral(try pt.intValue(.usize, byte_offset)),
});
},
}
@@ -6158,7 +6158,7 @@ fn airWrapOptional(f: *Function, inst: Air.Inst.Index) !CValue {
const writer = f.object.writer();
const local = try f.allocLocal(inst, inst_ty);
{
const a = try Assignment.start(f, writer, CType.bool);
const a = try Assignment.start(f, writer, .bool);
try f.writeCValueMember(writer, local, .{ .identifier = "is_null" });
try a.assign(f, writer);
try writer.writeAll("false");
@@ -6322,12 +6322,12 @@ fn airIsErr(f: *Function, inst: Air.Inst.Index, is_ptr: bool, operator: []const
const operand = try f.resolveInst(un_op);
try reap(f, inst, &.{un_op});
const operand_ty = f.typeOf(un_op);
const local = try f.allocLocal(inst, Type.bool);
const local = try f.allocLocal(inst, .bool);
const err_union_ty = if (is_ptr) operand_ty.childType(zcu) else operand_ty;
const payload_ty = err_union_ty.errorUnionPayload(zcu);
const error_ty = err_union_ty.errorUnionSet(zcu);
const a = try Assignment.start(f, writer, CType.bool);
const a = try Assignment.start(f, writer, .bool);
try f.writeCValue(writer, local, .Other);
try a.assign(f, writer);
const err_int_ty = try pt.errorIntType();
@@ -6385,17 +6385,17 @@ fn airArrayToSlice(f: *Function, inst: Air.Inst.Index) !CValue {
if (operand_child_ctype.info(ctype_pool) == .array) {
try writer.writeByte('&');
try f.writeCValueDeref(writer, operand);
try writer.print("[{}]", .{try f.fmtIntLiteral(try pt.intValue(Type.usize, 0))});
try writer.print("[{}]", .{try f.fmtIntLiteral(try pt.intValue(.usize, 0))});
} else try f.writeCValue(writer, operand, .Initializer);
}
try a.end(f, writer);
}
{
const a = try Assignment.start(f, writer, CType.usize);
const a = try Assignment.start(f, writer, .usize);
try f.writeCValueMember(writer, local, .{ .identifier = "len" });
try a.assign(f, writer);
try writer.print("{}", .{
try f.fmtIntLiteral(try pt.intValue(Type.usize, array_ty.arrayLen(zcu))),
try f.fmtIntLiteral(try pt.intValue(.usize, array_ty.arrayLen(zcu))),
});
try a.end(f, writer);
}
@@ -6627,7 +6627,7 @@ fn airCmpBuiltinCall(
try writer.writeByte(')');
if (!ref_ret) try writer.print("{s}{}", .{
compareOperatorC(operator),
try f.fmtIntLiteral(try pt.intValue(Type.i32, 0)),
try f.fmtIntLiteral(try pt.intValue(.i32, 0)),
});
try writer.writeAll(";\n");
try v.end(f, inst, writer);
@@ -6707,7 +6707,7 @@ fn airCmpxchg(f: *Function, inst: Air.Inst.Index, flavor: [*:0]const u8) !CValue
try a.end(f, writer);
}
{
const a = try Assignment.start(f, writer, CType.bool);
const a = try Assignment.start(f, writer, .bool);
try f.writeCValueMember(writer, local, .{ .identifier = "is_null" });
try a.assign(f, writer);
try writer.print("zig_cmpxchg_{s}((zig_atomic(", .{flavor});
@@ -6935,12 +6935,12 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
},
});
const index = try f.allocLocal(inst, Type.usize);
const index = try f.allocLocal(inst, .usize);
try writer.writeAll("for (");
try f.writeCValue(writer, index, .Other);
try writer.writeAll(" = ");
try f.object.dg.renderValue(writer, try pt.intValue(Type.usize, 0), .Initializer);
try f.object.dg.renderValue(writer, try pt.intValue(.usize, 0), .Initializer);
try writer.writeAll("; ");
try f.writeCValue(writer, index, .Other);
try writer.writeAll(" != ");
@@ -6976,7 +6976,7 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
return .none;
}
const bitcasted = try bitcast(f, Type.u8, value, elem_ty);
const bitcasted = try bitcast(f, .u8, value, elem_ty);
try writer.writeAll("memset(");
switch (dest_ty.ptrSize(zcu)) {
@@ -7038,7 +7038,7 @@ fn writeArrayLen(f: *Function, writer: ArrayListWriter, dest_ptr: CValue, dest_t
const zcu = pt.zcu;
switch (dest_ty.ptrSize(zcu)) {
.one => try writer.print("{}", .{
try f.fmtIntLiteral(try pt.intValue(Type.usize, dest_ty.childType(zcu).arrayLen(zcu))),
try f.fmtIntLiteral(try pt.intValue(.usize, dest_ty.childType(zcu).arrayLen(zcu))),
}),
.many, .c => unreachable,
.slice => try f.writeCValueMember(writer, dest_ptr, .{ .identifier = "len" }),
@@ -7200,11 +7200,11 @@ fn airShuffle(f: *Function, inst: Air.Inst.Index) !CValue {
for (0..extra.mask_len) |index| {
try f.writeCValue(writer, local, .Other);
try writer.writeByte('[');
try f.object.dg.renderValue(writer, try pt.intValue(Type.usize, index), .Other);
try f.object.dg.renderValue(writer, try pt.intValue(.usize, index), .Other);
try writer.writeAll("] = ");
const mask_elem = (try mask.elemValue(pt, index)).toSignedInt(zcu);
const src_val = try pt.intValue(Type.usize, @as(u64, @intCast(mask_elem ^ mask_elem >> 63)));
const src_val = try pt.intValue(.usize, @as(u64, @intCast(mask_elem ^ mask_elem >> 63)));
try f.writeCValue(writer, if (mask_elem >= 0) lhs else rhs, .Other);
try writer.writeByte('[');
@@ -7377,7 +7377,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
switch (ip.indexToKey(inst_ty.toIntern())) {
inline .array_type, .vector_type => |info, tag| {
const a: Assignment = .{
.ctype = try f.ctypeFromType(Type.fromInterned(info.child), .complete),
.ctype = try f.ctypeFromType(.fromInterned(info.child), .complete),
};
for (resolved_elements, 0..) |element, i| {
try a.restart(f, writer);
@@ -7402,7 +7402,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
.auto, .@"extern" => {
var field_it = loaded_struct.iterateRuntimeOrder(ip);
while (field_it.next()) |field_index| {
const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
const a = try Assignment.start(f, writer, try f.ctypeFromType(field_ty, .complete));
@@ -7466,8 +7466,8 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
if (field_ty.isPtrAtRuntime(zcu)) {
try writer.writeByte('(');
try f.renderType(writer, switch (int_info.signedness) {
.unsigned => Type.usize,
.signed => Type.isize,
.unsigned => .usize,
.signed => .isize,
});
try writer.writeByte(')');
}
@@ -7501,7 +7501,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
},
.tuple_type => |tuple_info| for (0..tuple_info.types.len) |field_index| {
if (tuple_info.values.get(ip)[field_index] != .none) continue;
const field_ty = Type.fromInterned(tuple_info.types.get(ip)[field_index]);
const field_ty: Type = .fromInterned(tuple_info.types.get(ip)[field_index]);
if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
const a = try Assignment.start(f, writer, try f.ctypeFromType(field_ty, .complete));
@@ -8141,13 +8141,13 @@ fn formatIntLiteral(
} = switch (data.ctype.info(ctype_pool)) {
.basic => |basic_info| switch (basic_info) {
else => .{
.ctype = CType.void,
.ctype = .void,
.count = 1,
.endian = .little,
.homogeneous = true,
},
.zig_u128, .zig_i128 => .{
.ctype = CType.u64,
.ctype = .u64,
.count = 2,
.endian = .big,
.homogeneous = false,
@@ -8253,7 +8253,7 @@ fn formatIntLiteral(
.int_info = c_limb_int_info,
.kind = data.kind,
.ctype = c_limb_ctype,
.val = try pt.intValue_big(Type.comptime_int, c_limb_mut.toConst()),
.val = try pt.intValue_big(.comptime_int, c_limb_mut.toConst()),
}, fmt, options, writer);
}
}
@@ -8330,15 +8330,15 @@ const Vectorize = struct {
const pt = f.object.dg.pt;
const zcu = pt.zcu;
return if (ty.zigTypeTag(zcu) == .vector) index: {
const local = try f.allocLocal(inst, Type.usize);
const local = try f.allocLocal(inst, .usize);
try writer.writeAll("for (");
try f.writeCValue(writer, local, .Other);
try writer.print(" = {d}; ", .{try f.fmtIntLiteral(try pt.intValue(Type.usize, 0))});
try writer.print(" = {d}; ", .{try f.fmtIntLiteral(try pt.intValue(.usize, 0))});
try f.writeCValue(writer, local, .Other);
try writer.print(" < {d}; ", .{try f.fmtIntLiteral(try pt.intValue(Type.usize, ty.vectorLen(zcu)))});
try writer.print(" < {d}; ", .{try f.fmtIntLiteral(try pt.intValue(.usize, ty.vectorLen(zcu)))});
try f.writeCValue(writer, local, .Other);
try writer.print(" += {d}) {{\n", .{try f.fmtIntLiteral(try pt.intValue(Type.usize, 1))});
try writer.print(" += {d}) {{\n", .{try f.fmtIntLiteral(try pt.intValue(.usize, 1))});
f.object.indent_writer.pushIndent();
break :index .{ .index = local };

View File

@@ -1289,26 +1289,26 @@ pub const Pool = struct {
kind: Kind,
) !CType {
switch (int_info.bits) {
0 => return CType.void,
0 => return .void,
1...8 => switch (int_info.signedness) {
.signed => return CType.i8,
.unsigned => return CType.u8,
.signed => return .i8,
.unsigned => return .u8,
},
9...16 => switch (int_info.signedness) {
.signed => return CType.i16,
.unsigned => return CType.u16,
.signed => return .i16,
.unsigned => return .u16,
},
17...32 => switch (int_info.signedness) {
.signed => return CType.i32,
.unsigned => return CType.u32,
.signed => return .i32,
.unsigned => return .u32,
},
33...64 => switch (int_info.signedness) {
.signed => return CType.i64,
.unsigned => return CType.u64,
.signed => return .i64,
.unsigned => return .u64,
},
65...128 => switch (int_info.signedness) {
.signed => return CType.i128,
.unsigned => return CType.u128,
.signed => return .i128,
.unsigned => return .u128,
},
else => {
const target = &mod.resolved_target.result;
@@ -1357,19 +1357,19 @@ pub const Pool = struct {
.null_type,
.undefined_type,
.enum_literal_type,
=> return CType.void,
.u1_type, .u8_type => return CType.u8,
.i8_type => return CType.i8,
.u16_type => return CType.u16,
.i16_type => return CType.i16,
.u29_type, .u32_type => return CType.u32,
.i32_type => return CType.i32,
.u64_type => return CType.u64,
.i64_type => return CType.i64,
.u80_type, .u128_type => return CType.u128,
.i128_type => return CType.i128,
.usize_type => return CType.usize,
.isize_type => return CType.isize,
=> return .void,
.u1_type, .u8_type => return .u8,
.i8_type => return .i8,
.u16_type => return .u16,
.i16_type => return .i16,
.u29_type, .u32_type => return .u32,
.i32_type => return .i32,
.u64_type => return .u64,
.i64_type => return .i64,
.u80_type, .u128_type => return .u128,
.i128_type => return .i128,
.usize_type => return .usize,
.isize_type => return .isize,
.c_char_type => return .{ .index = .char },
.c_short_type => return .{ .index = .short },
.c_ushort_type => return .{ .index = .@"unsigned short" },
@@ -1380,12 +1380,12 @@ pub const Pool = struct {
.c_longlong_type => return .{ .index = .@"long long" },
.c_ulonglong_type => return .{ .index = .@"unsigned long long" },
.c_longdouble_type => return .{ .index = .@"long double" },
.f16_type => return CType.f16,
.f32_type => return CType.f32,
.f64_type => return CType.f64,
.f80_type => return CType.f80,
.f128_type => return CType.f128,
.bool_type, .optional_noreturn_type => return CType.bool,
.f16_type => return .f16,
.f32_type => return .f32,
.f64_type => return .f64,
.f80_type => return .f80,
.f128_type => return .f128,
.bool_type, .optional_noreturn_type => return .bool,
.noreturn_type,
.anyframe_type,
.generic_poison_type,
@@ -1397,19 +1397,20 @@ pub const Pool = struct {
.signedness = .unsigned,
.bits = pt.zcu.errorSetBits(),
}, mod, kind),
.manyptr_u8_type,
=> return pool.getPointer(allocator, .{
.elem_ctype = CType.u8,
.elem_ctype = .u8,
}),
.manyptr_const_u8_type,
.manyptr_const_u8_sentinel_0_type,
=> return pool.getPointer(allocator, .{
.elem_ctype = CType.u8,
.elem_ctype = .u8,
.@"const" = true,
}),
.single_const_pointer_to_comptime_int_type,
=> return pool.getPointer(allocator, .{
.elem_ctype = CType.void,
.elem_ctype = .void,
.@"const" = true,
}),
.slice_const_u8_type,
@@ -1420,14 +1421,14 @@ pub const Pool = struct {
.{
.name = .{ .index = .ptr },
.ctype = try pool.getPointer(allocator, .{
.elem_ctype = CType.u8,
.elem_ctype = .u8,
.@"const" = true,
}),
.alignas = AlignAs.fromAbiAlignment(Type.ptrAbiAlignment(target.*)),
},
.{
.name = .{ .index = .len },
.ctype = CType.usize,
.ctype = .usize,
.alignas = AlignAs.fromAbiAlignment(
Type.intAbiAlignment(target.ptrBitWidth(), target.*),
),
@@ -1436,6 +1437,97 @@ pub const Pool = struct {
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
.vector_4_f16_type => {
const vector_ctype = try pool.getVector(allocator, .{
.elem_ctype = .f16,
.len = 4,
});
if (!kind.isParameter()) return vector_ctype;
var fields = [_]Info.Field{
.{
.name = .{ .index = .array },
.ctype = vector_ctype,
.alignas = AlignAs.fromAbiAlignment(Type.f16.abiAlignment(zcu)),
},
};
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
.vector_8_f16_type => {
const vector_ctype = try pool.getVector(allocator, .{
.elem_ctype = .f16,
.len = 8,
});
if (!kind.isParameter()) return vector_ctype;
var fields = [_]Info.Field{
.{
.name = .{ .index = .array },
.ctype = vector_ctype,
.alignas = AlignAs.fromAbiAlignment(Type.f16.abiAlignment(zcu)),
},
};
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
.vector_4_f32_type => {
const vector_ctype = try pool.getVector(allocator, .{
.elem_ctype = .f32,
.len = 4,
});
if (!kind.isParameter()) return vector_ctype;
var fields = [_]Info.Field{
.{
.name = .{ .index = .array },
.ctype = vector_ctype,
.alignas = AlignAs.fromAbiAlignment(Type.f32.abiAlignment(zcu)),
},
};
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
.vector_8_f32_type => {
const vector_ctype = try pool.getVector(allocator, .{
.elem_ctype = .f32,
.len = 8,
});
if (!kind.isParameter()) return vector_ctype;
var fields = [_]Info.Field{
.{
.name = .{ .index = .array },
.ctype = vector_ctype,
.alignas = AlignAs.fromAbiAlignment(Type.f32.abiAlignment(zcu)),
},
};
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
.vector_2_f64_type => {
const vector_ctype = try pool.getVector(allocator, .{
.elem_ctype = .f64,
.len = 2,
});
if (!kind.isParameter()) return vector_ctype;
var fields = [_]Info.Field{
.{
.name = .{ .index = .array },
.ctype = vector_ctype,
.alignas = AlignAs.fromAbiAlignment(Type.f64.abiAlignment(zcu)),
},
};
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
.vector_4_f64_type => {
const vector_ctype = try pool.getVector(allocator, .{
.elem_ctype = .f64,
.len = 4,
});
if (!kind.isParameter()) return vector_ctype;
var fields = [_]Info.Field{
.{
.name = .{ .index = .array },
.ctype = vector_ctype,
.alignas = AlignAs.fromAbiAlignment(Type.f64.abiAlignment(zcu)),
},
};
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
.undef,
.zero,
.zero_usize,
@@ -1521,7 +1613,7 @@ pub const Pool = struct {
},
.{
.name = .{ .index = .len },
.ctype = CType.usize,
.ctype = .usize,
.alignas = AlignAs.fromAbiAlignment(
Type.intAbiAlignment(target.ptrBitWidth(), target.*),
),
@@ -1532,7 +1624,7 @@ pub const Pool = struct {
},
.array_type => |array_info| {
const len = array_info.lenIncludingSentinel();
if (len == 0) return CType.void;
if (len == 0) return .void;
const elem_type = Type.fromInterned(array_info.child);
const elem_ctype = try pool.fromType(
allocator,
@@ -1542,7 +1634,7 @@ pub const Pool = struct {
mod,
kind.noParameter(),
);
if (elem_ctype.index == .void) return CType.void;
if (elem_ctype.index == .void) return .void;
const array_ctype = try pool.getArray(allocator, .{
.elem_ctype = elem_ctype,
.len = len,
@@ -1558,7 +1650,7 @@ pub const Pool = struct {
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
.vector_type => |vector_info| {
if (vector_info.len == 0) return CType.void;
if (vector_info.len == 0) return .void;
const elem_type = Type.fromInterned(vector_info.child);
const elem_ctype = try pool.fromType(
allocator,
@@ -1568,7 +1660,7 @@ pub const Pool = struct {
mod,
kind.noParameter(),
);
if (elem_ctype.index == .void) return CType.void;
if (elem_ctype.index == .void) return .void;
const vector_ctype = try pool.getVector(allocator, .{
.elem_ctype = elem_ctype,
.len = vector_info.len,
@@ -1584,7 +1676,7 @@ pub const Pool = struct {
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
.opt_type => |payload_type| {
if (ip.isNoReturn(payload_type)) return CType.void;
if (ip.isNoReturn(payload_type)) return .void;
const payload_ctype = try pool.fromType(
allocator,
scratch,
@@ -1593,7 +1685,7 @@ pub const Pool = struct {
mod,
kind.noParameter(),
);
if (payload_ctype.index == .void) return CType.bool;
if (payload_ctype.index == .void) return .bool;
switch (payload_type) {
.anyerror_type => return payload_ctype,
else => switch (ip.indexToKey(payload_type)) {
@@ -1606,7 +1698,7 @@ pub const Pool = struct {
var fields = [_]Info.Field{
.{
.name = .{ .index = .is_null },
.ctype = CType.bool,
.ctype = .bool,
.alignas = AlignAs.fromAbiAlignment(.@"1"),
},
.{
@@ -1666,7 +1758,7 @@ pub const Pool = struct {
if (kind.isForward()) return if (ty.hasRuntimeBitsIgnoreComptime(zcu))
fwd_decl
else
CType.void;
.void;
const scratch_top = scratch.items.len;
defer scratch.shrinkRetainingCapacity(scratch_top);
try scratch.ensureUnusedCapacity(
@@ -1710,7 +1802,7 @@ pub const Pool = struct {
scratch.items.len - scratch_top,
@typeInfo(Field).@"struct".fields.len,
));
if (fields_len == 0) return CType.void;
if (fields_len == 0) return .void;
try pool.ensureUnusedCapacity(allocator, 1);
const extra_index = try pool.addHashedExtra(allocator, &hasher, Aggregate, .{
.fwd_decl = fwd_decl.index,
@@ -1762,7 +1854,7 @@ pub const Pool = struct {
scratch.items.len - scratch_top,
@typeInfo(Field).@"struct".fields.len,
));
if (fields_len == 0) return CType.void;
if (fields_len == 0) return .void;
if (kind.isForward()) {
try pool.ensureUnusedCapacity(allocator, 1);
const extra_index = try pool.addHashedExtra(
@@ -1801,7 +1893,7 @@ pub const Pool = struct {
if (kind.isForward()) return if (ty.hasRuntimeBitsIgnoreComptime(zcu))
fwd_decl
else
CType.void;
.void;
const loaded_tag = loaded_union.loadTagType(ip);
const scratch_top = scratch.items.len;
defer scratch.shrinkRetainingCapacity(scratch_top);
@@ -1848,7 +1940,7 @@ pub const Pool = struct {
@typeInfo(Field).@"struct".fields.len,
));
if (!has_tag) {
if (fields_len == 0) return CType.void;
if (fields_len == 0) return .void;
try pool.ensureUnusedCapacity(allocator, 1);
const extra_index = try pool.addHashedExtra(
allocator,
@@ -1915,7 +2007,7 @@ pub const Pool = struct {
struct_fields_len += 1;
}
}
if (struct_fields_len == 0) return CType.void;
if (struct_fields_len == 0) return .void;
sortFields(struct_fields[0..struct_fields_len]);
return pool.getAggregate(allocator, .{
.tag = .@"struct",
@@ -1929,7 +2021,7 @@ pub const Pool = struct {
}, mod, kind),
}
},
.opaque_type => return CType.void,
.opaque_type => return .void,
.enum_type => return pool.fromType(
allocator,
scratch,
@@ -1938,7 +2030,7 @@ pub const Pool = struct {
mod,
kind,
),
.func_type => |func_info| if (func_info.is_generic) return CType.void else {
.func_type => |func_info| if (func_info.is_generic) return .void else {
const scratch_top = scratch.items.len;
defer scratch.shrinkRetainingCapacity(scratch_top);
try scratch.ensureUnusedCapacity(allocator, func_info.param_types.len);
@@ -1952,7 +2044,7 @@ pub const Pool = struct {
pt,
mod,
kind.asParameter(),
) else CType.void;
) else .void;
for (0..func_info.param_types.len) |param_index| {
const param_type = Type.fromInterned(
func_info.param_types.get(ip)[param_index],
@@ -2033,7 +2125,7 @@ pub const Pool = struct {
pub fn eql(map_adapter: @This(), _: CType, _: void, pool_index: usize) bool {
return map_adapter.source_info.eqlAdapted(
map_adapter.source_pool,
CType.fromPoolIndex(pool_index),
.fromPoolIndex(pool_index),
map_adapter.pool,
map_adapter.pool_adapter,
);
@@ -2047,7 +2139,7 @@ pub const Pool = struct {
.pool_adapter = pool_adapter,
});
errdefer _ = pool.map.pop();
const ctype = CType.fromPoolIndex(gop.index);
const ctype: CType = .fromPoolIndex(gop.index);
if (!gop.found_existing) switch (source_info) {
.basic => unreachable,
.pointer => |pointer_info| pool.items.appendAssumeCapacity(.{
@@ -2232,7 +2324,7 @@ pub const Pool = struct {
CTypeAdapter{ .pool = pool },
);
if (!gop.found_existing) pool.items.appendAssumeCapacity(.{ .tag = tag, .data = data });
return CType.fromPoolIndex(gop.index);
return .fromPoolIndex(gop.index);
}
fn tagExtra(
@@ -2290,7 +2382,7 @@ pub const Pool = struct {
pool.extra.shrinkRetainingCapacity(extra_index)
else
pool.items.appendAssumeCapacity(.{ .tag = tag, .data = extra_index });
return CType.fromPoolIndex(gop.index);
return .fromPoolIndex(gop.index);
}
fn sortFields(fields: []Info.Field) void {

View File

@@ -335,12 +335,12 @@ fn testAbsUnsignedIntVectors(comptime len: comptime_int) !void {
test "@abs float vectors" {
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
// https://github.com/ziglang/zig/issues/12827
if (builtin.zig_backend == .stage2_llvm and

View File

@@ -32,6 +32,7 @@ pub fn build(b: *std.Build) void {
.cpu_features_sub = std.Target.x86.featureSet(&.{
.cmov,
//.sse,
.sse2,
}),
},
//.{

View File

@@ -22,16 +22,20 @@ inline fn sign(rhs: anytype) switch (@typeInfo(@TypeOf(rhs))) {
.vector => |vector| @Vector(vector.len, bool),
} {
switch (@typeInfo(@TypeOf(rhs))) {
else => return @as(@Type(.{ .int = .{
.signedness = .signed,
.bits = @bitSizeOf(@TypeOf(rhs)),
} }), @bitCast(rhs)) < 0,
else => {
const I = @Type(.{ .int = .{
.signedness = .unsigned,
.bits = @bitSizeOf(@TypeOf(rhs)),
} });
return @as(I, @bitCast(rhs)) & @as(I, 1) << (@bitSizeOf(I) - 1) != 0;
},
.vector => |vector| {
const V = @Vector(vector.len, @Type(.{ .int = .{
.signedness = .signed,
const I = @Type(.{ .int = .{
.signedness = .unsigned,
.bits = @bitSizeOf(vector.child),
} }));
return @as(V, @bitCast(rhs)) < @as(V, @splat(0));
} });
const V = @Vector(vector.len, I);
return @as(V, @bitCast(rhs)) & @as(V, @splat(@as(I, 1) << (@bitSizeOf(I) - 1))) != @as(V, @splat(0));
},
}
}
@@ -40,7 +44,7 @@ inline fn boolAnd(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {
.bool => return lhs and rhs,
.vector => |vector| switch (vector.child) {
bool => {
const Bits = @Vector(vector.len, u1);
const Bits = @Type(.{ .int = .{ .signedness = .unsigned, .bits = vector.len } });
const lhs_bits: Bits = @bitCast(lhs);
const rhs_bits: Bits = @bitCast(rhs);
return @bitCast(lhs_bits & rhs_bits);
@@ -56,7 +60,7 @@ inline fn boolOr(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {
.bool => return lhs or rhs,
.vector => |vector| switch (vector.child) {
bool => {
const Bits = @Vector(vector.len, u1);
const Bits = @Type(.{ .int = .{ .signedness = .unsigned, .bits = vector.len } });
const lhs_bits: Bits = @bitCast(lhs);
const rhs_bits: Bits = @bitCast(rhs);
return @bitCast(lhs_bits | rhs_bits);
@@ -1179,6 +1183,145 @@ fn Unary(comptime op: anytype) type {
try testArgs(@Vector(3, i1025), .{ -1 << 1024, -1, 0 });
try testArgs(@Vector(3, u1025), .{ 0, 1, 1 << 1024 });
}
fn testFloatVectorTypes() !void {
try testArgs(@Vector(1, f16), .{
-0x1.17cp-12,
});
try testArgs(@Vector(2, f16), .{
0x1.47cp9, 0x1.3acp9,
});
try testArgs(@Vector(4, f16), .{
0x1.ab4p0, -0x1.7fcp-7, -0x1.1cp0, -0x1.f14p12,
});
try testArgs(@Vector(8, f16), .{
-0x1.8d8p8, 0x1.83p10, -0x1.5ap-1, -0x1.d78p13, -0x1.608p12, 0x1.e8p-9, -0x1.688p-10, -0x1.738p9,
});
try testArgs(@Vector(16, f16), .{
0x1.da8p-1, -0x1.ed4p-10, -0x1.dc8p1, 0x1.b78p-14, nan(f16), 0x1.9d8p8, nan(f16), 0x1.d5p13,
-0x1.2dp13, 0x1.6c4p12, 0x1.a9cp-11, -0x1.0ecp8, 0x0.4ccp-14, -0x1.0a8p-6, -0x1.5bcp-14, 0x1.6d8p-9,
});
try testArgs(@Vector(32, f16), .{
0x1.d5cp-6, -0x1.a98p5, 0x1.49cp5, -0x1.e4p-1, -0x1.21p-13, -0x1.c94p-1, -0x1.adcp-5, -0x1.524p-1,
-0x1.0d8p-3, -0x1.5c4p-2, 0x1.f84p-2, 0x1.664p1, -0x1.f64p13, -0x1.bf4p4, -0x1.4b8p0, -0x0.f64p-14,
-0x1.3f8p1, 0x1.098p2, -0x1.a44p8, 0x1.048p13, 0x1.fd4p-11, 0x1.18p-9, -0x1.504p2, 0x1.d04p7,
-nan(f16), 0x1.a94p2, 0x0.5e8p-14, -0x1.7acp-7, 0x1.4c8p-3, 0x1.518p-4, nan(f16), 0x1.8f8p10,
});
try testArgs(@Vector(64, f16), .{
-0x1.c2p2, 0x0.2fcp-14, 0x1.de8p0, -0x1.714p2, 0x1.f9p-7, -0x1.11cp-13, -0x1.558p10, -0x1.2acp-7,
0x1.348p14, 0x1.2dcp7, -0x1.8acp-12, -0x1.2cp2, 0x1.868p1, -0x1.1f8p-14, 0x1.638p7, -0x1.734p-5,
0x0.b98p-14, -0x1.7f4p-12, -0x1.38cp15, 0x1.50cp15, 0x1.91cp8, 0x1.cb4p-1, 0x1.fc4p-13, 0x1.9a4p0,
0x1.18p-4, 0x1.60cp10, 0x1.6fp-12, 0x1.b48p6, 0x1.37cp-11, 0x1.424p7, 0x1.44cp13, 0x1.aep5,
0x1.968p14, 0x1.e8p13, -0x1.bp2, -0x1.644p5, 0x1.de4p-8, -0x1.5b4p-14, -0x1.4ap1, -0x1.868p9,
-0x1.d14p0, 0x1.d7cp15, 0x1.3c8p14, 0x1.2ccp-14, -0x1.ee4p8, 0x1.49p-3, 0x1.35cp12, 0x1.d34p6,
0x1.7acp3, -0x1.fa4p2, 0x1.7b4p13, -0x1.cf4p-12, -0x1.ebcp-10, -0x1.5p-3, 0x1.4bp-6, 0x1.83p12,
-0x1.f9cp-8, -0x1.43p-8, -0x1.99p-1, -0x1.dacp3, -0x1.728p-4, -0x1.03cp4, 0x1.604p-2, -0x1.0ep13,
});
try testArgs(@Vector(1, f32), .{
-0x1.17cp-12,
});
try testArgs(@Vector(2, f32), .{
-0x1.a3123ap90, -0x1.4a2ec6p-54,
});
try testArgs(@Vector(4, f32), .{
-0x1.8a41p77, -0x1.7c54e2p-61, -0x1.498556p-41, 0x1.d77c22p-20,
});
try testArgs(@Vector(8, f32), .{
0x1.943da4p-86, 0x1.528792p95, -0x1.9c9bfap-26, -0x1.8df936p-90,
-0x1.6a70cep56, 0x1.626638p-48, 0x1.7bb2bap-57, -0x1.ac5104p94,
});
try testArgs(@Vector(16, f32), .{
0x1.157044p115, -0x1.416c04p-111, 0x1.a8f164p-104, 0x1.9b6678p84,
-0x1.9d065cp9, -0x1.e8c4b4p126, -0x1.ddb968p84, -0x1.fec8c8p74,
0x1.64ffb2p59, 0x1.548922p20, 0x1.7270fcp22, -0x1.abac68p33,
0x1.faabfp33, -0x1.8aee82p55, 0x1.1bf8fp75, 0x1.33c46ap-66,
});
try testArgs(@Vector(32, f32), .{
-0x1.039b68p37, -0x1.34de4ap-74, -0x1.05d78ap-76, -0x1.be0f5ap-47,
0x1.032204p-38, 0x1.ef8e2ap-78, -0x1.b013ecp-80, 0x1.71fe4cp99,
0x1.abdadap-14, 0x1.56a9a8p-48, -0x1.8bbd7ep9, 0x1.edd308p-72,
-0x1.92fafcp-121, -0x1.50812p19, 0x1.f4ddc4p28, -0x1.6f0b12p-50,
-0x1.12ab02p127, 0x1.24df48p21, -0x1.993c3p-14, -0x1.4cc476p-112,
0x1.13d9a8p-40, 0x1.a6e652p-9, -0x1.9c730cp-21, -0x1.a75aaap-70,
-0x1.39e632p-111, 0x1.8e8da8p-45, 0x1.b5652cp31, 0x1.258366p44,
0x1.d473aap92, -0x1.951b64p9, 0x1.542edp15, -0x0.f6222ap-126,
});
try testArgs(@Vector(1, f64), .{
-0x1.0114613df6f97p816,
});
try testArgs(@Vector(2, f64), .{
-0x1.8404dad72003cp720, -0x1.6b14b40bcf3b7p-176,
});
try testArgs(@Vector(4, f64), .{
-0x1.04e1acbfddd9cp681, -0x1.ed553cc056da7p-749,
0x1.3d3f703a0c893p-905, 0x1.0b35633fa78fp691,
});
try testArgs(@Vector(8, f64), .{
-0x1.901a2a60f0562p-301, -0x1.2516175ad61ecp-447,
0x1.e7b12124846bfp564, 0x1.9291384bd7259p209,
-0x1.a7bf62f803c98p900, 0x1.4e2e26257bb3p987,
-0x1.413ca9a32d894p811, 0x1.61b1dd9432e95p479,
});
try testArgs(@Vector(16, f64), .{
-0x1.8fc7286d95f54p-235, -0x1.796a7ea8372b6p-837,
-0x1.8c0f930539acbp-98, -0x1.ec80dfbf0b931p-430,
-0x1.e3d80c640652fp-1019, 0x1.8241238fb542fp161,
-0x1.e1f1a79d50263p137, -0x1.9ac5cb2771c28p-791,
0x1.4d8f00fe881e7p-401, -0x1.87fbd7bfd99d7p346,
-0x1.a8a7cc575335ep1017, 0x1.37bb88dc3fd8bp-355,
0x1.9d53d346c0e65p929, -0x1.bbae3d0229c34p289,
-0x1.cb8ef994d5ce5p25, 0x1.ba20af512616ap50,
});
try testArgs(@Vector(1, f80), .{
-0x1.a2e9410a7dfedabp-2324,
});
try testArgs(@Vector(2, f80), .{
-0x1.a2e9410a7dfedabp-2324,
0x1.2b17da3b9746885p-8665,
});
try testArgs(@Vector(4, f80), .{
-0x1.c488fedb7ab646cep-13007,
0x1.e914deaccaa50016p2073,
-0x1.d1c7ae8ec3c9df86p10642,
-0x1.2da1658f337fa01p9893,
});
try testArgs(@Vector(8, f80), .{
-0x1.bed8a74c43750656p890,
-0x1.7bf57f38004ac976p8481,
-0x1.9cdc10ac0657d328p7884,
0x1.c86f61883da149fp12293,
-0x1.528d6957df6bfdd8p14125,
-0x1.5ebb4006d0243bfep14530,
-0x1.94b9b18636d12402p-1845,
-0x1.25439a6d68add188p5962,
});
try testArgs(@Vector(1, f128), .{
-0x1.d1e6fc3b1e66632e7b79051a47dap14300,
});
try testArgs(@Vector(2, f128), .{
0x1.84b3ac8ffe5893b2c6af8d68de9dp-83,
-0x1.438ca2c8a0d8e3ee9062d351c46ep-10235,
});
try testArgs(@Vector(4, f128), .{
0x1.04eb03882d4fd1b090e714d3e5ep806,
-0x1.4082b29f7c26e701764c915642ffp-6182,
-0x1.b6f1e8565e5040415110f18b519ap13383,
0x1.1c29f8c162cead9061c5797ea15ap11957,
});
try testArgs(@Vector(8, f128), .{
-0x1.53d7f00cd204d80e5ff5bb665773p11218,
-0x1.4daa1c81cffe28e8fa5cd703c287p2362,
-0x1.cc6a71c3ad4560871efdbd025cd7p-8116,
-0x1.87f8553cf8772fb6b78e7df3e3bap14523,
-0x1.14b6880f6678f86dfb543dde1c6ep2105,
0x1.9d2d4398414da9d857e76e8fd7ccp-13668,
0x1.a37f07af240ded458d103c022064p-1158,
0x1.425d53e6bd6070b847e5da1ed593p1394,
});
}
};
}
@@ -1601,6 +1744,7 @@ test abs {
try Unary(abs).testIntTypes();
try Unary(abs).testIntVectorTypes();
try Unary(abs).testFloatTypes();
try Unary(abs).testFloatVectorTypes();
}
inline fn clz(comptime Type: type, rhs: Type) @TypeOf(@clz(rhs)) {

View File

@@ -526,8 +526,9 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
\\ var null_u32: ?u32 = null;
\\ var maybe_u32: ?u32 = null;
\\ var nonnull_u32: ?u32 = 456;
\\ null_u32 = null_u32;
\\ maybe_u32 = 123;
\\ _ = .{ &null_u32, &nonnull_u32 };
\\ nonnull_u32 = nonnull_u32;
\\ }
\\}
\\
@@ -539,7 +540,7 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
\\frame variable -- null_u32 maybe_u32 nonnull_u32
\\breakpoint delete --force 1
\\
\\breakpoint set --file optionals.zig --source-pattern-regexp '_ = \.{ &null_u32, &nonnull_u32 };'
\\breakpoint set --file optionals.zig --source-pattern-regexp 'nonnull_u32 = nonnull_u32;'
\\process continue
\\frame variable --show-types -- null_u32 maybe_u32 nonnull_u32
\\breakpoint delete --force 2
@@ -1285,10 +1286,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
\\ mod1.m1cfi(r0pai ^ 8);
\\}
\\pub fn r0cf(r0ca: u32) void {
\\ _ = r0ca;
\\ var discard = r0ca;
\\ _ = &discard;
\\}
\\pub inline fn r0cfi(r0cai: u32) void {
\\ _ = r0cai;
\\ var discard = r0cai;
\\ _ = &discard;
\\}
\\pub fn main() void {
\\ root0.r0pf(12);
@@ -1331,10 +1334,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
\\ mod1.m1cfi(r1pai ^ 8);
\\}
\\pub fn r1cf(r1ca: u32) void {
\\ _ = r1ca;
\\ var discard = r1ca;
\\ _ = &discard;
\\}
\\pub inline fn r1cfi(r1cai: u32) void {
\\ _ = r1cai;
\\ var discard = r1cai;
\\ _ = &discard;
\\}
\\
,
@@ -1368,10 +1373,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
\\ mod1.m1cfi(m0pai ^ 8);
\\}
\\pub fn m0cf(m0ca: u32) void {
\\ _ = m0ca;
\\ var discard = m0ca;
\\ _ = &discard;
\\}
\\pub inline fn m0cfi(m0cai: u32) void {
\\ _ = m0cai;
\\ var discard = m0cai;
\\ _ = &discard;
\\}
\\
,
@@ -1404,10 +1411,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
\\ mod1.m1cfi(m1pai ^ 8);
\\}
\\pub fn m1cf(m1ca: u32) void {
\\ _ = m1ca;
\\ var discard = m1ca;
\\ _ = &discard;
\\}
\\pub inline fn m1cfi(m1cai: u32) void {
\\ _ = m1cai;
\\ var discard = m1cai;
\\ _ = &discard;
\\}
\\
,
@@ -1416,13 +1425,13 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
\\settings set frame-format 'frame #${frame.index}:{ ${module.file.basename}{\`${function.name-with-args}{${frame.no-debug}${function.pc-offset}}}}{ at ${line.file.basename}:${line.number}{:${line.column}}}{${function.is-optimized} [opt]}{${frame.is-artificial} [artificial]}\n'
\\
\\breakpoint set --file root0.zig --line 26
\\breakpoint set --file root0.zig --line 29
\\breakpoint set --file root0.zig --line 30
\\breakpoint set --file root1.zig --line 26
\\breakpoint set --file root1.zig --line 29
\\breakpoint set --file root1.zig --line 30
\\breakpoint set --file mod0.zig --line 26
\\breakpoint set --file mod0.zig --line 29
\\breakpoint set --file mod0.zig --line 30
\\breakpoint set --file mod1.zig --line 26
\\breakpoint set --file mod1.zig --line 29
\\breakpoint set --file mod1.zig --line 30
\\
\\process launch
\\thread backtrace --count 3
@@ -1563,259 +1572,259 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
&.{
\\ * frame #0: inline_call`root0.r0cf(r0ca=13) at root0.zig:26:5
\\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:6:15
\\ frame #2: inline_call`root0.main at root0.zig:32:15
\\ frame #2: inline_call`root0.main at root0.zig:34:15
,
\\ * frame #0: inline_call`root0.r0pf [inlined] r0cfi(r0cai=14) at root0.zig:29:5
\\ * frame #0: inline_call`root0.r0pf [inlined] r0cfi(r0cai=14) at root0.zig:30:5
\\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:7:16
\\ frame #2: inline_call`root0.main at root0.zig:32:15
\\ frame #2: inline_call`root0.main at root0.zig:34:15
,
\\ * frame #0: inline_call`root1.r1cf(r1ca=15) at root1.zig:26:5
\\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:8:15
\\ frame #2: inline_call`root0.main at root0.zig:32:15
\\ frame #2: inline_call`root0.main at root0.zig:34:15
,
\\ * frame #0: inline_call`root0.r0pf [inlined] r1cfi(r1cai=8) at root1.zig:29:5
\\ * frame #0: inline_call`root0.r0pf [inlined] r1cfi(r1cai=8) at root1.zig:30:5
\\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:9:16
\\ frame #2: inline_call`root0.main at root0.zig:32:15
\\ frame #2: inline_call`root0.main at root0.zig:34:15
,
\\ * frame #0: inline_call`mod0.m0cf(m0ca=9) at mod0.zig:26:5
\\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:10:14
\\ frame #2: inline_call`root0.main at root0.zig:32:15
\\ frame #2: inline_call`root0.main at root0.zig:34:15
,
\\ * frame #0: inline_call`root0.r0pf [inlined] m0cfi(m0cai=10) at mod0.zig:29:5
\\ * frame #0: inline_call`root0.r0pf [inlined] m0cfi(m0cai=10) at mod0.zig:30:5
\\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:11:15
\\ frame #2: inline_call`root0.main at root0.zig:32:15
\\ frame #2: inline_call`root0.main at root0.zig:34:15
,
\\ * frame #0: inline_call`mod1.m1cf(m1ca=11) at mod1.zig:26:5
\\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:12:14
\\ frame #2: inline_call`root0.main at root0.zig:32:15
\\ frame #2: inline_call`root0.main at root0.zig:34:15
,
\\ * frame #0: inline_call`root0.r0pf [inlined] m1cfi(m1cai=4) at mod1.zig:29:5
\\ * frame #0: inline_call`root0.r0pf [inlined] m1cfi(m1cai=4) at mod1.zig:30:5
\\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:13:15
\\ frame #2: inline_call`root0.main at root0.zig:32:15
\\ frame #2: inline_call`root0.main at root0.zig:34:15
,
\\ * frame #0: inline_call`root0.r0cf(r0ca=22) at root0.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:16:15
\\ frame #2: inline_call`root0.main at root0.zig:33:16
\\ frame #2: inline_call`root0.main at root0.zig:35:16
,
\\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=21) at root0.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=21) at root0.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:17:16
\\ frame #2: inline_call`root0.main at root0.zig:33:16
\\ frame #2: inline_call`root0.main at root0.zig:35:16
,
\\ * frame #0: inline_call`root1.r1cf(r1ca=20) at root1.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:18:15
\\ frame #2: inline_call`root0.main at root0.zig:33:16
\\ frame #2: inline_call`root0.main at root0.zig:35:16
,
\\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=19) at root1.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=19) at root1.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:19:16
\\ frame #2: inline_call`root0.main at root0.zig:33:16
\\ frame #2: inline_call`root0.main at root0.zig:35:16
,
\\ * frame #0: inline_call`mod0.m0cf(m0ca=18) at mod0.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:20:14
\\ frame #2: inline_call`root0.main at root0.zig:33:16
\\ frame #2: inline_call`root0.main at root0.zig:35:16
,
\\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=17) at mod0.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=17) at mod0.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:21:15
\\ frame #2: inline_call`root0.main at root0.zig:33:16
\\ frame #2: inline_call`root0.main at root0.zig:35:16
,
\\ * frame #0: inline_call`mod1.m1cf(m1ca=16) at mod1.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:22:14
\\ frame #2: inline_call`root0.main at root0.zig:33:16
\\ frame #2: inline_call`root0.main at root0.zig:35:16
,
\\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=31) at mod1.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=31) at mod1.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:23:15
\\ frame #2: inline_call`root0.main at root0.zig:33:16
\\ frame #2: inline_call`root0.main at root0.zig:35:16
,
\\ * frame #0: inline_call`root0.r0cf(r0ca=35) at root0.zig:26:5
\\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:6:15
\\ frame #2: inline_call`root0.main at root0.zig:34:15
\\ frame #2: inline_call`root0.main at root0.zig:36:15
,
\\ * frame #0: inline_call`root1.r1pf [inlined] r0cfi(r0cai=32) at root0.zig:29:5
\\ * frame #0: inline_call`root1.r1pf [inlined] r0cfi(r0cai=32) at root0.zig:30:5
\\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:7:16
\\ frame #2: inline_call`root0.main at root0.zig:34:15
\\ frame #2: inline_call`root0.main at root0.zig:36:15
,
\\ * frame #0: inline_call`root1.r1cf(r1ca=33) at root1.zig:26:5
\\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:8:15
\\ frame #2: inline_call`root0.main at root0.zig:34:15
\\ frame #2: inline_call`root0.main at root0.zig:36:15
,
\\ * frame #0: inline_call`root1.r1pf [inlined] r1cfi(r1cai=38) at root1.zig:29:5
\\ * frame #0: inline_call`root1.r1pf [inlined] r1cfi(r1cai=38) at root1.zig:30:5
\\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:9:16
\\ frame #2: inline_call`root0.main at root0.zig:34:15
\\ frame #2: inline_call`root0.main at root0.zig:36:15
,
\\ * frame #0: inline_call`mod0.m0cf(m0ca=39) at mod0.zig:26:5
\\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:10:14
\\ frame #2: inline_call`root0.main at root0.zig:34:15
\\ frame #2: inline_call`root0.main at root0.zig:36:15
,
\\ * frame #0: inline_call`root1.r1pf [inlined] m0cfi(m0cai=36) at mod0.zig:29:5
\\ * frame #0: inline_call`root1.r1pf [inlined] m0cfi(m0cai=36) at mod0.zig:30:5
\\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:11:15
\\ frame #2: inline_call`root0.main at root0.zig:34:15
\\ frame #2: inline_call`root0.main at root0.zig:36:15
,
\\ * frame #0: inline_call`mod1.m1cf(m1ca=37) at mod1.zig:26:5
\\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:12:14
\\ frame #2: inline_call`root0.main at root0.zig:34:15
\\ frame #2: inline_call`root0.main at root0.zig:36:15
,
\\ * frame #0: inline_call`root1.r1pf [inlined] m1cfi(m1cai=42) at mod1.zig:29:5
\\ * frame #0: inline_call`root1.r1pf [inlined] m1cfi(m1cai=42) at mod1.zig:30:5
\\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:13:15
\\ frame #2: inline_call`root0.main at root0.zig:34:15
\\ frame #2: inline_call`root0.main at root0.zig:36:15
,
\\ * frame #0: inline_call`root0.r0cf(r0ca=44) at root0.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:16:15
\\ frame #2: inline_call`root0.main at root0.zig:35:16
\\ frame #2: inline_call`root0.main at root0.zig:37:16
,
\\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=47) at root0.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=47) at root0.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:17:16
\\ frame #2: inline_call`root0.main at root0.zig:35:16
\\ frame #2: inline_call`root0.main at root0.zig:37:16
,
\\ * frame #0: inline_call`root1.r1cf(r1ca=46) at root1.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:18:15
\\ frame #2: inline_call`root0.main at root0.zig:35:16
\\ frame #2: inline_call`root0.main at root0.zig:37:16
,
\\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=41) at root1.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=41) at root1.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:19:16
\\ frame #2: inline_call`root0.main at root0.zig:35:16
\\ frame #2: inline_call`root0.main at root0.zig:37:16
,
\\ * frame #0: inline_call`mod0.m0cf(m0ca=40) at mod0.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:20:14
\\ frame #2: inline_call`root0.main at root0.zig:35:16
\\ frame #2: inline_call`root0.main at root0.zig:37:16
,
\\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=43) at mod0.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=43) at mod0.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:21:15
\\ frame #2: inline_call`root0.main at root0.zig:35:16
\\ frame #2: inline_call`root0.main at root0.zig:37:16
,
\\ * frame #0: inline_call`mod1.m1cf(m1ca=42) at mod1.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:22:14
\\ frame #2: inline_call`root0.main at root0.zig:35:16
\\ frame #2: inline_call`root0.main at root0.zig:37:16
,
\\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=37) at mod1.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=37) at mod1.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:23:15
\\ frame #2: inline_call`root0.main at root0.zig:35:16
\\ frame #2: inline_call`root0.main at root0.zig:37:16
,
\\ * frame #0: inline_call`root0.r0cf(r0ca=57) at root0.zig:26:5
\\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:6:15
\\ frame #2: inline_call`root0.main at root0.zig:36:14
\\ frame #2: inline_call`root0.main at root0.zig:38:14
,
\\ * frame #0: inline_call`mod0.m0pf [inlined] r0cfi(r0cai=58) at root0.zig:29:5
\\ * frame #0: inline_call`mod0.m0pf [inlined] r0cfi(r0cai=58) at root0.zig:30:5
\\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:7:16
\\ frame #2: inline_call`root0.main at root0.zig:36:14
\\ frame #2: inline_call`root0.main at root0.zig:38:14
,
\\ * frame #0: inline_call`root1.r1cf(r1ca=59) at root1.zig:26:5
\\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:8:15
\\ frame #2: inline_call`root0.main at root0.zig:36:14
\\ frame #2: inline_call`root0.main at root0.zig:38:14
,
\\ * frame #0: inline_call`mod0.m0pf [inlined] r1cfi(r1cai=60) at root1.zig:29:5
\\ * frame #0: inline_call`mod0.m0pf [inlined] r1cfi(r1cai=60) at root1.zig:30:5
\\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:9:16
\\ frame #2: inline_call`root0.main at root0.zig:36:14
\\ frame #2: inline_call`root0.main at root0.zig:38:14
,
\\ * frame #0: inline_call`mod0.m0cf(m0ca=61) at mod0.zig:26:5
\\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:10:14
\\ frame #2: inline_call`root0.main at root0.zig:36:14
\\ frame #2: inline_call`root0.main at root0.zig:38:14
,
\\ * frame #0: inline_call`mod0.m0pf [inlined] m0cfi(m0cai=62) at mod0.zig:29:5
\\ * frame #0: inline_call`mod0.m0pf [inlined] m0cfi(m0cai=62) at mod0.zig:30:5
\\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:11:15
\\ frame #2: inline_call`root0.main at root0.zig:36:14
\\ frame #2: inline_call`root0.main at root0.zig:38:14
,
\\ * frame #0: inline_call`mod1.m1cf(m1ca=63) at mod1.zig:26:5
\\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:12:14
\\ frame #2: inline_call`root0.main at root0.zig:36:14
\\ frame #2: inline_call`root0.main at root0.zig:38:14
,
\\ * frame #0: inline_call`mod0.m0pf [inlined] m1cfi(m1cai=48) at mod1.zig:29:5
\\ * frame #0: inline_call`mod0.m0pf [inlined] m1cfi(m1cai=48) at mod1.zig:30:5
\\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:13:15
\\ frame #2: inline_call`root0.main at root0.zig:36:14
\\ frame #2: inline_call`root0.main at root0.zig:38:14
,
\\ * frame #0: inline_call`root0.r0cf(r0ca=66) at root0.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:16:15
\\ frame #2: inline_call`root0.main at root0.zig:37:15
\\ frame #2: inline_call`root0.main at root0.zig:39:15
,
\\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=65) at root0.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=65) at root0.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:17:16
\\ frame #2: inline_call`root0.main at root0.zig:37:15
\\ frame #2: inline_call`root0.main at root0.zig:39:15
,
\\ * frame #0: inline_call`root1.r1cf(r1ca=64) at root1.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:18:15
\\ frame #2: inline_call`root0.main at root0.zig:37:15
\\ frame #2: inline_call`root0.main at root0.zig:39:15
,
\\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=71) at root1.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=71) at root1.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:19:16
\\ frame #2: inline_call`root0.main at root0.zig:37:15
\\ frame #2: inline_call`root0.main at root0.zig:39:15
,
\\ * frame #0: inline_call`mod0.m0cf(m0ca=70) at mod0.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:20:14
\\ frame #2: inline_call`root0.main at root0.zig:37:15
\\ frame #2: inline_call`root0.main at root0.zig:39:15
,
\\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=69) at mod0.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=69) at mod0.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:21:15
\\ frame #2: inline_call`root0.main at root0.zig:37:15
\\ frame #2: inline_call`root0.main at root0.zig:39:15
,
\\ * frame #0: inline_call`mod1.m1cf(m1ca=68) at mod1.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:22:14
\\ frame #2: inline_call`root0.main at root0.zig:37:15
\\ frame #2: inline_call`root0.main at root0.zig:39:15
,
\\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=75) at mod1.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=75) at mod1.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:23:15
\\ frame #2: inline_call`root0.main at root0.zig:37:15
\\ frame #2: inline_call`root0.main at root0.zig:39:15
,
\\ * frame #0: inline_call`root0.r0cf(r0ca=79) at root0.zig:26:5
\\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:6:15
\\ frame #2: inline_call`root0.main at root0.zig:38:14
\\ frame #2: inline_call`root0.main at root0.zig:40:14
,
\\ * frame #0: inline_call`mod1.m1pf [inlined] r0cfi(r0cai=76) at root0.zig:29:5
\\ * frame #0: inline_call`mod1.m1pf [inlined] r0cfi(r0cai=76) at root0.zig:30:5
\\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:7:16
\\ frame #2: inline_call`root0.main at root0.zig:38:14
\\ frame #2: inline_call`root0.main at root0.zig:40:14
,
\\ * frame #0: inline_call`root1.r1cf(r1ca=77) at root1.zig:26:5
\\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:8:15
\\ frame #2: inline_call`root0.main at root0.zig:38:14
\\ frame #2: inline_call`root0.main at root0.zig:40:14
,
\\ * frame #0: inline_call`mod1.m1pf [inlined] r1cfi(r1cai=74) at root1.zig:29:5
\\ * frame #0: inline_call`mod1.m1pf [inlined] r1cfi(r1cai=74) at root1.zig:30:5
\\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:9:16
\\ frame #2: inline_call`root0.main at root0.zig:38:14
\\ frame #2: inline_call`root0.main at root0.zig:40:14
,
\\ * frame #0: inline_call`mod0.m0cf(m0ca=75) at mod0.zig:26:5
\\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:10:14
\\ frame #2: inline_call`root0.main at root0.zig:38:14
\\ frame #2: inline_call`root0.main at root0.zig:40:14
,
\\ * frame #0: inline_call`mod1.m1pf [inlined] m0cfi(m0cai=72) at mod0.zig:29:5
\\ * frame #0: inline_call`mod1.m1pf [inlined] m0cfi(m0cai=72) at mod0.zig:30:5
\\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:11:15
\\ frame #2: inline_call`root0.main at root0.zig:38:14
\\ frame #2: inline_call`root0.main at root0.zig:40:14
,
\\ * frame #0: inline_call`mod1.m1cf(m1ca=73) at mod1.zig:26:5
\\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:12:14
\\ frame #2: inline_call`root0.main at root0.zig:38:14
\\ frame #2: inline_call`root0.main at root0.zig:40:14
,
\\ * frame #0: inline_call`mod1.m1pf [inlined] m1cfi(m1cai=70) at mod1.zig:29:5
\\ * frame #0: inline_call`mod1.m1pf [inlined] m1cfi(m1cai=70) at mod1.zig:30:5
\\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:13:15
\\ frame #2: inline_call`root0.main at root0.zig:38:14
\\ frame #2: inline_call`root0.main at root0.zig:40:14
,
\\ * frame #0: inline_call`root0.r0cf(r0ca=88) at root0.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:16:15
\\ frame #2: inline_call`root0.main at root0.zig:39:15
\\ frame #2: inline_call`root0.main at root0.zig:41:15
,
\\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=91) at root0.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=91) at root0.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:17:16
\\ frame #2: inline_call`root0.main at root0.zig:39:15
\\ frame #2: inline_call`root0.main at root0.zig:41:15
,
\\ * frame #0: inline_call`root1.r1cf(r1ca=90) at root1.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:18:15
\\ frame #2: inline_call`root0.main at root0.zig:39:15
\\ frame #2: inline_call`root0.main at root0.zig:41:15
,
\\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=93) at root1.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=93) at root1.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:19:16
\\ frame #2: inline_call`root0.main at root0.zig:39:15
\\ frame #2: inline_call`root0.main at root0.zig:41:15
,
\\ * frame #0: inline_call`mod0.m0cf(m0ca=92) at mod0.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:20:14
\\ frame #2: inline_call`root0.main at root0.zig:39:15
\\ frame #2: inline_call`root0.main at root0.zig:41:15
,
\\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=95) at mod0.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=95) at mod0.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:21:15
\\ frame #2: inline_call`root0.main at root0.zig:39:15
\\ frame #2: inline_call`root0.main at root0.zig:41:15
,
\\ * frame #0: inline_call`mod1.m1cf(m1ca=94) at mod1.zig:26:5
\\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:22:14
\\ frame #2: inline_call`root0.main at root0.zig:39:15
\\ frame #2: inline_call`root0.main at root0.zig:41:15
,
\\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=81) at mod1.zig:29:5
\\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=81) at mod1.zig:30:5
\\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:23:15
\\ frame #2: inline_call`root0.main at root0.zig:39:15
\\ frame #2: inline_call`root0.main at root0.zig:41:15
},
);
db.addLldbTest(