mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
Move the compiler's LLVM bitcode builder to std.zig.llvm.
This commit is contained in:
parent
dea72d15da
commit
5c44934e20
@ -500,6 +500,11 @@ set(ZIG_STAGE2_SOURCES
|
|||||||
lib/std/zig/system/NativePaths.zig
|
lib/std/zig/system/NativePaths.zig
|
||||||
lib/std/zig/system/x86.zig
|
lib/std/zig/system/x86.zig
|
||||||
lib/std/zig/tokenizer.zig
|
lib/std/zig/tokenizer.zig
|
||||||
|
lib/std/zig/llvm.zig
|
||||||
|
lib/std/zig/llvm/BitcodeReader.zig
|
||||||
|
lib/std/zig/llvm/Builder.zig
|
||||||
|
lib/std/zig/llvm/bitcode_writer.zig
|
||||||
|
lib/std/zig/llvm/ir.zig
|
||||||
src/Air.zig
|
src/Air.zig
|
||||||
src/Builtin.zig
|
src/Builtin.zig
|
||||||
src/Compilation.zig
|
src/Compilation.zig
|
||||||
@ -567,11 +572,7 @@ set(ZIG_STAGE2_SOURCES
|
|||||||
src/codegen/c.zig
|
src/codegen/c.zig
|
||||||
src/codegen/c/Type.zig
|
src/codegen/c/Type.zig
|
||||||
src/codegen/llvm.zig
|
src/codegen/llvm.zig
|
||||||
src/codegen/llvm/BitcodeReader.zig
|
|
||||||
src/codegen/llvm/Builder.zig
|
|
||||||
src/codegen/llvm/bindings.zig
|
src/codegen/llvm/bindings.zig
|
||||||
src/codegen/llvm/bitcode_writer.zig
|
|
||||||
src/codegen/llvm/ir.zig
|
|
||||||
src/codegen/spirv.zig
|
src/codegen/spirv.zig
|
||||||
src/codegen/spirv/Assembler.zig
|
src/codegen/spirv/Assembler.zig
|
||||||
src/codegen/spirv/Module.zig
|
src/codegen/spirv/Module.zig
|
||||||
|
|||||||
@ -24,6 +24,7 @@ pub const LibCInstallation = @import("zig/LibCInstallation.zig");
|
|||||||
pub const WindowsSdk = @import("zig/WindowsSdk.zig");
|
pub const WindowsSdk = @import("zig/WindowsSdk.zig");
|
||||||
pub const LibCDirs = @import("zig/LibCDirs.zig");
|
pub const LibCDirs = @import("zig/LibCDirs.zig");
|
||||||
pub const target = @import("zig/target.zig");
|
pub const target = @import("zig/target.zig");
|
||||||
|
pub const llvm = @import("zig/llvm.zig");
|
||||||
|
|
||||||
// Character literal parsing
|
// Character literal parsing
|
||||||
pub const ParsedCharLiteral = string_literal.ParsedCharLiteral;
|
pub const ParsedCharLiteral = string_literal.ParsedCharLiteral;
|
||||||
|
|||||||
3
lib/std/zig/llvm.zig
Normal file
3
lib/std/zig/llvm.zig
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
pub const BitcodeReader = @import("llvm/BitcodeReader.zig");
|
||||||
|
pub const bitcode_writer = @import("llvm/bitcode_writer.zig");
|
||||||
|
pub const Builder = @import("llvm/Builder.zig");
|
||||||
@ -510,6 +510,6 @@ const Abbrev = struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
const std = @import("std");
|
const std = @import("../../std.zig");
|
||||||
|
|
||||||
const BitcodeReader = @This();
|
const BitcodeReader = @This();
|
||||||
@ -13168,7 +13168,12 @@ fn metadataConstantAssumeCapacity(self: *Builder, constant: Constant) Metadata {
|
|||||||
return @enumFromInt(gop.index);
|
return @enumFromInt(gop.index);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]const u32 {
|
pub const Producer = struct {
|
||||||
|
name: []const u8,
|
||||||
|
version: std.SemanticVersion,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitcode_writer.Error![]const u32 {
|
||||||
const BitcodeWriter = bitcode_writer.BitcodeWriter(&.{ Type, FunctionAttributes });
|
const BitcodeWriter = bitcode_writer.BitcodeWriter(&.{ Type, FunctionAttributes });
|
||||||
var bitcode = BitcodeWriter.init(allocator, .{
|
var bitcode = BitcodeWriter.init(allocator, .{
|
||||||
std.math.log2_int_ceil(usize, self.type_items.items.len),
|
std.math.log2_int_ceil(usize, self.type_items.items.len),
|
||||||
@ -13187,14 +13192,15 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
|
|||||||
const Identification = ir.Identification;
|
const Identification = ir.Identification;
|
||||||
var identification_block = try bitcode.enterTopBlock(Identification);
|
var identification_block = try bitcode.enterTopBlock(Identification);
|
||||||
|
|
||||||
const producer = try std.fmt.allocPrint(self.gpa, "zig {d}.{d}.{d}", .{
|
const producer_str = try std.fmt.allocPrint(self.gpa, "{s} {d}.{d}.{d}", .{
|
||||||
build_options.semver.major,
|
producer.name,
|
||||||
build_options.semver.minor,
|
producer.version.major,
|
||||||
build_options.semver.patch,
|
producer.version.minor,
|
||||||
|
producer.version.patch,
|
||||||
});
|
});
|
||||||
defer self.gpa.free(producer);
|
defer self.gpa.free(producer_str);
|
||||||
|
|
||||||
try identification_block.writeAbbrev(Identification.Version{ .string = producer });
|
try identification_block.writeAbbrev(Identification.Version{ .string = producer_str });
|
||||||
try identification_block.writeAbbrev(Identification.Epoch{ .epoch = 0 });
|
try identification_block.writeAbbrev(Identification.Epoch{ .epoch = 0 });
|
||||||
|
|
||||||
try identification_block.end();
|
try identification_block.end();
|
||||||
@ -15216,10 +15222,9 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
|
|||||||
const Allocator = std.mem.Allocator;
|
const Allocator = std.mem.Allocator;
|
||||||
const assert = std.debug.assert;
|
const assert = std.debug.assert;
|
||||||
const bitcode_writer = @import("bitcode_writer.zig");
|
const bitcode_writer = @import("bitcode_writer.zig");
|
||||||
const build_options = @import("build_options");
|
|
||||||
const Builder = @This();
|
const Builder = @This();
|
||||||
const builtin = @import("builtin");
|
const builtin = @import("builtin");
|
||||||
const DW = std.dwarf;
|
const DW = std.dwarf;
|
||||||
const ir = @import("ir.zig");
|
const ir = @import("ir.zig");
|
||||||
const log = std.log.scoped(.llvm);
|
const log = std.log.scoped(.llvm);
|
||||||
const std = @import("std");
|
const std = @import("../../std.zig");
|
||||||
@ -1,4 +1,4 @@
|
|||||||
const std = @import("std");
|
const std = @import("../../std.zig");
|
||||||
|
|
||||||
pub const AbbrevOp = union(enum) {
|
pub const AbbrevOp = union(enum) {
|
||||||
literal: u32, // 0
|
literal: u32, // 0
|
||||||
@ -1,4 +1,4 @@
|
|||||||
const std = @import("std");
|
const std = @import("../../std.zig");
|
||||||
const Builder = @import("Builder.zig");
|
const Builder = @import("Builder.zig");
|
||||||
const bitcode_writer = @import("bitcode_writer.zig");
|
const bitcode_writer = @import("bitcode_writer.zig");
|
||||||
|
|
||||||
@ -551,7 +551,6 @@ pub const CObject = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn parse(gpa: Allocator, path: []const u8) !*Bundle {
|
pub fn parse(gpa: Allocator, path: []const u8) !*Bundle {
|
||||||
const BitcodeReader = @import("codegen/llvm/BitcodeReader.zig");
|
|
||||||
const BlockId = enum(u32) {
|
const BlockId = enum(u32) {
|
||||||
Meta = 8,
|
Meta = 8,
|
||||||
Diag,
|
Diag,
|
||||||
@ -588,7 +587,7 @@ pub const CObject = struct {
|
|||||||
defer file.close();
|
defer file.close();
|
||||||
var br = std.io.bufferedReader(file.reader());
|
var br = std.io.bufferedReader(file.reader());
|
||||||
const reader = br.reader();
|
const reader = br.reader();
|
||||||
var bc = BitcodeReader.init(gpa, .{ .reader = reader.any() });
|
var bc = std.zig.llvm.BitcodeReader.init(gpa, .{ .reader = reader.any() });
|
||||||
defer bc.deinit();
|
defer bc.deinit();
|
||||||
|
|
||||||
var file_names: std.AutoArrayHashMapUnmanaged(u32, []const u8) = .empty;
|
var file_names: std.AutoArrayHashMapUnmanaged(u32, []const u8) = .empty;
|
||||||
|
|||||||
@ -6261,7 +6261,7 @@ pub const Alignment = enum(u6) {
|
|||||||
return n + 1;
|
return n + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const LlvmBuilderAlignment = @import("codegen/llvm/Builder.zig").Alignment;
|
const LlvmBuilderAlignment = std.zig.llvm.Builder.Alignment;
|
||||||
|
|
||||||
pub fn toLlvm(this: @This()) LlvmBuilderAlignment {
|
pub fn toLlvm(this: @This()) LlvmBuilderAlignment {
|
||||||
return @enumFromInt(@intFromEnum(this));
|
return @enumFromInt(@intFromEnum(this));
|
||||||
|
|||||||
@ -6,7 +6,7 @@ const log = std.log.scoped(.codegen);
|
|||||||
const math = std.math;
|
const math = std.math;
|
||||||
const DW = std.dwarf;
|
const DW = std.dwarf;
|
||||||
|
|
||||||
const Builder = @import("llvm/Builder.zig");
|
const Builder = std.zig.llvm.Builder;
|
||||||
const llvm = if (build_options.have_llvm)
|
const llvm = if (build_options.have_llvm)
|
||||||
@import("llvm/bindings.zig")
|
@import("llvm/bindings.zig")
|
||||||
else
|
else
|
||||||
@ -1216,7 +1216,10 @@ pub const Object = struct {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const bitcode = try o.builder.toBitcode(o.gpa);
|
const bitcode = try o.builder.toBitcode(o.gpa, .{
|
||||||
|
.name = "zig",
|
||||||
|
.version = build_options.semver,
|
||||||
|
});
|
||||||
defer o.gpa.free(bitcode);
|
defer o.gpa.free(bitcode);
|
||||||
o.builder.clearAndFree();
|
o.builder.clearAndFree();
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user