authorgravatar for xavierb@gmail.comXavier Bouchoux <xavierb@gmail.com> 2022-06-10 22:26:19+00:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-06-17 19:06:17+03:00
logb66247c97af3deaa190d1ca8297166f932b022ff
tree570e39943cd8043e23f26114474c856e86e98aef
parent69e2cac0d349cc32d4ead73541e18d1f72aac729

stage2: coerce tuple to vector


2 files changed, 30 insertions(+), 0 deletions(-)

src/Sema.zig+5
...@@ -19988,6 +19988,11 @@ fn coerce(...@@ -19988,6 +19988,11 @@ fn coerce(
19988 },19988 },
19989 .Vector => switch (inst_ty.zigTypeTag()) {19989 .Vector => switch (inst_ty.zigTypeTag()) {
19990 .Array, .Vector => return sema.coerceArrayLike(block, dest_ty, dest_ty_src, inst, inst_src),19990 .Array, .Vector => return sema.coerceArrayLike(block, dest_ty, dest_ty_src, inst, inst_src),
19991 .Struct => {
19992 if (inst_ty.isTuple()) {
19993 return sema.coerceTupleToArray(block, dest_ty, dest_ty_src, inst, inst_src);
19994 }
19995 },
19991 .Undefined => {19996 .Undefined => {
19992 return sema.addConstUndef(dest_ty);19997 return sema.addConstUndef(dest_ty);
19993 },19998 },
test/behavior/vector.zig+25
...@@ -167,6 +167,31 @@ test "array to vector" {...@@ -167,6 +167,31 @@ test "array to vector" {
167 comptime try S.doTheTest();167 comptime try S.doTheTest();
168}168}
169169
170test "tuple to vector" {
171 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
172 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
173 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
174 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
175 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
176
177 const S = struct {
178 fn doTheTest() !void {
179 const Vec3 = @Vector(3, i32);
180 var v: Vec3 = .{ 1, 0, 0 };
181 for ([_]Vec3{ .{ 0, 1, 0 }, .{ 0, 0, 1 } }) |it| {
182 v += it;
183 }
184
185 try std.testing.expectEqual(v, Vec3{ 1, 1, 1 });
186 if (builtin.zig_backend != .stage1) {
187 try std.testing.expectEqual(v, .{ 1, 1, 1 });
188 }
189 }
190 };
191 try S.doTheTest();
192 comptime try S.doTheTest();
193}
194
170test "vector casts of sizes not divisible by 8" {195test "vector casts of sizes not divisible by 8" {
171 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO196 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
172 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO197 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO