Skip to content

Commit 5c44934

Browse files
alexrpandrewrk
authored andcommitted
Move the compiler's LLVM bitcode builder to std.zig.llvm.
1 parent dea72d1 commit 5c44934

File tree

10 files changed

+33
-21
lines changed

10 files changed

+33
-21
lines changed

CMakeLists.txt

+5-4
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,11 @@ set(ZIG_STAGE2_SOURCES
500500
lib/std/zig/system/NativePaths.zig
501501
lib/std/zig/system/x86.zig
502502
lib/std/zig/tokenizer.zig
503+
lib/std/zig/llvm.zig
504+
lib/std/zig/llvm/BitcodeReader.zig
505+
lib/std/zig/llvm/Builder.zig
506+
lib/std/zig/llvm/bitcode_writer.zig
507+
lib/std/zig/llvm/ir.zig
503508
src/Air.zig
504509
src/Builtin.zig
505510
src/Compilation.zig
@@ -567,11 +572,7 @@ set(ZIG_STAGE2_SOURCES
567572
src/codegen/c.zig
568573
src/codegen/c/Type.zig
569574
src/codegen/llvm.zig
570-
src/codegen/llvm/BitcodeReader.zig
571-
src/codegen/llvm/Builder.zig
572575
src/codegen/llvm/bindings.zig
573-
src/codegen/llvm/bitcode_writer.zig
574-
src/codegen/llvm/ir.zig
575576
src/codegen/spirv.zig
576577
src/codegen/spirv/Assembler.zig
577578
src/codegen/spirv/Module.zig

lib/std/zig.zig

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ pub const LibCInstallation = @import("zig/LibCInstallation.zig");
2424
pub const WindowsSdk = @import("zig/WindowsSdk.zig");
2525
pub const LibCDirs = @import("zig/LibCDirs.zig");
2626
pub const target = @import("zig/target.zig");
27+
pub const llvm = @import("zig/llvm.zig");
2728

2829
// Character literal parsing
2930
pub const ParsedCharLiteral = string_literal.ParsedCharLiteral;

lib/std/zig/llvm.zig

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
pub const BitcodeReader = @import("llvm/BitcodeReader.zig");
2+
pub const bitcode_writer = @import("llvm/bitcode_writer.zig");
3+
pub const Builder = @import("llvm/Builder.zig");

src/codegen/llvm/BitcodeReader.zig renamed to lib/std/zig/llvm/BitcodeReader.zig

+1-1
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,6 @@ const Abbrev = struct {
510510
};
511511

512512
const assert = std.debug.assert;
513-
const std = @import("std");
513+
const std = @import("../../std.zig");
514514

515515
const BitcodeReader = @This();

src/codegen/llvm/Builder.zig renamed to lib/std/zig/llvm/Builder.zig

+14-9
Original file line numberDiff line numberDiff line change
@@ -13168,7 +13168,12 @@ fn metadataConstantAssumeCapacity(self: *Builder, constant: Constant) Metadata {
1316813168
return @enumFromInt(gop.index);
1316913169
}
1317013170

13171-
pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]const u32 {
13171+
pub const Producer = struct {
13172+
name: []const u8,
13173+
version: std.SemanticVersion,
13174+
};
13175+
13176+
pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitcode_writer.Error![]const u32 {
1317213177
const BitcodeWriter = bitcode_writer.BitcodeWriter(&.{ Type, FunctionAttributes });
1317313178
var bitcode = BitcodeWriter.init(allocator, .{
1317413179
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
1318713192
const Identification = ir.Identification;
1318813193
var identification_block = try bitcode.enterTopBlock(Identification);
1318913194

13190-
const producer = try std.fmt.allocPrint(self.gpa, "zig {d}.{d}.{d}", .{
13191-
build_options.semver.major,
13192-
build_options.semver.minor,
13193-
build_options.semver.patch,
13195+
const producer_str = try std.fmt.allocPrint(self.gpa, "{s} {d}.{d}.{d}", .{
13196+
producer.name,
13197+
producer.version.major,
13198+
producer.version.minor,
13199+
producer.version.patch,
1319413200
});
13195-
defer self.gpa.free(producer);
13201+
defer self.gpa.free(producer_str);
1319613202

13197-
try identification_block.writeAbbrev(Identification.Version{ .string = producer });
13203+
try identification_block.writeAbbrev(Identification.Version{ .string = producer_str });
1319813204
try identification_block.writeAbbrev(Identification.Epoch{ .epoch = 0 });
1319913205

1320013206
try identification_block.end();
@@ -15216,10 +15222,9 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
1521615222
const Allocator = std.mem.Allocator;
1521715223
const assert = std.debug.assert;
1521815224
const bitcode_writer = @import("bitcode_writer.zig");
15219-
const build_options = @import("build_options");
1522015225
const Builder = @This();
1522115226
const builtin = @import("builtin");
1522215227
const DW = std.dwarf;
1522315228
const ir = @import("ir.zig");
1522415229
const log = std.log.scoped(.llvm);
15225-
const std = @import("std");
15230+
const std = @import("../../std.zig");

src/codegen/llvm/bitcode_writer.zig renamed to lib/std/zig/llvm/bitcode_writer.zig

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const std = @import("std");
1+
const std = @import("../../std.zig");
22

33
pub const AbbrevOp = union(enum) {
44
literal: u32, // 0

src/codegen/llvm/ir.zig renamed to lib/std/zig/llvm/ir.zig

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const std = @import("std");
1+
const std = @import("../../std.zig");
22
const Builder = @import("Builder.zig");
33
const bitcode_writer = @import("bitcode_writer.zig");
44

src/Compilation.zig

+1-2
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,6 @@ pub const CObject = struct {
551551
}
552552

553553
pub fn parse(gpa: Allocator, path: []const u8) !*Bundle {
554-
const BitcodeReader = @import("codegen/llvm/BitcodeReader.zig");
555554
const BlockId = enum(u32) {
556555
Meta = 8,
557556
Diag,
@@ -588,7 +587,7 @@ pub const CObject = struct {
588587
defer file.close();
589588
var br = std.io.bufferedReader(file.reader());
590589
const reader = br.reader();
591-
var bc = BitcodeReader.init(gpa, .{ .reader = reader.any() });
590+
var bc = std.zig.llvm.BitcodeReader.init(gpa, .{ .reader = reader.any() });
592591
defer bc.deinit();
593592

594593
var file_names: std.AutoArrayHashMapUnmanaged(u32, []const u8) = .empty;

src/InternPool.zig

+1-1
Original file line numberDiff line numberDiff line change
@@ -6261,7 +6261,7 @@ pub const Alignment = enum(u6) {
62616261
return n + 1;
62626262
}
62636263

6264-
const LlvmBuilderAlignment = @import("codegen/llvm/Builder.zig").Alignment;
6264+
const LlvmBuilderAlignment = std.zig.llvm.Builder.Alignment;
62656265

62666266
pub fn toLlvm(this: @This()) LlvmBuilderAlignment {
62676267
return @enumFromInt(@intFromEnum(this));

src/codegen/llvm.zig

+5-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const log = std.log.scoped(.codegen);
66
const math = std.math;
77
const DW = std.dwarf;
88

9-
const Builder = @import("llvm/Builder.zig");
9+
const Builder = std.zig.llvm.Builder;
1010
const llvm = if (build_options.have_llvm)
1111
@import("llvm/bindings.zig")
1212
else
@@ -1216,7 +1216,10 @@ pub const Object = struct {
12161216
}
12171217
}
12181218

1219-
const bitcode = try o.builder.toBitcode(o.gpa);
1219+
const bitcode = try o.builder.toBitcode(o.gpa, .{
1220+
.name = "zig",
1221+
.version = build_options.semver,
1222+
});
12201223
defer o.gpa.free(bitcode);
12211224
o.builder.clearAndFree();
12221225

0 commit comments

Comments
 (0)