| author | |
| committer | |
| log | a0ec2266fe2bd8a986795c6634407a6f7df9a50f |
| tree | 2b8b917ba2fea35efba7b5c133c1c3432ece78ad |
| parent | 16d17addcbc0b217b0b575928a2b2690be81a736 |
9 files changed, 44 insertions(+), 46 deletions(-)
test/behavior/bitcast.zig+1-1| ... | @@ -396,7 +396,7 @@ test "bitcast vector to integer and back" { | ... | @@ -396,7 +396,7 @@ test "bitcast vector to integer and back" { |
| 396 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; | 396 | if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; |
| 397 | 397 | ||
| 398 | const arr: [16]bool = [_]bool{ true, false } ++ [_]bool{true} ** 14; | 398 | const arr: [16]bool = [_]bool{ true, false } ++ [_]bool{true} ** 14; |
| 399 | var x = @splat(16, true); | 399 | var x: @Vector(16, bool) = @splat(true); |
| 400 | x[1] = false; | 400 | x[1] = false; |
| 401 | try expect(@as(u16, @bitCast(x)) == comptime @as(u16, @bitCast(@as(@Vector(16, bool), arr)))); | 401 | try expect(@as(u16, @bitCast(x)) == comptime @as(u16, @bitCast(@as(@Vector(16, bool), arr)))); |
| 402 | } | 402 | } |
test/behavior/cast.zig+1-1| ... | @@ -639,7 +639,7 @@ test "vector casts" { | ... | @@ -639,7 +639,7 @@ test "vector casts" { |
| 639 | } | 639 | } |
| 640 | 640 | ||
| 641 | fn doTheTestFloat() !void { | 641 | fn doTheTestFloat() !void { |
| 642 | var vec = @splat(2, @as(f32, 1234.0)); | 642 | var vec: @Vector(2, f32) = @splat(1234.0); |
| 643 | var wider: @Vector(2, f64) = vec; | 643 | var wider: @Vector(2, f64) = vec; |
| 644 | try expect(wider[0] == 1234.0); | 644 | try expect(wider[0] == 1234.0); |
| 645 | try expect(wider[1] == 1234.0); | 645 | try expect(wider[1] == 1234.0); |
test/behavior/math.zig+16-10| ... | @@ -111,13 +111,17 @@ test "@clz vectors" { | ... | @@ -111,13 +111,17 @@ test "@clz vectors" { |
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | fn testClzVectors() !void { | 113 | fn testClzVectors() !void { |
| 114 | const Vu4 = @Vector(64, u4); | ||
| 115 | const Vu8 = @Vector(64, u8); | ||
| 116 | const Vu128 = @Vector(64, u128); | ||
| 117 | |||
| 114 | @setEvalBranchQuota(10_000); | 118 | @setEvalBranchQuota(10_000); |
| 115 | try testOneClzVector(u8, 64, @splat(64, @as(u8, 0b10001010)), @splat(64, @as(u4, 0))); | 119 | try testOneClzVector(u8, 64, @as(Vu8, @splat(0b10001010)), @as(Vu4, @splat(0))); |
| 116 | try testOneClzVector(u8, 64, @splat(64, @as(u8, 0b00001010)), @splat(64, @as(u4, 4))); | 120 | try testOneClzVector(u8, 64, @as(Vu8, @splat(0b00001010)), @as(Vu4, @splat(4))); |
| 117 | try testOneClzVector(u8, 64, @splat(64, @as(u8, 0b00011010)), @splat(64, @as(u4, 3))); | 121 | try testOneClzVector(u8, 64, @as(Vu8, @splat(0b00011010)), @as(Vu4, @splat(3))); |
| 118 | try testOneClzVector(u8, 64, @splat(64, @as(u8, 0b00000000)), @splat(64, @as(u4, 8))); | 122 | try testOneClzVector(u8, 64, @as(Vu8, @splat(0b00000000)), @as(Vu4, @splat(8))); |
| 119 | try testOneClzVector(u128, 64, @splat(64, @as(u128, 0xffffffffffffffff)), @splat(64, @as(u8, 64))); | 123 | try testOneClzVector(u128, 64, @as(Vu128, @splat(0xffffffffffffffff)), @as(Vu8, @splat(64))); |
| 120 | try testOneClzVector(u128, 64, @splat(64, @as(u128, 0x10000000000000000)), @splat(64, @as(u8, 63))); | 124 | try testOneClzVector(u128, 64, @as(Vu128, @splat(0x10000000000000000)), @as(Vu8, @splat(63))); |
| 121 | } | 125 | } |
| 122 | 126 | ||
| 123 | fn testOneClzVector( | 127 | fn testOneClzVector( |
| ... | @@ -180,11 +184,13 @@ test "@ctz vectors" { | ... | @@ -180,11 +184,13 @@ test "@ctz vectors" { |
| 180 | } | 184 | } |
| 181 | 185 | ||
| 182 | fn testCtzVectors() !void { | 186 | fn testCtzVectors() !void { |
| 187 | const Vu4 = @Vector(64, u4); | ||
| 188 | const Vu8 = @Vector(64, u8); | ||
| 183 | @setEvalBranchQuota(10_000); | 189 | @setEvalBranchQuota(10_000); |
| 184 | try testOneCtzVector(u8, 64, @splat(64, @as(u8, 0b10100000)), @splat(64, @as(u4, 5))); | 190 | try testOneCtzVector(u8, 64, @as(Vu8, @splat(0b10100000)), @as(Vu4, @splat(5))); |
| 185 | try testOneCtzVector(u8, 64, @splat(64, @as(u8, 0b10001010)), @splat(64, @as(u4, 1))); | 191 | try testOneCtzVector(u8, 64, @as(Vu8, @splat(0b10001010)), @as(Vu4, @splat(1))); |
| 186 | try testOneCtzVector(u8, 64, @splat(64, @as(u8, 0b00000000)), @splat(64, @as(u4, 8))); | 192 | try testOneCtzVector(u8, 64, @as(Vu8, @splat(0b00000000)), @as(Vu4, @splat(8))); |
| 187 | try testOneCtzVector(u16, 64, @splat(64, @as(u16, 0b00000000)), @splat(64, @as(u5, 16))); | 193 | try testOneCtzVector(u16, 64, @as(@Vector(64, u16), @splat(0b00000000)), @as(@Vector(64, u5), @splat(16))); |
| 188 | } | 194 | } |
| 189 | 195 | ||
| 190 | fn testOneCtzVector( | 196 | fn testOneCtzVector( |
test/behavior/vector.zig+21-18| ... | @@ -299,8 +299,7 @@ test "vector @splat" { | ... | @@ -299,8 +299,7 @@ test "vector @splat" { |
| 299 | const S = struct { | 299 | const S = struct { |
| 300 | fn testForT(comptime N: comptime_int, v: anytype) !void { | 300 | fn testForT(comptime N: comptime_int, v: anytype) !void { |
| 301 | const T = @TypeOf(v); | 301 | const T = @TypeOf(v); |
| 302 | var vec = @splat(N, v); | 302 | var vec: @Vector(N, T) = @splat(v); |
| 303 | try expect(@Vector(N, T) == @TypeOf(vec)); | ||
| 304 | var as_array = @as([N]T, vec); | 303 | var as_array = @as([N]T, vec); |
| 305 | for (as_array) |elem| try expect(v == elem); | 304 | for (as_array) |elem| try expect(v == elem); |
| 306 | } | 305 | } |
| ... | @@ -458,26 +457,28 @@ test "vector comparison operators" { | ... | @@ -458,26 +457,28 @@ test "vector comparison operators" { |
| 458 | const S = struct { | 457 | const S = struct { |
| 459 | fn doTheTest() !void { | 458 | fn doTheTest() !void { |
| 460 | { | 459 | { |
| 461 | var v1: @Vector(4, bool) = [_]bool{ true, false, true, false }; | 460 | const V = @Vector(4, bool); |
| 462 | var v2: @Vector(4, bool) = [_]bool{ false, true, false, true }; | 461 | var v1: V = [_]bool{ true, false, true, false }; |
| 463 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, true)), &@as([4]bool, v1 == v1))); | 462 | var v2: V = [_]bool{ false, true, false, true }; |
| 464 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, false)), &@as([4]bool, v1 == v2))); | 463 | try expect(mem.eql(bool, &@as([4]bool, @as(V, @splat(true))), &@as([4]bool, v1 == v1))); |
| 465 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, true)), &@as([4]bool, v1 != v2))); | 464 | try expect(mem.eql(bool, &@as([4]bool, @as(V, @splat(false))), &@as([4]bool, v1 == v2))); |
| 466 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, false)), &@as([4]bool, v2 != v2))); | 465 | try expect(mem.eql(bool, &@as([4]bool, @as(V, @splat(true))), &@as([4]bool, v1 != v2))); |
| 466 | try expect(mem.eql(bool, &@as([4]bool, @as(V, @splat(false))), &@as([4]bool, v2 != v2))); | ||
| 467 | } | 467 | } |
| 468 | { | 468 | { |
| 469 | var v1 = @splat(4, @as(u32, 0xc0ffeeee)); | 469 | const V = @Vector(4, bool); |
| 470 | var v1: @Vector(4, u32) = @splat(0xc0ffeeee); | ||
| 470 | var v2: @Vector(4, c_uint) = v1; | 471 | var v2: @Vector(4, c_uint) = v1; |
| 471 | var v3 = @splat(4, @as(u32, 0xdeadbeef)); | 472 | var v3: @Vector(4, u32) = @splat(0xdeadbeef); |
| 472 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, true)), &@as([4]bool, v1 == v2))); | 473 | try expect(mem.eql(bool, &@as([4]bool, @as(V, @splat(true))), &@as([4]bool, v1 == v2))); |
| 473 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, false)), &@as([4]bool, v1 == v3))); | 474 | try expect(mem.eql(bool, &@as([4]bool, @as(V, @splat(false))), &@as([4]bool, v1 == v3))); |
| 474 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, true)), &@as([4]bool, v1 != v3))); | 475 | try expect(mem.eql(bool, &@as([4]bool, @as(V, @splat(true))), &@as([4]bool, v1 != v3))); |
| 475 | try expect(mem.eql(bool, &@as([4]bool, @splat(4, false)), &@as([4]bool, v1 != v2))); | 476 | try expect(mem.eql(bool, &@as([4]bool, @as(V, @splat(false))), &@as([4]bool, v1 != v2))); |
| 476 | } | 477 | } |
| 477 | { | 478 | { |
| 478 | // Comptime-known LHS/RHS | 479 | // Comptime-known LHS/RHS |
| 479 | var v1: @Vector(4, u32) = [_]u32{ 2, 1, 2, 1 }; | 480 | var v1: @Vector(4, u32) = [_]u32{ 2, 1, 2, 1 }; |
| 480 | const v2 = @splat(4, @as(u32, 2)); | 481 | const v2: @Vector(4, u32) = @splat(2); |
| 481 | const v3: @Vector(4, bool) = [_]bool{ true, false, true, false }; | 482 | const v3: @Vector(4, bool) = [_]bool{ true, false, true, false }; |
| 482 | try expect(mem.eql(bool, &@as([4]bool, v3), &@as([4]bool, v1 == v2))); | 483 | try expect(mem.eql(bool, &@as([4]bool, v3), &@as([4]bool, v1 == v2))); |
| 483 | try expect(mem.eql(bool, &@as([4]bool, v3), &@as([4]bool, v2 == v1))); | 484 | try expect(mem.eql(bool, &@as([4]bool, v3), &@as([4]bool, v2 == v1))); |
| ... | @@ -847,8 +848,10 @@ test "vector @reduce comptime" { | ... | @@ -847,8 +848,10 @@ test "vector @reduce comptime" { |
| 847 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 848 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 848 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 849 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 849 | 850 | ||
| 850 | const value = @Vector(4, i32){ 1, -1, 1, -1 }; | 851 | const V = @Vector(4, i32); |
| 851 | const result = value > @splat(4, @as(i32, 0)); | 852 | |
| 853 | const value = V{ 1, -1, 1, -1 }; | ||
| 854 | const result = value > @as(V, @splat(0)); | ||
| 852 | // result is { true, false, true, false }; | 855 | // result is { true, false, true, false }; |
| 853 | try comptime expect(@TypeOf(result) == @Vector(4, bool)); | 856 | try comptime expect(@TypeOf(result) == @Vector(4, bool)); |
| 854 | const is_all_true = @reduce(.And, result); | 857 | const is_all_true = @reduce(.And, result); |
| ... | @@ -1270,7 +1273,7 @@ test "array operands to shuffle are coerced to vectors" { | ... | @@ -1270,7 +1273,7 @@ test "array operands to shuffle are coerced to vectors" { |
| 1270 | const mask = [5]i32{ -1, 0, 1, 2, 3 }; | 1273 | const mask = [5]i32{ -1, 0, 1, 2, 3 }; |
| 1271 | 1274 | ||
| 1272 | var a = [5]u32{ 3, 5, 7, 9, 0 }; | 1275 | var a = [5]u32{ 3, 5, 7, 9, 0 }; |
| 1273 | var b = @shuffle(u32, a, @splat(5, @as(u24, 0)), mask); | 1276 | var b = @shuffle(u32, a, @as(@Vector(5, u24), @splat(0)), mask); |
| 1274 | try expectEqual([_]u32{ 0, 3, 5, 7, 9 }, b); | 1277 | try expectEqual([_]u32{ 0, 3, 5, 7, 9 }, b); |
| 1275 | } | 1278 | } |
| 1276 | 1279 |
test/cases/compile_errors/bad_splat_type.zig deleted-11| ... | @@ -1,11 +0,0 @@ | ||
| 1 | export fn entry() void { | ||
| 2 | const c = 4; | ||
| 3 | var v = @splat(4, c); | ||
| 4 | _ = v; | ||
| 5 | } | ||
| 6 | |||
| 7 | // error | ||
| 8 | // backend=stage2 | ||
| 9 | // target=native | ||
| 10 | // | ||
| 11 | // :3:23: error: expected integer, float, bool, or pointer for the vector element type; found 'comptime_int' | ||
test/cases/compile_errors/branch_in_comptime_only_scope_uses_condbr_inline.zig+2-2| ... | @@ -1,13 +1,13 @@ | ... | @@ -1,13 +1,13 @@ |
| 1 | pub export fn entry1() void { | 1 | pub export fn entry1() void { |
| 2 | var x: u32 = 3; | 2 | var x: u32 = 3; |
| 3 | _ = @shuffle(u32, [_]u32{0}, @splat(1, @as(u32, 0)), [_]i8{ | 3 | _ = @shuffle(u32, [_]u32{0}, @as(@Vector(1, u32), @splat(0)), [_]i8{ |
| 4 | if (x > 1) 1 else -1, | 4 | if (x > 1) 1 else -1, |
| 5 | }); | 5 | }); |
| 6 | } | 6 | } |
| 7 | 7 | ||
| 8 | pub export fn entry2() void { | 8 | pub export fn entry2() void { |
| 9 | var y: ?i8 = -1; | 9 | var y: ?i8 = -1; |
| 10 | _ = @shuffle(u32, [_]u32{0}, @splat(1, @as(u32, 0)), [_]i8{ | 10 | _ = @shuffle(u32, [_]u32{0}, @as(@Vector(1, u32), @splat(0)), [_]i8{ |
| 11 | y orelse 1, | 11 | y orelse 1, |
| 12 | }); | 12 | }); |
| 13 | } | 13 | } |
test/cases/safety/signed-unsigned vector cast.zig	+1-1| ... | @@ -9,7 +9,7 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi | ... | @@ -9,7 +9,7 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi |
| 9 | } | 9 | } |
| 10 | 10 | ||
| 11 | pub fn main() !void { | 11 | pub fn main() !void { |
| 12 | var x = @splat(4, @as(i32, -2147483647)); | 12 | var x: @Vector(4, i32) = @splat(-2147483647); |
| 13 | var y: @Vector(4, u32) = @intCast(x); | 13 | var y: @Vector(4, u32) = @intCast(x); |
| 14 | _ = y; | 14 | _ = y; |
| 15 | return error.TestFailed; | 15 | return error.TestFailed; |
test/cases/safety/truncating vector cast.zig	+1-1| ... | @@ -9,7 +9,7 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi | ... | @@ -9,7 +9,7 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi |
| 9 | } | 9 | } |
| 10 | 10 | ||
| 11 | pub fn main() !void { | 11 | pub fn main() !void { |
| 12 | var x = @splat(4, @as(u32, 0xdeadbeef)); | 12 | var x: @Vector(4, u32) = @splat(0xdeadbeef); |
| 13 | var y: @Vector(4, u16) = @intCast(x); | 13 | var y: @Vector(4, u16) = @intCast(x); |
| 14 | _ = y; | 14 | _ = y; |
| 15 | return error.TestFailed; | 15 | return error.TestFailed; |
test/cases/safety/unsigned-signed vector cast.zig	+1-1| ... | @@ -9,7 +9,7 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi | ... | @@ -9,7 +9,7 @@ pub fn panic(message: []const u8, stack_trace: ?*std.builtin.StackTrace, _: ?usi |
| 9 | } | 9 | } |
| 10 | 10 | ||
| 11 | pub fn main() !void { | 11 | pub fn main() !void { |
| 12 | var x = @splat(4, @as(u32, 0x80000000)); | 12 | var x: @Vector(4, u32) = @splat(0x80000000); |
| 13 | var y: @Vector(4, i32) = @intCast(x); | 13 | var y: @Vector(4, i32) = @intCast(x); |
| 14 | _ = y; | 14 | _ = y; |
| 15 | return error.TestFailed; | 15 | return error.TestFailed; |