| ... | ... | @@ -83,7 +83,6 @@ end_di_column: u32, |
| 83 | 83 | epilogue_relocs: std.ArrayListUnmanaged(Mir.Inst.Index) = .empty, |
| 84 | 84 | |
| 85 | 85 | reused_operands: std.StaticBitSet(Liveness.bpi - 1) = undefined, |
| 86 | | const_tracking: ConstTrackingMap = .empty, |
| 87 | 86 | inst_tracking: InstTrackingMap = .empty, |
| 88 | 87 | |
| 89 | 88 | // Key is the block instruction |
| ... | ... | @@ -926,7 +925,6 @@ pub fn generate( |
| 926 | 925 | while (block_it.next()) |block| block.deinit(gpa); |
| 927 | 926 | function.blocks.deinit(gpa); |
| 928 | 927 | function.inst_tracking.deinit(gpa); |
| 929 | | function.const_tracking.deinit(gpa); |
| 930 | 928 | function.epilogue_relocs.deinit(gpa); |
| 931 | 929 | function.mir_instructions.deinit(gpa); |
| 932 | 930 | function.mir_extra.deinit(gpa); |
| ... | ... | @@ -108991,40 +108989,35 @@ fn resolveInst(self: *CodeGen, ref: Air.Inst.Ref) InnerError!MCValue { |
| 108991 | 108989 | // If the type has no codegen bits, no need to store it. |
| 108992 | 108990 | if (!ty.hasRuntimeBitsIgnoreComptime(zcu)) return .none; |
| 108993 | 108991 | |
| 108994 | | const mcv = if (ref.toIndex()) |inst| mcv: { |
| 108992 | const mcv: MCValue = if (ref.toIndex()) |inst| mcv: { |
| 108995 | 108993 | break :mcv self.inst_tracking.getPtr(inst).?.short; |
| 108996 | 108994 | } else mcv: { |
| 108997 | | const ip_index = ref.toInterned().?; |
| 108998 | | const gop = try self.const_tracking.getOrPut(self.gpa, ip_index); |
| 108999 | | if (!gop.found_existing) gop.value_ptr.* = .init(init: { |
| 109000 | | const const_mcv = try self.genTypedValue(.fromInterned(ip_index)); |
| 109001 | | switch (const_mcv) { |
| 109002 | | .lea_tlv => |tlv_sym| switch (self.bin_file.tag) { |
| 109003 | | .elf, .macho => { |
| 109004 | | if (self.mod.pic) { |
| 109005 | | try self.spillRegisters(&.{ .rdi, .rax }); |
| 109006 | | } else { |
| 109007 | | try self.spillRegisters(&.{.rax}); |
| 109008 | | } |
| 109009 | | const frame_index = try self.allocFrameIndex(.init(.{ |
| 109010 | | .size = 8, |
| 109011 | | .alignment = .@"8", |
| 109012 | | })); |
| 109013 | | try self.genSetMem( |
| 109014 | | .{ .frame = frame_index }, |
| 109015 | | 0, |
| 109016 | | .usize, |
| 109017 | | .{ .lea_symbol = .{ .sym_index = tlv_sym } }, |
| 109018 | | .{}, |
| 109019 | | ); |
| 109020 | | break :init .{ .load_frame = .{ .index = frame_index } }; |
| 109021 | | }, |
| 109022 | | else => break :init const_mcv, |
| 108995 | const const_mcv = try self.genTypedValue(.fromInterned(ref.toInterned().?)); |
| 108996 | switch (const_mcv) { |
| 108997 | .lea_tlv => |tlv_sym| switch (self.bin_file.tag) { |
| 108998 | .elf, .macho => { |
| 108999 | if (self.mod.pic) { |
| 109000 | try self.spillRegisters(&.{ .rdi, .rax }); |
| 109001 | } else { |
| 109002 | try self.spillRegisters(&.{.rax}); |
| 109003 | } |
| 109004 | const frame_index = try self.allocFrameIndex(.init(.{ |
| 109005 | .size = 8, |
| 109006 | .alignment = .@"8", |
| 109007 | })); |
| 109008 | try self.genSetMem( |
| 109009 | .{ .frame = frame_index }, |
| 109010 | 0, |
| 109011 | .usize, |
| 109012 | .{ .lea_symbol = .{ .sym_index = tlv_sym } }, |
| 109013 | .{}, |
| 109014 | ); |
| 109015 | break :mcv .{ .load_frame = .{ .index = frame_index } }; |
| 109023 | 109016 | }, |
| 109024 | | else => break :init const_mcv, |
| 109025 | | } |
| 109026 | | }); |
| 109027 | | break :mcv gop.value_ptr.short; |
| 109017 | else => break :mcv const_mcv, |
| 109018 | }, |
| 109019 | else => break :mcv const_mcv, |
| 109020 | } |
| 109028 | 109021 | }; |
| 109029 | 109022 | |
| 109030 | 109023 | switch (mcv) { |
| ... | ... | @@ -115260,8 +115253,7 @@ fn tempFromOperand(cg: *CodeGen, op_ref: Air.Inst.Ref, op_dies: bool) InnerError |
| 115260 | 115253 | |
| 115261 | 115254 | if (op_ref.toIndex()) |op_inst| return .{ .index = op_inst }; |
| 115262 | 115255 | const val = op_ref.toInterned().?; |
| 115263 | | const gop = try cg.const_tracking.getOrPut(cg.gpa, val); |
| 115264 | | if (!gop.found_existing) gop.value_ptr.* = .init(init: { |
| 115256 | return cg.tempInit(.fromInterned(ip.typeOf(val)), init: { |
| 115265 | 115257 | const const_mcv = try cg.genTypedValue(.fromInterned(val)); |
| 115266 | 115258 | switch (const_mcv) { |
| 115267 | 115259 | .lea_tlv => |tlv_sym| switch (cg.bin_file.tag) { |
| ... | ... | @@ -115289,7 +115281,6 @@ fn tempFromOperand(cg: *CodeGen, op_ref: Air.Inst.Ref, op_dies: bool) InnerError |
| 115289 | 115281 | else => break :init const_mcv, |
| 115290 | 115282 | } |
| 115291 | 115283 | }); |
| 115292 | | return cg.tempInit(.fromInterned(ip.typeOf(val)), gop.value_ptr.short); |
| 115293 | 115284 | } |
| 115294 | 115285 | |
| 115295 | 115286 | fn tempsFromOperandsInner( |