mirror of
https://github.com/ziglang/zig.git
synced 2025-12-15 18:53:07 +00:00
Sema: avoid emitting sequential dbg_stmt instructions
Often, a `dbg_stmt` ends up being associated with no real code because whatever it referred to was eliminated by semantic analysis. In these cases, Sema can replace the last `dbg_stmt` with the new one to avoid redundant AIR instructions which at best are nops and at worst cause backends to emit useless info (e.g. CBE does this).
This commit is contained in:
parent
2e23ddbe7b
commit
3df2f356eb
13
src/Sema.zig
13
src/Sema.zig
@ -5852,6 +5852,19 @@ fn zirDbgStmt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!voi
|
||||
if (block.is_comptime or sema.mod.comp.bin_file.options.strip) return;
|
||||
|
||||
const inst_data = sema.code.instructions.items(.data)[inst].dbg_stmt;
|
||||
|
||||
if (block.instructions.items.len != 0) {
|
||||
const idx = block.instructions.items[block.instructions.items.len - 1];
|
||||
if (sema.air_instructions.items(.tag)[idx] == .dbg_stmt) {
|
||||
// The previous dbg_stmt didn't correspond to any actual code, so replace it.
|
||||
sema.air_instructions.items(.data)[idx].dbg_stmt = .{
|
||||
.line = inst_data.line,
|
||||
.column = inst_data.column,
|
||||
};
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
_ = try block.addInst(.{
|
||||
.tag = .dbg_stmt,
|
||||
.data = .{ .dbg_stmt = .{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user