authorgravatar for alichraghi@proton.meAli Chraghi <alichraghi@proton.me> 2023-10-14 04:05:04+03:30
committergravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2023-10-15 14:00:33+02:00
log45a1945dc4a77fb757725d977a6e385a21793a98
treef4e26b49c42862ece168f98dd63f0af6e5a483f1
parent9c20449cc5be5da0458556e143980b40d51e8776
signaturebadge-check Signed by SSH key SHA256:CQ99aPxq+RueiL9u7z0FEki5Fm7V6T8q4PrEGmINrA4

spirv: simple binary and comparison vector operations


2 files changed, 72 insertions(+), 31 deletions(-)

src/codegen/spirv.zig+72-12
...@@ -2027,12 +2027,13 @@ const DeclGen = struct {...@@ -2027,12 +2027,13 @@ const DeclGen = struct {
2027 .struct_field_ptr_index_2 => try self.airStructFieldPtrIndex(inst, 2),2027 .struct_field_ptr_index_2 => try self.airStructFieldPtrIndex(inst, 2),
2028 .struct_field_ptr_index_3 => try self.airStructFieldPtrIndex(inst, 3),2028 .struct_field_ptr_index_3 => try self.airStructFieldPtrIndex(inst, 3),
20292029
2030 .cmp_eq => try self.airCmp(inst, .eq),2030 .cmp_eq => try self.airCmp(inst, .eq),
2031 .cmp_neq => try self.airCmp(inst, .neq),2031 .cmp_neq => try self.airCmp(inst, .neq),
2032 .cmp_gt => try self.airCmp(inst, .gt),2032 .cmp_gt => try self.airCmp(inst, .gt),
2033 .cmp_gte => try self.airCmp(inst, .gte),2033 .cmp_gte => try self.airCmp(inst, .gte),
2034 .cmp_lt => try self.airCmp(inst, .lt),2034 .cmp_lt => try self.airCmp(inst, .lt),
2035 .cmp_lte => try self.airCmp(inst, .lte),2035 .cmp_lte => try self.airCmp(inst, .lte),
2036 .cmp_vector => try self.airVectorCmp(inst),
20362037
2037 .arg => self.airArg(),2038 .arg => self.airArg(),
2038 .alloc => try self.airAlloc(inst),2039 .alloc => try self.airAlloc(inst),
...@@ -2088,13 +2089,30 @@ const DeclGen = struct {...@@ -2088,13 +2089,30 @@ const DeclGen = struct {
2088 try self.inst_results.putNoClobber(self.gpa, inst, result_id);2089 try self.inst_results.putNoClobber(self.gpa, inst, result_id);
2089 }2090 }
20902091
2091 fn airBinOpSimple(self: *DeclGen, inst: Air.Inst.Index, comptime opcode: Opcode) !?IdRef {2092 fn binOpSimple(self: *DeclGen, ty: Type, lhs_id: IdRef, rhs_id: IdRef, comptime opcode: Opcode) !IdRef {
2092 if (self.liveness.isUnused(inst)) return null;2093 const mod = self.module;
2093 const bin_op = self.air.instructions.items(.data)[inst].bin_op;2094
2094 const lhs_id = try self.resolve(bin_op.lhs);2095 if (ty.isVector(mod)) {
2095 const rhs_id = try self.resolve(bin_op.rhs);2096 const child_ty = ty.childType(mod);
2097 const vector_len = ty.vectorLen(mod);
2098
2099 var constituents = try self.gpa.alloc(IdRef, vector_len);
2100 defer self.gpa.free(constituents);
2101
2102 for (constituents, 0..) |*constituent, i| {
2103 const lhs_index_id = try self.extractField(child_ty, lhs_id, @intCast(i));
2104 const rhs_index_id = try self.extractField(child_ty, rhs_id, @intCast(i));
2105 const result_id = try self.binOpSimple(child_ty, lhs_index_id, rhs_index_id, opcode);
2106 constituent.* = try self.convertToIndirect(child_ty, result_id);
2107 }
2108
2109 const result_ty = try self.resolveType(child_ty, .indirect);
2110 const result_ty_ref = try self.spv.arrayType(vector_len, result_ty);
2111 return try self.constructArray(result_ty_ref, constituents);
2112 }
2113
2096 const result_id = self.spv.allocId();2114 const result_id = self.spv.allocId();
2097 const result_type_id = try self.resolveTypeId(self.typeOfIndex(inst));2115 const result_type_id = try self.resolveTypeId(ty);
2098 try self.func.body.emit(self.spv.gpa, opcode, .{2116 try self.func.body.emit(self.spv.gpa, opcode, .{
2099 .id_result_type = result_type_id,2117 .id_result_type = result_type_id,
2100 .id_result = result_id,2118 .id_result = result_id,
...@@ -2104,6 +2122,17 @@ const DeclGen = struct {...@@ -2104,6 +2122,17 @@ const DeclGen = struct {
2104 return result_id;2122 return result_id;
2105 }2123 }
21062124
2125 fn airBinOpSimple(self: *DeclGen, inst: Air.Inst.Index, comptime opcode: Opcode) !?IdRef {
2126 if (self.liveness.isUnused(inst)) return null;
2127
2128 const bin_op = self.air.instructions.items(.data)[inst].bin_op;
2129 const lhs_id = try self.resolve(bin_op.lhs);
2130 const rhs_id = try self.resolve(bin_op.rhs);
2131 const ty = self.typeOf(bin_op.lhs);
2132
2133 return try self.binOpSimple(ty, lhs_id, rhs_id, opcode);
2134 }
2135
2107 fn airShift(self: *DeclGen, inst: Air.Inst.Index, comptime opcode: Opcode) !?IdRef {2136 fn airShift(self: *DeclGen, inst: Air.Inst.Index, comptime opcode: Opcode) !?IdRef {
2108 if (self.liveness.isUnused(inst)) return null;2137 if (self.liveness.isUnused(inst)) return null;
2109 const bin_op = self.air.instructions.items(.data)[inst].bin_op;2138 const bin_op = self.air.instructions.items(.data)[inst].bin_op;
...@@ -2676,6 +2705,24 @@ const DeclGen = struct {...@@ -2676,6 +2705,24 @@ const DeclGen = struct {
2676 }2705 }
2677 return result_id;2706 return result_id;
2678 },2707 },
2708 .Vector => {
2709 const child_ty = ty.childType(mod);
2710 const vector_len = ty.vectorLen(mod);
2711 const bool_ty_ref_indirect = try self.resolveType(Type.bool, .indirect);
2712
2713 var constituents = try self.gpa.alloc(IdRef, vector_len);
2714 defer self.gpa.free(constituents);
2715
2716 for (constituents, 0..) |*constituent, i| {
2717 const lhs_index_id = try self.extractField(child_ty, cmp_lhs_id, @intCast(i));
2718 const rhs_index_id = try self.extractField(child_ty, cmp_rhs_id, @intCast(i));
2719 const result_id = try self.cmp(op, child_ty, lhs_index_id, rhs_index_id);
2720 constituent.* = try self.convertToIndirect(Type.bool, result_id);
2721 }
2722
2723 const result_ty_ref = try self.spv.arrayType(vector_len, bool_ty_ref_indirect);
2724 return try self.constructArray(result_ty_ref, constituents);
2725 },
2679 else => unreachable,2726 else => unreachable,
2680 };2727 };
26812728
...@@ -2751,6 +2798,19 @@ const DeclGen = struct {...@@ -2751,6 +2798,19 @@ const DeclGen = struct {
2751 return try self.cmp(op, ty, lhs_id, rhs_id);2798 return try self.cmp(op, ty, lhs_id, rhs_id);
2752 }2799 }
27532800
2801 fn airVectorCmp(self: *DeclGen, inst: Air.Inst.Index) !?IdRef {
2802 if (self.liveness.isUnused(inst)) return null;
2803
2804 const ty_pl = self.air.instructions.items(.data)[inst].ty_pl;
2805 const vec_cmp = self.air.extraData(Air.VectorCmp, ty_pl.payload).data;
2806 const lhs_id = try self.resolve(vec_cmp.lhs);
2807 const rhs_id = try self.resolve(vec_cmp.rhs);
2808 const op = vec_cmp.compareOperator();
2809 const ty = self.typeOf(vec_cmp.lhs);
2810
2811 return try self.cmp(op, ty, lhs_id, rhs_id);
2812 }
2813
2754 fn bitCast(2814 fn bitCast(
2755 self: *DeclGen,2815 self: *DeclGen,
2756 dst_ty: Type,2816 dst_ty: Type,
test/behavior/vector.zig-19
...@@ -53,7 +53,6 @@ test "vector bin compares with mem.eql" {...@@ -53,7 +53,6 @@ test "vector bin compares with mem.eql" {
53 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO53 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
54 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO54 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
55 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO55 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
56 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
5756
58 const S = struct {57 const S = struct {
59 fn doTheTest() !void {58 fn doTheTest() !void {
...@@ -123,7 +122,6 @@ test "vector bit operators" {...@@ -123,7 +122,6 @@ test "vector bit operators" {
123 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO122 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
124 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO123 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
125 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO124 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
126 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
127125
128 const S = struct {126 const S = struct {
129 fn doTheTest() !void {127 fn doTheTest() !void {
...@@ -142,7 +140,6 @@ test "implicit cast vector to array" {...@@ -142,7 +140,6 @@ test "implicit cast vector to array" {
142 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO140 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
143 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO141 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
144 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO142 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
145 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
146143
147 const S = struct {144 const S = struct {
148 fn doTheTest() !void {145 fn doTheTest() !void {
...@@ -160,7 +157,6 @@ test "array to vector" {...@@ -160,7 +157,6 @@ test "array to vector" {
160 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO157 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
161 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO158 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
162 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO159 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
163 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
164160
165 const S = struct {161 const S = struct {
166 fn doTheTest() !void {162 fn doTheTest() !void {
...@@ -285,7 +281,6 @@ test "vector casts of sizes not divisible by 8" {...@@ -285,7 +281,6 @@ test "vector casts of sizes not divisible by 8" {
285 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO281 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
286 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO282 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
287 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO283 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
288 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
289284
290 const S = struct {285 const S = struct {
291 fn doTheTest() !void {286 fn doTheTest() !void {
...@@ -366,7 +361,6 @@ test "load vector elements via comptime index" {...@@ -366,7 +361,6 @@ test "load vector elements via comptime index" {
366 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO361 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
367 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO362 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
368 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO363 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
369 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
370364
371 const S = struct {365 const S = struct {
372 fn doTheTest() !void {366 fn doTheTest() !void {
...@@ -388,7 +382,6 @@ test "store vector elements via comptime index" {...@@ -388,7 +382,6 @@ test "store vector elements via comptime index" {
388 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO382 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
389 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO383 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
390 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO384 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
391 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
392385
393 const S = struct {386 const S = struct {
394 fn doTheTest() !void {387 fn doTheTest() !void {
...@@ -416,7 +409,6 @@ test "load vector elements via runtime index" {...@@ -416,7 +409,6 @@ test "load vector elements via runtime index" {
416 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO409 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
417 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO410 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
418 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO411 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
419 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
420412
421 const S = struct {413 const S = struct {
422 fn doTheTest() !void {414 fn doTheTest() !void {
...@@ -438,7 +430,6 @@ test "store vector elements via runtime index" {...@@ -438,7 +430,6 @@ test "store vector elements via runtime index" {
438 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO430 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
439 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO431 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
440 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO432 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
441 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
442433
443 const S = struct {434 const S = struct {
444 fn doTheTest() !void {435 fn doTheTest() !void {
...@@ -461,7 +452,6 @@ test "initialize vector which is a struct field" {...@@ -461,7 +452,6 @@ test "initialize vector which is a struct field" {
461 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO452 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
462 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO453 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
463 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO454 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
464 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
465455
466 const Vec4Obj = struct {456 const Vec4Obj = struct {
467 data: @Vector(4, f32),457 data: @Vector(4, f32),
...@@ -485,7 +475,6 @@ test "vector comparison operators" {...@@ -485,7 +475,6 @@ test "vector comparison operators" {
485 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO475 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
486 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO476 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
487 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO477 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
488 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
489478
490 const S = struct {479 const S = struct {
491 fn doTheTest() !void {480 fn doTheTest() !void {
...@@ -1167,7 +1156,6 @@ test "loading the second vector from a slice of vectors" {...@@ -1167,7 +1156,6 @@ test "loading the second vector from a slice of vectors" {
1167 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1156 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1168 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1157 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1169 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1158 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1170 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
11711159
1172 @setRuntimeSafety(false);1160 @setRuntimeSafety(false);
1173 var small_bases = [2]@Vector(2, u8){1161 var small_bases = [2]@Vector(2, u8){
...@@ -1184,7 +1172,6 @@ test "array of vectors is copied" {...@@ -1184,7 +1172,6 @@ test "array of vectors is copied" {
1184 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1172 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1185 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1173 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1186 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1174 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1187 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
11881175
1189 const Vec3 = @Vector(3, i32);1176 const Vec3 = @Vector(3, i32);
1190 var points = [_]Vec3{1177 var points = [_]Vec3{
...@@ -1255,7 +1242,6 @@ test "zero multiplicand" {...@@ -1255,7 +1242,6 @@ test "zero multiplicand" {
1255 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1242 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1256 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1243 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1257 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1244 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1258 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
12591245
1260 const zeros = @Vector(2, u32){ 0.0, 0.0 };1246 const zeros = @Vector(2, u32){ 0.0, 0.0 };
1261 var ones = @Vector(2, u32){ 1.0, 1.0 };1247 var ones = @Vector(2, u32){ 1.0, 1.0 };
...@@ -1316,7 +1302,6 @@ test "load packed vector element" {...@@ -1316,7 +1302,6 @@ test "load packed vector element" {
1316 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1302 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1317 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1303 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1318 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1304 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1319 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
1320 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO1305 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1321 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1306 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
13221307
...@@ -1347,7 +1332,6 @@ test "store to vector in slice" {...@@ -1347,7 +1332,6 @@ test "store to vector in slice" {
1347 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO1332 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1348 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO1333 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1349 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1334 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1350 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
13511335
1352 var v = [_]@Vector(3, f32){1336 var v = [_]@Vector(3, f32){
1353 .{ 1, 1, 1 },1337 .{ 1, 1, 1 },
...@@ -1411,7 +1395,6 @@ test "store vector with memset" {...@@ -1411,7 +1395,6 @@ test "store vector with memset" {
1411test "addition of vectors represented as strings" {1395test "addition of vectors represented as strings" {
1412 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1396 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1413 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1397 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1414 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
14151398
1416 const V = @Vector(3, u8);1399 const V = @Vector(3, u8);
1417 const foo: V = "foo".*;1400 const foo: V = "foo".*;
...@@ -1437,7 +1420,6 @@ test "vector pointer is indexable" {...@@ -1437,7 +1420,6 @@ test "vector pointer is indexable" {
1437 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1420 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1438 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO1421 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1439 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1422 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1440 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
14411423
1442 const V = @Vector(2, u32);1424 const V = @Vector(2, u32);
14431425
...@@ -1478,7 +1460,6 @@ test "bitcast to vector with different child type" {...@@ -1478,7 +1460,6 @@ test "bitcast to vector with different child type" {
1478 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1460 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1479 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO1461 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1480 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1462 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1481 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
14821463
1483 const S = struct {1464 const S = struct {
1484 fn doTheTest() !void {1465 fn doTheTest() !void {