aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-01-13 10:42:38 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-01-13 10:42:38 -0700
commitc5ee73f65b4c77fe08aa44b8611bf084ae700f24 (patch)
treeaca72ec5f4fe45695bf7eea6bb288ee2f3ef27e9
parent9bf2bda68356212168a213141e0a21d9dab22655 (diff)
downloadzig-c5ee73f65b4c77fe08aa44b8611bf084ae700f24.tar.gz
zig-c5ee73f65b4c77fe08aa44b8611bf084ae700f24.zip
stage2: fix build on 32-bit ISAs
Fixes regression introduced in 93b854eb745ab3294054ae71150fe60f134f4d10.
-rw-r--r--src/Liveness.zig2
-rw-r--r--src/Sema.zig4
-rw-r--r--src/arch/aarch64/CodeGen.zig2
-rw-r--r--src/arch/arm/CodeGen.zig2
-rw-r--r--src/arch/riscv64/CodeGen.zig2
-rw-r--r--src/arch/wasm/CodeGen.zig2
-rw-r--r--src/arch/x86_64/CodeGen.zig2
-rw-r--r--src/codegen/c.zig2
-rw-r--r--src/codegen/llvm.zig6
-rw-r--r--src/print_air.zig2
-rw-r--r--src/type.zig7
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()) {