authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-02-17 23:09:44+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-02-18 09:14:15+01:00
logd74e9b2d98d00b0e9ae0196c0bb3272b2de2b52e
tree9ee2a6c06d309c2a38c7763c9f732b05aff2af94
parent83744b92a1d1a923fb3faf3aca9d0f57b09cb97d

x64: rename copyToNewRegister to copyToRegisterWithInstTracking for impr clarity


1 files changed, 20 insertions(+), 13 deletions(-)

src/arch/x86_64/CodeGen.zig+20-13
......@@ -883,7 +883,8 @@ fn copyToTmpRegister(self: *Self, ty: Type, mcv: MCValue) !Register {
883883/// Allocates a new register and copies `mcv` into it.
884884/// `reg_owner` is the instruction that gets associated with the register in the register table.
885885/// This can have a side effect of spilling instructions to the stack to free up a register.
886fn copyToNewRegister(self: *Self, reg_owner: Air.Inst.Index, ty: Type, mcv: MCValue) !MCValue {
886/// WARNING make sure that the allocated register matches the returned MCValue from an instruction!
887fn copyToRegisterWithInstTracking(self: *Self, reg_owner: Air.Inst.Index, ty: Type, mcv: MCValue) !MCValue {
887888 const reg = try self.register_manager.allocReg(reg_owner);
888889 try self.genSetReg(ty, reg, mcv);
889890 return MCValue{ .register = reg };
......@@ -939,7 +940,7 @@ fn airIntCast(self: *Self, inst: Air.Inst.Index) !void {
939940 operand.freezeIfRegister(&self.register_manager);
940941 defer operand.unfreezeIfRegister(&self.register_manager);
941942
942 break :blk try self.copyToNewRegister(inst, dest_ty, operand);
943 break :blk try self.copyToRegisterWithInstTracking(inst, dest_ty, operand);
943944 };
944945
945946 return self.finishAir(inst, dst_mcv, .{ ty_op.operand, .none, .none });
......@@ -970,7 +971,7 @@ fn airTrunc(self: *Self, inst: Air.Inst.Index) !void {
970971 break :blk operand.register.to64();
971972 }
972973 }
973 const mcv = try self.copyToNewRegister(inst, src_ty, operand);
974 const mcv = try self.copyToRegisterWithInstTracking(inst, src_ty, operand);
974975 break :blk mcv.register.to64();
975976 };
976977
......@@ -1088,7 +1089,7 @@ fn genPtrBinMathOp(self: *Self, inst: Air.Inst.Index, op_lhs: Air.Inst.Ref, op_r
10881089 if (self.reuseOperand(inst, op_lhs, 0, ptr)) {
10891090 if (ptr.isMemory() or ptr.isRegister()) break :blk ptr;
10901091 }
1091 break :blk try self.copyToNewRegister(inst, dst_ty, ptr);
1092 break :blk try self.copyToRegisterWithInstTracking(inst, dst_ty, ptr);
10921093 };
10931094
10941095 const offset_mcv = blk: {
......@@ -1338,7 +1339,7 @@ fn airOptionalPayload(self: *Self, inst: Air.Inst.Index) !void {
13381339 if (self.reuseOperand(inst, ty_op.operand, 0, operand)) {
13391340 break :result operand;
13401341 }
1341 break :result try self.copyToNewRegister(inst, self.air.typeOfIndex(inst), operand);
1342 break :result try self.copyToRegisterWithInstTracking(inst, self.air.typeOfIndex(inst), operand);
13421343 };
13431344 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
13441345}
......@@ -1666,7 +1667,7 @@ fn airPtrElemPtr(self: *Self, inst: Air.Inst.Index) !void {
16661667 self.register_manager.freezeRegs(&.{offset_reg});
16671668 defer self.register_manager.unfreezeRegs(&.{offset_reg});
16681669
1669 const dst_mcv = try self.copyToNewRegister(inst, ptr_ty, ptr);
1670 const dst_mcv = try self.copyToRegisterWithInstTracking(inst, ptr_ty, ptr);
16701671 try self.genBinMathOpMir(.add, ptr_ty, dst_mcv, .{ .register = offset_reg });
16711672 break :result dst_mcv;
16721673 };
......@@ -2113,7 +2114,7 @@ fn structFieldPtr(self: *Self, inst: Air.Inst.Index, operand: Air.Inst.Ref, inde
21132114 self.register_manager.freezeRegs(&.{offset_reg});
21142115 defer self.register_manager.unfreezeRegs(&.{offset_reg});
21152116
2116 const dst_mcv = try self.copyToNewRegister(inst, ptr_ty, mcv);
2117 const dst_mcv = try self.copyToRegisterWithInstTracking(inst, ptr_ty, mcv);
21172118 try self.genBinMathOpMir(.add, ptr_ty, dst_mcv, .{ .register = offset_reg });
21182119 break :result dst_mcv;
21192120 },
......@@ -2174,7 +2175,9 @@ fn airStructFieldVal(self: *Self, inst: Air.Inst.Index) !void {
21742175 if (self.reuseOperand(inst, operand, 0, mcv)) {
21752176 break :blk mcv;
21762177 } else {
2177 const dst_mcv = try self.copyToNewRegister(inst, Type.usize, .{ .register = reg.to64() });
2178 const dst_mcv = try self.copyToRegisterWithInstTracking(inst, Type.usize, .{
2179 .register = reg.to64(),
2180 });
21782181 break :blk dst_mcv;
21792182 }
21802183 };
......@@ -2237,7 +2240,7 @@ fn genBinMathOp(self: *Self, inst: Air.Inst.Index, op_lhs: Air.Inst.Ref, op_rhs:
22372240 // LHS dies; use it as the destination.
22382241 // Both operands cannot be memory.
22392242 if (lhs.isMemory() and rhs.isMemory()) {
2240 dst_mcv = try self.copyToNewRegister(inst, dst_ty, lhs);
2243 dst_mcv = try self.copyToRegisterWithInstTracking(inst, dst_ty, lhs);
22412244 src_mcv = rhs;
22422245 } else {
22432246 dst_mcv = lhs;
......@@ -2247,7 +2250,7 @@ fn genBinMathOp(self: *Self, inst: Air.Inst.Index, op_lhs: Air.Inst.Ref, op_rhs:
22472250 // RHS dies; use it as the destination.
22482251 // Both operands cannot be memory.
22492252 if (lhs.isMemory() and rhs.isMemory()) {
2250 dst_mcv = try self.copyToNewRegister(inst, dst_ty, rhs);
2253 dst_mcv = try self.copyToRegisterWithInstTracking(inst, dst_ty, rhs);
22512254 src_mcv = lhs;
22522255 } else {
22532256 dst_mcv = rhs;
......@@ -2258,13 +2261,13 @@ fn genBinMathOp(self: *Self, inst: Air.Inst.Index, op_lhs: Air.Inst.Ref, op_rhs:
22582261 rhs.freezeIfRegister(&self.register_manager);
22592262 defer rhs.unfreezeIfRegister(&self.register_manager);
22602263
2261 dst_mcv = try self.copyToNewRegister(inst, dst_ty, lhs);
2264 dst_mcv = try self.copyToRegisterWithInstTracking(inst, dst_ty, lhs);
22622265 src_mcv = rhs;
22632266 } else {
22642267 lhs.freezeIfRegister(&self.register_manager);
22652268 defer lhs.unfreezeIfRegister(&self.register_manager);
22662269
2267 dst_mcv = try self.copyToNewRegister(inst, dst_ty, rhs);
2270 dst_mcv = try self.copyToRegisterWithInstTracking(inst, dst_ty, rhs);
22682271 src_mcv = lhs;
22692272 }
22702273 }
......@@ -2837,7 +2840,11 @@ fn airCall(self: *Self, inst: Air.Inst.Index) !void {
28372840 .register => |reg| {
28382841 if (Register.allocIndex(reg) == null) {
28392842 // Save function return value in a callee saved register
2840 break :result try self.copyToNewRegister(inst, self.air.typeOfIndex(inst), info.return_value);
2843 break :result try self.copyToRegisterWithInstTracking(
2844 inst,
2845 self.air.typeOfIndex(inst),
2846 info.return_value,
2847 );
28412848 }
28422849 },
28432850 else => {},