diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-01-13 10:42:38 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-01-13 10:42:38 -0700 |
| commit | c5ee73f65b4c77fe08aa44b8611bf084ae700f24 (patch) | |
| tree | aca72ec5f4fe45695bf7eea6bb288ee2f3ef27e9 | |
| parent | 9bf2bda68356212168a213141e0a21d9dab22655 (diff) | |
| download | zig-c5ee73f65b4c77fe08aa44b8611bf084ae700f24.tar.gz zig-c5ee73f65b4c77fe08aa44b8611bf084ae700f24.zip | |
stage2: fix build on 32-bit ISAs
Fixes regression introduced in 93b854eb745ab3294054ae71150fe60f134f4d10.
| -rw-r--r-- | src/Liveness.zig | 2 | ||||
| -rw-r--r-- | src/Sema.zig | 4 | ||||
| -rw-r--r-- | src/arch/aarch64/CodeGen.zig | 2 | ||||
| -rw-r--r-- | src/arch/arm/CodeGen.zig | 2 | ||||
| -rw-r--r-- | src/arch/riscv64/CodeGen.zig | 2 | ||||
| -rw-r--r-- | src/arch/wasm/CodeGen.zig | 2 | ||||
| -rw-r--r-- | src/arch/x86_64/CodeGen.zig | 2 | ||||
| -rw-r--r-- | src/codegen/c.zig | 2 | ||||
| -rw-r--r-- | src/codegen/llvm.zig | 6 | ||||
| -rw-r--r-- | src/print_air.zig | 2 | ||||
| -rw-r--r-- | src/type.zig | 7 |
11 files changed, 20 insertions, 13 deletions
diff --git a/src/Liveness.zig b/src/Liveness.zig index f7d4353e39..92ec51e574 100644 --- a/src/Liveness.zig +++ b/src/Liveness.zig @@ -368,7 +368,7 @@ fn analyzeInst( .vector_init => { const ty_pl = inst_datas[inst].ty_pl; const vector_ty = a.air.getRefType(ty_pl.ty); - const len = @intCast(u32, vector_ty.arrayLen()); + const len = vector_ty.vectorLen(); const elements = @bitCast([]const Air.Inst.Ref, a.air.extra[ty_pl.payload..][0..len]); if (elements.len <= bpi - 1) { diff --git a/src/Sema.zig b/src/Sema.zig index e52eb6e79c..165f629aab 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -11010,7 +11010,7 @@ fn zirClzCtz( const result_scalar_ty = try Type.smallestUnsignedInt(sema.arena, bits); switch (operand_ty.zigTypeTag()) { .Vector => { - const vec_len = operand_ty.arrayLen(); + const vec_len = operand_ty.vectorLen(); const result_ty = try Type.vector(sema.arena, vec_len, result_scalar_ty); if (try sema.resolveMaybeUndefVal(block, operand_src, operand)) |val| { if (val.isUndef()) return sema.addConstUndef(result_ty); @@ -14578,7 +14578,7 @@ fn coerceVectors( ) !Air.Inst.Ref { const inst_ty = sema.typeOf(inst); const inst_len = inst_ty.arrayLen(); - const dest_len = dest_ty.arrayLen(); + const dest_len = try sema.usizeCast(block, dest_ty_src, dest_ty.arrayLen()); if (dest_len != inst_len) { const msg = msg: { diff --git a/src/arch/aarch64/CodeGen.zig b/src/arch/aarch64/CodeGen.zig index 0261813dcb..f8a774af3b 100644 --- a/src/arch/aarch64/CodeGen.zig +++ b/src/arch/aarch64/CodeGen.zig @@ -2577,7 +2577,7 @@ fn airSplat(self: *Self, inst: Air.Inst.Index) !void { fn airVectorInit(self: *Self, inst: Air.Inst.Index) !void { const vector_ty = self.air.typeOfIndex(inst); - const len = @intCast(u32, vector_ty.arrayLen()); + const len = vector_ty.vectorLen(); const ty_pl = self.air.instructions.items(.data)[inst].ty_pl; const elements = @bitCast([]const Air.Inst.Ref, self.air.extra[ty_pl.payload..][0..len]); const result: MCValue = res: { diff --git a/src/arch/arm/CodeGen.zig b/src/arch/arm/CodeGen.zig index 4d74d7000a..45739dca55 100644 --- a/src/arch/arm/CodeGen.zig +++ b/src/arch/arm/CodeGen.zig @@ -3675,7 +3675,7 @@ fn airSplat(self: *Self, inst: Air.Inst.Index) !void { fn airVectorInit(self: *Self, inst: Air.Inst.Index) !void { const vector_ty = self.air.typeOfIndex(inst); - const len = @intCast(u32, vector_ty.arrayLen()); + const len = vector_ty.vectorLen(); const ty_pl = self.air.instructions.items(.data)[inst].ty_pl; const elements = @bitCast([]const Air.Inst.Ref, self.air.extra[ty_pl.payload..][0..len]); const result: MCValue = res: { diff --git a/src/arch/riscv64/CodeGen.zig b/src/arch/riscv64/CodeGen.zig index 76101aa8c7..c5f0d4fb25 100644 --- a/src/arch/riscv64/CodeGen.zig +++ b/src/arch/riscv64/CodeGen.zig @@ -2076,7 +2076,7 @@ fn airSplat(self: *Self, inst: Air.Inst.Index) !void { fn airVectorInit(self: *Self, inst: Air.Inst.Index) !void { const vector_ty = self.air.typeOfIndex(inst); - const len = @intCast(u32, vector_ty.arrayLen()); + const len = vector_ty.vectorLen(); const ty_pl = self.air.instructions.items(.data)[inst].ty_pl; const elements = @bitCast([]const Air.Inst.Ref, self.air.extra[ty_pl.payload..][0..len]); const result: MCValue = res: { diff --git a/src/arch/wasm/CodeGen.zig b/src/arch/wasm/CodeGen.zig index 5c03253a60..97b43b3067 100644 --- a/src/arch/wasm/CodeGen.zig +++ b/src/arch/wasm/CodeGen.zig @@ -3239,7 +3239,7 @@ fn airVectorInit(self: *Self, inst: Air.Inst.Index) !void { if (self.liveness.isUnused(inst)) return WValue{ .none = {} }; const vector_ty = self.air.typeOfIndex(inst); - const len = @intCast(u32, vector_ty.arrayLen()); + const len = vector_ty.vectorLen(); const ty_pl = self.air.instructions.items(.data)[inst].ty_pl; const elements = @bitCast([]const Air.Inst.Ref, self.air.extra[ty_pl.payload..][0..len]); diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 9cfc7cdfa7..9f4feb56e6 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -3669,7 +3669,7 @@ fn airSplat(self: *Self, inst: Air.Inst.Index) !void { fn airVectorInit(self: *Self, inst: Air.Inst.Index) !void { const vector_ty = self.air.typeOfIndex(inst); - const len = @intCast(u32, vector_ty.arrayLen()); + const len = vector_ty.vectorLen(); const ty_pl = self.air.instructions.items(.data)[inst].ty_pl; const elements = @bitCast([]const Air.Inst.Ref, self.air.extra[ty_pl.payload..][0..len]); const result: MCValue = res: { diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 0bd543fab7..05ec1b1a88 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -3038,7 +3038,7 @@ fn airVectorInit(f: *Function, inst: Air.Inst.Index) !CValue { const inst_ty = f.air.typeOfIndex(inst); const ty_pl = f.air.instructions.items(.data)[inst].ty_pl; const vector_ty = f.air.getRefType(ty_pl.ty); - const len = @intCast(u32, vector_ty.arrayLen()); + const len = vector_ty.vectorLen(); const elements = @bitCast([]const Air.Inst.Ref, f.air.extra[ty_pl.payload..][0..len]); const writer = f.object.writer(); diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 7b94410912..7858fa76fa 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -873,7 +873,7 @@ pub const DeclGen = struct { }, .Vector => { const elem_type = try dg.llvmType(t.childType()); - return elem_type.vectorType(@intCast(c_uint, t.arrayLen())); + return elem_type.vectorType(t.vectorLen()); }, .Optional => { var buf: Type.Payload.ElemType = undefined; @@ -4170,7 +4170,7 @@ pub const FuncGen = struct { const target = self.dg.module.getTarget(); const bits = operand_ty.intInfo(target).bits; const vec_len: ?u32 = switch (operand_ty.zigTypeTag()) { - .Vector => @intCast(u32, operand_ty.arrayLen()), + .Vector => operand_ty.vectorLen(), else => null, }; @@ -4372,7 +4372,7 @@ pub const FuncGen = struct { const scalar = try self.resolveInst(ty_op.operand); const scalar_ty = self.air.typeOf(ty_op.operand); const vector_ty = self.air.typeOfIndex(inst); - const len = @intCast(u32, vector_ty.arrayLen()); + const len = vector_ty.vectorLen(); const scalar_llvm_ty = try self.dg.llvmType(scalar_ty); const op_llvm_ty = scalar_llvm_ty.vectorType(1); const u32_llvm_ty = self.context.intType(32); diff --git a/src/print_air.zig b/src/print_air.zig index b96e35b254..10ca034d1f 100644 --- a/src/print_air.zig +++ b/src/print_air.zig @@ -295,7 +295,7 @@ const Writer = struct { fn writeVectorInit(w: *Writer, s: anytype, inst: Air.Inst.Index) @TypeOf(s).Error!void { const ty_pl = w.air.instructions.items(.data)[inst].ty_pl; const vector_ty = w.air.getRefType(ty_pl.ty); - const len = @intCast(u32, vector_ty.arrayLen()); + const len = vector_ty.vectorLen(); const elements = @bitCast([]const Air.Inst.Ref, w.air.extra[ty_pl.payload..][0..len]); try s.print("{}, [", .{vector_ty}); diff --git a/src/type.zig b/src/type.zig index 40ce977711..b759a4bc34 100644 --- a/src/type.zig +++ b/src/type.zig @@ -3005,6 +3005,13 @@ pub const Type = extern union { return ty.arrayLen() + @boolToInt(ty.sentinel() != null); } + pub fn vectorLen(ty: Type) u32 { + return switch (ty.tag()) { + .vector => @intCast(u32, ty.castTag(.vector).?.data.len), + else => unreachable, + }; + } + /// Asserts the type is an array, pointer or vector. pub fn sentinel(self: Type) ?Value { return switch (self.tag()) { |
