authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-12-02 23:46:42-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-12-02 23:46:42-07:00
log53dcf78a25b47aa28d271c4c520eafb7c3474704
treefdf13108b7343d52b690296a91d42b63679a6b41
parentfdbb0fb7b9c08ebff1b7e45ef89f7160f350d44c

print_air: print Liveness info for switch_br


1 files changed, 25 insertions(+), 0 deletions(-)

src/print_air.zig+25
...@@ -750,6 +750,9 @@ const Writer = struct {...@@ -750,6 +750,9 @@ const Writer = struct {
750 fn writeSwitchBr(w: *Writer, s: anytype, inst: Air.Inst.Index) @TypeOf(s).Error!void {750 fn writeSwitchBr(w: *Writer, s: anytype, inst: Air.Inst.Index) @TypeOf(s).Error!void {
751 const pl_op = w.air.instructions.items(.data)[inst].pl_op;751 const pl_op = w.air.instructions.items(.data)[inst].pl_op;
752 const switch_br = w.air.extraData(Air.SwitchBr, pl_op.payload);752 const switch_br = w.air.extraData(Air.SwitchBr, pl_op.payload);
753 const liveness = w.liveness.getSwitchBr(w.gpa, inst, switch_br.data.cases_len + 1) catch
754 @panic("out of memory");
755 defer w.gpa.free(liveness.deaths);
753 var extra_index: usize = switch_br.end;756 var extra_index: usize = switch_br.end;
754 var case_i: u32 = 0;757 var case_i: u32 = 0;
755758
...@@ -770,6 +773,17 @@ const Writer = struct {...@@ -770,6 +773,17 @@ const Writer = struct {
770 }773 }
771 try s.writeAll("] => {\n");774 try s.writeAll("] => {\n");
772 w.indent += 2;775 w.indent += 2;
776
777 const deaths = liveness.deaths[case_i];
778 if (deaths.len != 0) {
779 try s.writeByteNTimes(' ', w.indent);
780 for (deaths) |operand, i| {
781 if (i != 0) try s.writeAll(" ");
782 try s.print("%{d}!", .{operand});
783 }
784 try s.writeAll("\n");
785 }
786
773 try w.writeBody(s, case_body);787 try w.writeBody(s, case_body);
774 w.indent -= 2;788 w.indent -= 2;
775 try s.writeByteNTimes(' ', w.indent);789 try s.writeByteNTimes(' ', w.indent);
...@@ -780,6 +794,17 @@ const Writer = struct {...@@ -780,6 +794,17 @@ const Writer = struct {
780 if (else_body.len != 0) {794 if (else_body.len != 0) {
781 try s.writeAll(", else => {\n");795 try s.writeAll(", else => {\n");
782 w.indent += 2;796 w.indent += 2;
797
798 const deaths = liveness.deaths[liveness.deaths.len - 1];
799 if (deaths.len != 0) {
800 try s.writeByteNTimes(' ', w.indent);
801 for (deaths) |operand, i| {
802 if (i != 0) try s.writeAll(" ");
803 try s.print("%{d}!", .{operand});
804 }
805 try s.writeAll("\n");
806 }
807
783 try w.writeBody(s, else_body);808 try w.writeBody(s, else_body);
784 w.indent -= 2;809 w.indent -= 2;
785 try s.writeByteNTimes(' ', w.indent);810 try s.writeByteNTimes(' ', w.indent);