mirror of
https://github.com/ziglang/zig.git
synced 2026-01-10 17:35:12 +00:00
LLVM Builder: Emit metadata kinds and function metadata attachments
This commit is contained in:
parent
92eec8dfec
commit
de536e8473
@ -13739,6 +13739,25 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
|
||||
try constants_block.end();
|
||||
}
|
||||
|
||||
const MetadataKind = enum(u8) {
|
||||
dbg = 0,
|
||||
};
|
||||
|
||||
// METADATA_KIND_BLOCK
|
||||
if (!self.strip) {
|
||||
const MetadataKindBlock = ir.MetadataKindBlock;
|
||||
var metadata_kind_block = try module_block.enterSubBlock(MetadataKindBlock);
|
||||
|
||||
inline for (@typeInfo(MetadataKind).Enum.fields) |field| {
|
||||
try metadata_kind_block.writeAbbrev(MetadataKindBlock.Kind{
|
||||
.id = field.value,
|
||||
.name = field.name,
|
||||
});
|
||||
}
|
||||
|
||||
try metadata_kind_block.end();
|
||||
}
|
||||
|
||||
const MetadataAdapter = struct {
|
||||
builder: *const Builder,
|
||||
constant_adapter: ConstantAdapter,
|
||||
@ -14766,6 +14785,23 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
|
||||
try value_symtab_block.end();
|
||||
}
|
||||
|
||||
// METADATA_ATTACHMENT_BLOCK
|
||||
if (!self.strip) blk: {
|
||||
const dbg = func.global.ptrConst(self).dbg;
|
||||
|
||||
if (dbg == .none) break :blk;
|
||||
|
||||
const MetadataAttachmentBlock = ir.MetadataAttachmentBlock;
|
||||
var metadata_attach_block = try function_block.enterSubBlock(MetadataAttachmentBlock);
|
||||
|
||||
try metadata_attach_block.writeAbbrev(MetadataAttachmentBlock.AttachmentSingle{
|
||||
.id = @intFromEnum(MetadataKind.dbg),
|
||||
.metadata = @enumFromInt(metadata_adapter.getMetadataIndex(dbg) - 1),
|
||||
});
|
||||
|
||||
try metadata_attach_block.end();
|
||||
}
|
||||
|
||||
try function_block.end();
|
||||
}
|
||||
}
|
||||
|
||||
@ -580,6 +580,42 @@ pub const Constants = struct {
|
||||
};
|
||||
};
|
||||
|
||||
pub const MetadataKindBlock = struct {
|
||||
pub const id = 22;
|
||||
|
||||
pub const abbrevs = [_]type{
|
||||
Kind,
|
||||
};
|
||||
|
||||
pub const Kind = struct {
|
||||
pub const ops = [_]AbbrevOp{
|
||||
.{ .literal = 6 },
|
||||
.{ .vbr = 4 },
|
||||
.{ .array_fixed = 8 },
|
||||
};
|
||||
id: u32,
|
||||
name: []const u8,
|
||||
};
|
||||
};
|
||||
|
||||
pub const MetadataAttachmentBlock = struct {
|
||||
pub const id = 16;
|
||||
|
||||
pub const abbrevs = [_]type{
|
||||
AttachmentSingle,
|
||||
};
|
||||
|
||||
pub const AttachmentSingle = struct {
|
||||
pub const ops = [_]AbbrevOp{
|
||||
.{ .literal = 11 },
|
||||
.{ .vbr = 4 },
|
||||
MetadataAbbrev,
|
||||
};
|
||||
id: u32,
|
||||
metadata: Builder.Metadata,
|
||||
};
|
||||
};
|
||||
|
||||
pub const MetadataBlock = struct {
|
||||
pub const id = 15;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user