diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2022-02-22 11:04:58 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2022-02-22 21:56:34 +0100 |
| commit | b9b4e4671f4377024efb076edd9cc2da9e889a5a (patch) | |
| tree | 4e0a3239e2fc675614b9d8a29807dbb62f4d5730 | |
| parent | 261711722175447d402632fd7f55b371bfc72df2 (diff) | |
| download | zig-b9b4e4671f4377024efb076edd9cc2da9e889a5a.tar.gz zig-b9b4e4671f4377024efb076edd9cc2da9e889a5a.zip | |
x64: add naive impl of else in switch
| -rw-r--r-- | src/arch/x86_64/CodeGen.zig | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index d38fd3abfb..92b062bdde 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -3953,18 +3953,21 @@ fn airSwitch(self: *Self, inst: Air.Inst.Index) !void { } if (switch_br.data.else_body_len > 0) { - return self.fail("TODO handle else branch in switch", .{}); - } + const else_body = self.air.extra[extra_index..][0..switch_br.data.else_body_len]; + try self.branch_stack.append(.{}); + defer self.branch_stack.pop().deinit(self.gpa); - // const else_body = self.air.extra[extra_index..][0..switch_br.data.else_body_len]; - // const else_branch = self.branch_stack.addOneAssumeCapacity(); - // else_branch.* = .{}; + const else_deaths = liveness.deaths.len - 1; + try self.ensureProcessDeathCapacity(liveness.deaths[else_deaths].len); + for (liveness.deaths[else_deaths]) |operand| { + self.processDeath(operand); + } - // if (else_body.len != 0) { - // try self.genBody(else_body); - // } else { + try self.genBody(else_body); - // } + // TODO consolidate returned MCValues between prongs and else branch like we do + // in airCondBr. + } return self.finishAir(inst, .unreach, .{ pl_op.operand, .none, .none }); } |
