Skip to content

Commit 36aab14

Browse files
authored
IRShow: print invalid SSAValue in red (#46472)
1 parent c3d5009 commit 36aab14

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

base/compiler/ssair/show.jl

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -810,15 +810,19 @@ function show_ir(io::IO, ir::IRCode, config::IRShowConfig=default_config(ir);
810810
pop_new_node! = new_nodes_iter(ir))
811811
used = stmts_used(io, ir)
812812
cfg = ir.cfg
813-
show_ir_stmts(io, ir, 1:length(ir.stmts), config, used, cfg, 1; pop_new_node!)
813+
let io = IOContext(io, :maxssaid=>length(ir.stmts))
814+
show_ir_stmts(io, ir, 1:length(ir.stmts), config, used, cfg, 1; pop_new_node!)
815+
end
814816
finish_show_ir(io, cfg, config)
815817
end
816818

817819
function show_ir(io::IO, ci::CodeInfo, config::IRShowConfig=default_config(ci);
818820
pop_new_node! = Returns(nothing))
819821
used = stmts_used(io, ci)
820822
cfg = compute_basic_blocks(ci.code)
821-
show_ir_stmts(io, ci, 1:length(ci.code), config, used, cfg, 1; pop_new_node!)
823+
let io = IOContext(io, :maxssaid=>length(ci.code))
824+
show_ir_stmts(io, ci, 1:length(ci.code), config, used, cfg, 1; pop_new_node!)
825+
end
822826
finish_show_ir(io, cfg, config)
823827
end
824828

@@ -837,7 +841,9 @@ function show_ir(io::IO, compact::IncrementalCompact, config::IRShowConfig=defau
837841
end
838842
end
839843
pop_new_node! = new_nodes_iter(compact)
840-
bb_idx = show_ir_stmts(io, compact, 1:compact.result_idx-1, config, used_compacted, cfg, 1; pop_new_node!)
844+
bb_idx = let io = IOContext(io, :maxssaid=>length(compact.result))
845+
show_ir_stmts(io, compact, 1:compact.result_idx-1, config, used_compacted, cfg, 1; pop_new_node!)
846+
end
841847

842848
# Print uncompacted nodes from the original IR
843849
stmts = compact.ir.stmts
@@ -847,8 +853,9 @@ function show_ir(io::IO, compact::IncrementalCompact, config::IRShowConfig=defau
847853
# config.line_info_preprinter(io, "", compact.idx)
848854
printstyled(io, ""^(width-indent-1), '\n', color=:red)
849855
end
850-
851-
show_ir_stmts(io, compact.ir, compact.idx:length(stmts), config, used_uncompacted, cfg, bb_idx; pop_new_node!)
856+
let io = IOContext(io, :maxssaid=>length(compact.ir.stmts))
857+
show_ir_stmts(io, compact.ir, compact.idx:length(stmts), config, used_uncompacted, cfg, bb_idx; pop_new_node!)
858+
end
852859

853860
finish_show_ir(io, cfg, config)
854861
end

base/show.jl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1686,7 +1686,14 @@ end
16861686

16871687
## AST printing ##
16881688

1689-
show_unquoted(io::IO, val::SSAValue, ::Int, ::Int) = print(io, "%", val.id)
1689+
function show_unquoted(io::IO, val::SSAValue, ::Int, ::Int)
1690+
if get(io, :maxssaid, typemax(Int))::Int < val.id
1691+
# invalid SSAValue, print this in red for better recognition
1692+
printstyled(io, "%", val.id; color=:red)
1693+
else
1694+
print(io, "%", val.id)
1695+
end
1696+
end
16901697
show_unquoted(io::IO, sym::Symbol, ::Int, ::Int) = show_sym(io, sym, allow_macroname=false)
16911698
show_unquoted(io::IO, ex::LineNumberNode, ::Int, ::Int) = show_linenumber(io, ex.line, ex.file)
16921699
show_unquoted(io::IO, ex::GotoNode, ::Int, ::Int) = print(io, "goto %", ex.label)

0 commit comments

Comments
 (0)