authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-02-22 11:04:58+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-02-22 21:56:34+01:00
logb9b4e4671f4377024efb076edd9cc2da9e889a5a
tree4e0a3239e2fc675614b9d8a29807dbb62f4d5730
parent261711722175447d402632fd7f55b371bfc72df2

x64: add naive impl of else in switch


1 files changed, 12 insertions(+), 9 deletions(-)

src/arch/x86_64/CodeGen.zig+12-9
......@@ -3953,18 +3953,21 @@ fn airSwitch(self: *Self, inst: Air.Inst.Index) !void {
39533953 }
39543954
39553955 if (switch_br.data.else_body_len > 0) {
3956 return self.fail("TODO handle else branch in switch", .{});
3957 }
3956 const else_body = self.air.extra[extra_index..][0..switch_br.data.else_body_len];
3957 try self.branch_stack.append(.{});
3958 defer self.branch_stack.pop().deinit(self.gpa);
39583959
3959 // const else_body = self.air.extra[extra_index..][0..switch_br.data.else_body_len];
3960 // const else_branch = self.branch_stack.addOneAssumeCapacity();
3961 // else_branch.* = .{};
3960 const else_deaths = liveness.deaths.len - 1;
3961 try self.ensureProcessDeathCapacity(liveness.deaths[else_deaths].len);
3962 for (liveness.deaths[else_deaths]) |operand| {
3963 self.processDeath(operand);
3964 }
39623965
3963 // if (else_body.len != 0) {
3964 // try self.genBody(else_body);
3965 // } else {
3966 try self.genBody(else_body);
39663967
3967 // }
3968 // TODO consolidate returned MCValues between prongs and else branch like we do
3969 // in airCondBr.
3970 }
39683971
39693972 return self.finishAir(inst, .unreach, .{ pl_op.operand, .none, .none });
39703973}