diff options
Diffstat (limited to 'src/compile.zig')
-rw-r--r-- | src/compile.zig | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/compile.zig b/src/compile.zig index c352994..acae7ff 100644 --- a/src/compile.zig +++ b/src/compile.zig @@ -84,10 +84,11 @@ pub const Block = struct { fn init(allocator: Allocator, instrs: []Instr) !Block { var vreg_last_use: std.AutoHashMap(usize, std.ArrayList(VReg)) = .init(allocator); for (0.., instrs) |i, instr| { + const kv = try vreg_last_use.getOrPut(i); + if (!kv.found_existing) kv.value_ptr.* = .init(allocator); for (instr.sources().slice()) |src| { - const kv = try vreg_last_use.getOrPut(i); - if (!kv.found_existing) kv.value_ptr.* = .init(allocator); - try kv.value_ptr.append(src); + if (std.mem.indexOfScalar(VReg, kv.value_ptr.items, src) == null) + try kv.value_ptr.append(src); } } return .{ |