zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 53dcf78a25b47aa28d271c4c520eafb7c3474704 (tree)
parent fdbb0fb7b9c08ebff1b7e45ef89f7160f350d44c
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Fri,  2 Dec 2022 23:46:42 -0700

print_air: print Liveness info for switch_br

Diffstat:
Msrc/print_air.zig | 25+++++++++++++++++++++++++
1 file changed, 25 insertions(+), 0 deletions(-)

diff --git a/src/print_air.zig b/src/print_air.zig @@ -750,6 +750,9 @@ const Writer = struct { fn writeSwitchBr(w: *Writer, s: anytype, inst: Air.Inst.Index) @TypeOf(s).Error!void { const pl_op = w.air.instructions.items(.data)[inst].pl_op; const switch_br = w.air.extraData(Air.SwitchBr, pl_op.payload); + const liveness = w.liveness.getSwitchBr(w.gpa, inst, switch_br.data.cases_len + 1) catch + @panic("out of memory"); + defer w.gpa.free(liveness.deaths); var extra_index: usize = switch_br.end; var case_i: u32 = 0; @@ -770,6 +773,17 @@ const Writer = struct { } try s.writeAll("] => {\n"); w.indent += 2; + + const deaths = liveness.deaths[case_i]; + if (deaths.len != 0) { + try s.writeByteNTimes(' ', w.indent); + for (deaths) |operand, i| { + if (i != 0) try s.writeAll(" "); + try s.print("%{d}!", .{operand}); + } + try s.writeAll("\n"); + } + try w.writeBody(s, case_body); w.indent -= 2; try s.writeByteNTimes(' ', w.indent); @@ -780,6 +794,17 @@ const Writer = struct { if (else_body.len != 0) { try s.writeAll(", else => {\n"); w.indent += 2; + + const deaths = liveness.deaths[liveness.deaths.len - 1]; + if (deaths.len != 0) { + try s.writeByteNTimes(' ', w.indent); + for (deaths) |operand, i| { + if (i != 0) try s.writeAll(" "); + try s.print("%{d}!", .{operand}); + } + try s.writeAll("\n"); + } + try w.writeBody(s, else_body); w.indent -= 2; try s.writeByteNTimes(' ', w.indent);