authorgravatar for luuk@degram.devLuuk de Gram <luuk@degram.dev> 2021-07-19 21:50:15+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-07-20 12:19:17-07:00
logcaa0de545e2f45a96ac3136178f478dab1c89ebd
tree4e4c2bbbcf4b17e629110fe4c5eb80d0f32aa242
parent1150fc13dc779c91d54538304466cc068ccbf8ed

Resolve regressions

- Get correct types in wasm backend. - `arg` is already a `Ref`, therefore simply use `@intToEnum`. - Fix regression in `zirBoolBr, where the order of insertion was incorrect.

2 files changed, 10 insertions(+), 10 deletions(-)

src/Sema.zig+5-5
...@@ -5295,11 +5295,6 @@ fn zirBoolBr(...@@ -5295,11 +5295,6 @@ fn zirBoolBr(
5295 then_block.instructions.items.len + else_block.instructions.items.len +5295 then_block.instructions.items.len + else_block.instructions.items.len +
5296 @typeInfo(Air.Block).Struct.fields.len + child_block.instructions.items.len);5296 @typeInfo(Air.Block).Struct.fields.len + child_block.instructions.items.len);
52975297
5298 sema.air_instructions.items(.data)[block_inst].ty_pl.payload = sema.addExtraAssumeCapacity(
5299 Air.Block{ .body_len = @intCast(u32, child_block.instructions.items.len) },
5300 );
5301 sema.air_extra.appendSliceAssumeCapacity(child_block.instructions.items);
5302
5303 const cond_br_payload = sema.addExtraAssumeCapacity(Air.CondBr{5298 const cond_br_payload = sema.addExtraAssumeCapacity(Air.CondBr{
5304 .then_body_len = @intCast(u32, then_block.instructions.items.len),5299 .then_body_len = @intCast(u32, then_block.instructions.items.len),
5305 .else_body_len = @intCast(u32, else_block.instructions.items.len),5300 .else_body_len = @intCast(u32, else_block.instructions.items.len),
...@@ -5312,6 +5307,11 @@ fn zirBoolBr(...@@ -5312,6 +5307,11 @@ fn zirBoolBr(
5312 .payload = cond_br_payload,5307 .payload = cond_br_payload,
5313 } } });5308 } } });
53145309
5310 sema.air_instructions.items(.data)[block_inst].ty_pl.payload = sema.addExtraAssumeCapacity(
5311 Air.Block{ .body_len = @intCast(u32, child_block.instructions.items.len) },
5312 );
5313 sema.air_extra.appendSliceAssumeCapacity(child_block.instructions.items);
5314
5315 try parent_block.instructions.append(gpa, block_inst);5315 try parent_block.instructions.append(gpa, block_inst);
5316 return Air.indexToRef(block_inst);5316 return Air.indexToRef(block_inst);
5317}5317}
src/codegen/wasm.zig+5-5
...@@ -871,7 +871,7 @@ pub const Context = struct {...@@ -871,7 +871,7 @@ pub const Context = struct {
871 };871 };
872872
873 for (args) |arg| {873 for (args) |arg| {
874 const arg_val = self.resolveInst(Air.indexToRef(arg));874 const arg_val = self.resolveInst(@intToEnum(Air.Inst.Ref, arg));
875 try self.emitWValue(arg_val);875 try self.emitWValue(arg_val);
876 }876 }
877877
...@@ -959,7 +959,7 @@ pub const Context = struct {...@@ -959,7 +959,7 @@ pub const Context = struct {
959 try self.emitWValue(lhs);959 try self.emitWValue(lhs);
960 try self.emitWValue(rhs);960 try self.emitWValue(rhs);
961961
962 const bin_ty = self.air.getRefType(bin_op.lhs);962 const bin_ty = self.air.typeOf(bin_op.lhs);
963 const opcode: wasm.Opcode = buildOpcode(.{963 const opcode: wasm.Opcode = buildOpcode(.{
964 .op = op,964 .op = op,
965 .valtype1 = try self.typeToValtype(bin_ty),965 .valtype1 = try self.typeToValtype(bin_ty),
...@@ -1179,7 +1179,7 @@ pub const Context = struct {...@@ -1179,7 +1179,7 @@ pub const Context = struct {
1179 const data: Air.Inst.Data = self.air.instructions.items(.data)[inst];1179 const data: Air.Inst.Data = self.air.instructions.items(.data)[inst];
1180 const lhs = self.resolveInst(data.bin_op.lhs);1180 const lhs = self.resolveInst(data.bin_op.lhs);
1181 const rhs = self.resolveInst(data.bin_op.rhs);1181 const rhs = self.resolveInst(data.bin_op.rhs);
1182 const lhs_ty = self.air.getRefType(data.bin_op.lhs);1182 const lhs_ty = self.air.typeOf(data.bin_op.lhs);
11831183
1184 try self.emitWValue(lhs);1184 try self.emitWValue(lhs);
1185 try self.emitWValue(rhs);1185 try self.emitWValue(rhs);
...@@ -1211,7 +1211,7 @@ pub const Context = struct {...@@ -1211,7 +1211,7 @@ pub const Context = struct {
1211 const br = self.air.instructions.items(.data)[inst].br;1211 const br = self.air.instructions.items(.data)[inst].br;
12121212
1213 // if operand has codegen bits we should break with a value1213 // if operand has codegen bits we should break with a value
1214 if (self.air.getRefType(br.operand).hasCodeGenBits()) {1214 if (self.air.typeOf(br.operand).hasCodeGenBits()) {
1215 try self.emitWValue(self.resolveInst(br.operand));1215 try self.emitWValue(self.resolveInst(br.operand));
1216 }1216 }
12171217
...@@ -1277,7 +1277,7 @@ pub const Context = struct {...@@ -1277,7 +1277,7 @@ pub const Context = struct {
1277 const else_body = self.air.extra[extra.end + cases.len ..][0..extra.data.else_body_len];1277 const else_body = self.air.extra[extra.end + cases.len ..][0..extra.data.else_body_len];
12781278
1279 const target = self.resolveInst(pl_op.operand);1279 const target = self.resolveInst(pl_op.operand);
1280 const target_ty = self.air.getRefType(pl_op.operand);1280 const target_ty = self.air.typeOf(pl_op.operand);
1281 const valtype = try self.typeToValtype(target_ty);1281 const valtype = try self.typeToValtype(target_ty);
1282 // result type is always 'noreturn'1282 // result type is always 'noreturn'
1283 const blocktype = wasm.block_empty;1283 const blocktype = wasm.block_empty;