Commit 48bd0ed7f3
Changed files (3)
src
codegen
src/codegen/llvm/bindings.zig
@@ -394,41 +394,3 @@ extern fn ZigLLVMWriteImportLibrary(
output_lib_path: [*:0]const u8,
kill_at: bool,
) bool;
-
-pub const DIFlags = opaque {
- pub const Zero = 0;
- pub const Private = 1;
- pub const Protected = 2;
- pub const Public = 3;
-
- pub const FwdDecl = 1 << 2;
- pub const AppleBlock = 1 << 3;
- pub const BlockByrefStruct = 1 << 4;
- pub const Virtual = 1 << 5;
- pub const Artificial = 1 << 6;
- pub const Explicit = 1 << 7;
- pub const Prototyped = 1 << 8;
- pub const ObjcClassComplete = 1 << 9;
- pub const ObjectPointer = 1 << 10;
- pub const Vector = 1 << 11;
- pub const StaticMember = 1 << 12;
- pub const LValueReference = 1 << 13;
- pub const RValueReference = 1 << 14;
- pub const Reserved = 1 << 15;
-
- pub const SingleInheritance = 1 << 16;
- pub const MultipleInheritance = 2 << 16;
- pub const VirtualInheritance = 3 << 16;
-
- pub const IntroducedVirtual = 1 << 18;
- pub const BitField = 1 << 19;
- pub const NoReturn = 1 << 20;
- pub const TypePassByValue = 1 << 22;
- pub const TypePassByReference = 1 << 23;
- pub const EnumClass = 1 << 24;
- pub const Thunk = 1 << 25;
- pub const NonTrivial = 1 << 26;
- pub const BigEndian = 1 << 27;
- pub const LittleEndian = 1 << 28;
- pub const AllCallsDescribed = 1 << 29;
-};
src/codegen/llvm/Builder.zig
@@ -4264,7 +4264,7 @@ pub const Function = struct {
=> wip.builder.structTypeAssumeCapacity(.normal, &.{
wip.extraData(CmpXchg, instruction.data).cmp.typeOfWip(wip),
.i1,
- }) catch unreachable,
+ }),
.extractelement => wip.extraData(ExtractElement, instruction.data)
.val.typeOfWip(wip).childType(wip.builder),
.extractvalue => {
@@ -4451,7 +4451,7 @@ pub const Function = struct {
function.extraData(CmpXchg, instruction.data)
.cmp.typeOf(function_index, builder),
.i1,
- }) catch unreachable,
+ }),
.extractelement => function.extraData(ExtractElement, instruction.data)
.val.typeOf(function_index, builder).childType(builder),
.extractvalue => {
@@ -4840,6 +4840,44 @@ pub const DebugLocation = struct {
inlined_at: Metadata,
};
+pub const DIFlags = opaque {
+ pub const Zero = 0;
+ pub const Private = 1;
+ pub const Protected = 2;
+ pub const Public = 3;
+
+ pub const FwdDecl = 1 << 2;
+ pub const AppleBlock = 1 << 3;
+ pub const BlockByrefStruct = 1 << 4;
+ pub const Virtual = 1 << 5;
+ pub const Artificial = 1 << 6;
+ pub const Explicit = 1 << 7;
+ pub const Prototyped = 1 << 8;
+ pub const ObjcClassComplete = 1 << 9;
+ pub const ObjectPointer = 1 << 10;
+ pub const Vector = 1 << 11;
+ pub const StaticMember = 1 << 12;
+ pub const LValueReference = 1 << 13;
+ pub const RValueReference = 1 << 14;
+ pub const Reserved = 1 << 15;
+
+ pub const SingleInheritance = 1 << 16;
+ pub const MultipleInheritance = 2 << 16;
+ pub const VirtualInheritance = 3 << 16;
+
+ pub const IntroducedVirtual = 1 << 18;
+ pub const BitField = 1 << 19;
+ pub const NoReturn = 1 << 20;
+ pub const TypePassByValue = 1 << 22;
+ pub const TypePassByReference = 1 << 23;
+ pub const EnumClass = 1 << 24;
+ pub const Thunk = 1 << 25;
+ pub const NonTrivial = 1 << 26;
+ pub const BigEndian = 1 << 27;
+ pub const LittleEndian = 1 << 28;
+ pub const AllCallsDescribed = 1 << 29;
+};
+
pub const WipFunction = struct {
builder: *Builder,
function: Function.Index,
@@ -5610,7 +5648,7 @@ pub const WipFunction = struct {
vals: []const Value,
blocks: []const Block.Index,
wip: *WipFunction,
- ) (if (build_options.have_llvm) Allocator.Error else error{})!void {
+ ) void {
const incoming_len = self.block.ptrConst(wip).incoming;
assert(vals.len == incoming_len and blocks.len == incoming_len);
const instruction = wip.instructions.get(@intFromEnum(self.instruction));
@@ -8007,7 +8045,7 @@ pub fn namedTypeSetBody(
self: *Builder,
named_type: Type,
body_type: Type,
-) (if (build_options.have_llvm) Allocator.Error else error{})!void {
+) void {
const named_item = self.type_items.items[@intFromEnum(named_type)];
self.type_extra.items[named_item.data + std.meta.fieldIndex(Type.NamedStructure, "body").?] =
@intFromEnum(body_type);
@@ -9372,7 +9410,7 @@ fn fnTypeAssumeCapacity(
ret: Type,
params: []const Type,
comptime kind: Type.Function.Kind,
-) (if (build_options.have_llvm) Allocator.Error else error{})!Type {
+) Type {
const tag: Type.Tag = switch (kind) {
.normal => .function,
.vararg => .vararg_function,
@@ -9528,7 +9566,7 @@ fn structTypeAssumeCapacity(
self: *Builder,
comptime kind: Type.Structure.Kind,
fields: []const Type,
-) (if (build_options.have_llvm) Allocator.Error else error{})!Type {
+) Type {
const tag: Type.Tag = switch (kind) {
.normal => .structure,
.@"packed" => .packed_structure,
@@ -9739,10 +9777,7 @@ fn bigIntConstAssumeCapacity(
assert(type_item.tag == .integer);
const bits = type_item.data;
- const ExpectedContents = extern struct {
- limbs: [64 / @sizeOf(std.math.big.Limb)]std.math.big.Limb,
- llvm_limbs: if (build_options.have_llvm) [64 / @sizeOf(u64)]u64 else void,
- };
+ const ExpectedContents = [64 / @sizeOf(std.math.big.Limb)]std.math.big.Limb;
var stack align(@alignOf(ExpectedContents)) =
std.heap.stackFallback(@sizeOf(ExpectedContents), self.gpa);
const allocator = stack.get();
@@ -9973,11 +10008,7 @@ fn noneConstAssumeCapacity(self: *Builder, ty: Type) Constant {
return result.constant;
}
-fn structConstAssumeCapacity(
- self: *Builder,
- ty: Type,
- vals: []const Constant,
-) (if (build_options.have_llvm) Allocator.Error else error{})!Constant {
+fn structConstAssumeCapacity(self: *Builder, ty: Type, vals: []const Constant) Constant {
const type_item = self.type_items.items[@intFromEnum(ty)];
var extra = self.typeExtraDataTrail(Type.Structure, switch (type_item.tag) {
.structure, .packed_structure => type_item.data,
@@ -10007,11 +10038,7 @@ fn structConstAssumeCapacity(
return result.constant;
}
-fn arrayConstAssumeCapacity(
- self: *Builder,
- ty: Type,
- vals: []const Constant,
-) (if (build_options.have_llvm) Allocator.Error else error{})!Constant {
+fn arrayConstAssumeCapacity(self: *Builder, ty: Type, vals: []const Constant) Constant {
const type_item = self.type_items.items[@intFromEnum(ty)];
const type_extra: struct { len: u64, child: Type } = switch (type_item.tag) {
inline .small_array, .array => |kind| extra: {
@@ -10055,11 +10082,7 @@ fn stringNullConstAssumeCapacity(self: *Builder, val: String) Constant {
return result.constant;
}
-fn vectorConstAssumeCapacity(
- self: *Builder,
- ty: Type,
- vals: []const Constant,
-) (if (build_options.have_llvm) Allocator.Error else error{})!Constant {
+fn vectorConstAssumeCapacity(self: *Builder, ty: Type, vals: []const Constant) Constant {
assert(ty.isVector(self));
assert(ty.vectorLen(self) == vals.len);
for (vals) |val| assert(ty.childType(self) == val.typeOf(self));
@@ -10075,11 +10098,7 @@ fn vectorConstAssumeCapacity(
return result.constant;
}
-fn splatConstAssumeCapacity(
- self: *Builder,
- ty: Type,
- val: Constant,
-) (if (build_options.have_llvm) Allocator.Error else error{})!Constant {
+fn splatConstAssumeCapacity(self: *Builder, ty: Type, val: Constant) Constant {
assert(ty.scalarType(self) == val.typeOf(self));
if (!ty.isVector(self)) return val;
@@ -10327,7 +10346,7 @@ fn gepConstAssumeCapacity(
base: Constant,
inrange: ?u16,
indices: []const Constant,
-) (if (build_options.have_llvm) Allocator.Error else error{})!Constant {
+) Constant {
const tag: Constant.Tag = switch (kind) {
.normal => .getelementptr,
.inbounds => .@"getelementptr inbounds",
src/codegen/llvm.zig
@@ -1212,7 +1212,7 @@ pub const Object = struct {
try file.writeAll(ptr[0..(bitcode.len * 4)]);
}
- if (!self.module.comp.config.use_lib_llvm) {
+ if (!build_options.have_llvm or !self.module.comp.config.use_lib_llvm) {
log.err("emitting without libllvm not implemented", .{});
return error.FailedToEmit;
}
@@ -1647,7 +1647,7 @@ pub const Object = struct {
const is_internal_linkage = decl.val.getExternFunc(zcu) == null and
!zcu.decl_exports.contains(decl_index);
const noret_bit: u29 = if (fn_info.return_type == .noreturn_type)
- llvm.DIFlags.NoReturn
+ Builder.DIFlags.NoReturn
else
0;
const debug_decl_type = try o.lowerDebugType(decl.ty);
@@ -1663,7 +1663,7 @@ pub const Object = struct {
.optimized = owner_mod.optimize_mode != .Debug,
.definition = true,
.local = is_internal_linkage,
- .debug_info_flags = llvm.DIFlags.StaticMember | noret_bit,
+ .debug_info_flags = Builder.DIFlags.StaticMember | noret_bit,
},
o.debug_compile_unit,
);
@@ -3372,7 +3372,7 @@ pub const Object = struct {
const ty = try o.builder.opaqueType(name);
try o.type_map.put(o.gpa, t.toIntern(), ty);
- try o.builder.namedTypeSetBody(
+ o.builder.namedTypeSetBody(
ty,
try o.builder.structType(struct_kind, llvm_field_types.items),
);
@@ -3483,7 +3483,7 @@ pub const Object = struct {
const ty = try o.builder.opaqueType(name);
try o.type_map.put(o.gpa, t.toIntern(), ty);
- try o.builder.namedTypeSetBody(
+ o.builder.namedTypeSetBody(
ty,
try o.builder.structType(.normal, &.{payload_ty}),
);
@@ -3511,7 +3511,7 @@ pub const Object = struct {
const ty = try o.builder.opaqueType(name);
try o.type_map.put(o.gpa, t.toIntern(), ty);
- try o.builder.namedTypeSetBody(
+ o.builder.namedTypeSetBody(
ty,
try o.builder.structType(.normal, llvm_fields[0..llvm_fields_len]),
);
@@ -4773,7 +4773,6 @@ pub const FuncGen = struct {
sync_scope: Builder.SyncScope,
- const DbgState = if (build_options.have_llvm) struct { loc: *llvm.DILocation, scope: *llvm.DIScope, base_line: u32 } else struct {};
const BreakList = union {
list: std.MultiArrayList(struct {
bb: Builder.Function.Block.Index,
@@ -5760,7 +5759,7 @@ pub const FuncGen = struct {
};
const phi = try self.wip.phi(.i1, "");
- try phi.finish(
+ phi.finish(
&incoming_values,
&.{ both_null_block, mixed_block, both_pl_block_end },
&self.wip,
@@ -5827,7 +5826,7 @@ pub const FuncGen = struct {
parent_bb.ptr(&self.wip).incoming = @intCast(breaks.list.len);
const phi = try self.wip.phi(llvm_ty, "");
- try phi.finish(breaks.list.items(.val), breaks.list.items(.bb), &self.wip);
+ phi.finish(breaks.list.items(.val), breaks.list.items(.bb), &self.wip);
return phi.toValue();
} else {
parent_bb.ptr(&self.wip).incoming = @intCast(breaks.len);
@@ -6615,7 +6614,7 @@ pub const FuncGen = struct {
.optimized = owner_mod.optimize_mode != .Debug,
.local = is_internal_linkage,
.definition = true,
- .debug_info_flags = llvm.DIFlags.StaticMember,
+ .debug_info_flags = Builder.DIFlags.StaticMember,
},
o.debug_compile_unit,
);
@@ -9350,7 +9349,7 @@ pub const FuncGen = struct {
_ = try self.wip.br(loop_block);
self.wip.cursor = .{ .block = end_block };
- try it_ptr.finish(&.{ next_ptr, dest_ptr }, &.{ body_block, entry_block }, &self.wip);
+ it_ptr.finish(&.{ next_ptr, dest_ptr }, &.{ body_block, entry_block }, &self.wip);
return .none;
}
@@ -9585,7 +9584,7 @@ pub const FuncGen = struct {
self.wip.cursor = .{ .block = end_block };
const phi = try self.wip.phi(.i1, "");
- try phi.finish(&.{ .true, .false }, &.{ valid_block, invalid_block }, &self.wip);
+ phi.finish(&.{ .true, .false }, &.{ valid_block, invalid_block }, &self.wip);
return phi.toValue();
}