diff options
-rw-r--r-- | src/compile.zig | 7 | ||||
-rw-r--r-- | src/main.zig | 2 |
2 files changed, 5 insertions, 4 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 .{ diff --git a/src/main.zig b/src/main.zig index 918c52d..7e0794a 100644 --- a/src/main.zig +++ b/src/main.zig @@ -39,7 +39,7 @@ pub fn main() !void { const source = \\let x = 1; \\print(18446744073709551615); - \\print(print(0 - x)); + \\print(x + x); ; var lexer: Lexer = .{ .source = source }; std.debug.print("Tokens:\n", .{}); |