| ... | @@ -430,9 +430,9 @@ test "tryAllocReg: no spilling" { | ... | @@ -430,9 +430,9 @@ test "tryAllocReg: no spilling" { |
| 430 | | 430 | |
| 431 | const mock_instruction: Air.Inst.Index = 1; | 431 | const mock_instruction: Air.Inst.Index = 1; |
| 432 | | 432 | |
| 433 | try expectEqual(@as(?MockRegister1, .r2), function.register_manager.tryAllocReg(mock_instruction)); | 433 | try expectEqual(@as(?MockRegister1, .r2), function.register_manager.tryAllocReg(mock_instruction, .{})); |
| 434 | try expectEqual(@as(?MockRegister1, .r3), function.register_manager.tryAllocReg(mock_instruction)); | 434 | try expectEqual(@as(?MockRegister1, .r3), function.register_manager.tryAllocReg(mock_instruction, .{})); |
| 435 | try expectEqual(@as(?MockRegister1, null), function.register_manager.tryAllocReg(mock_instruction)); | 435 | try expectEqual(@as(?MockRegister1, null), function.register_manager.tryAllocReg(mock_instruction, .{})); |
| 436 | | 436 | |
| 437 | try expect(function.register_manager.isRegAllocated(.r2)); | 437 | try expect(function.register_manager.isRegAllocated(.r2)); |
| 438 | try expect(function.register_manager.isRegAllocated(.r3)); | 438 | try expect(function.register_manager.isRegAllocated(.r3)); |
| ... | @@ -458,16 +458,16 @@ test "allocReg: spilling" { | ... | @@ -458,16 +458,16 @@ test "allocReg: spilling" { |
| 458 | | 458 | |
| 459 | const mock_instruction: Air.Inst.Index = 1; | 459 | const mock_instruction: Air.Inst.Index = 1; |
| 460 | | 460 | |
| 461 | try expectEqual(@as(?MockRegister1, .r2), try function.register_manager.allocReg(mock_instruction)); | 461 | try expectEqual(@as(?MockRegister1, .r2), try function.register_manager.allocReg(mock_instruction, .{})); |
| 462 | try expectEqual(@as(?MockRegister1, .r3), try function.register_manager.allocReg(mock_instruction)); | 462 | try expectEqual(@as(?MockRegister1, .r3), try function.register_manager.allocReg(mock_instruction, .{})); |
| 463 | | 463 | |
| 464 | // Spill a register | 464 | // Spill a register |
| 465 | try expectEqual(@as(?MockRegister1, .r2), try function.register_manager.allocReg(mock_instruction)); | 465 | try expectEqual(@as(?MockRegister1, .r2), try function.register_manager.allocReg(mock_instruction, .{})); |
| 466 | try expectEqualSlices(MockRegister1, &[_]MockRegister1{.r2}, function.spilled.items); | 466 | try expectEqualSlices(MockRegister1, &[_]MockRegister1{.r2}, function.spilled.items); |
| 467 | | 467 | |
| 468 | // No spilling necessary | 468 | // No spilling necessary |
| 469 | function.register_manager.freeReg(.r3); | 469 | function.register_manager.freeReg(.r3); |
| 470 | try expectEqual(@as(?MockRegister1, .r3), try function.register_manager.allocReg(mock_instruction)); | 470 | try expectEqual(@as(?MockRegister1, .r3), try function.register_manager.allocReg(mock_instruction, .{})); |
| 471 | try expectEqualSlices(MockRegister1, &[_]MockRegister1{.r2}, function.spilled.items); | 471 | try expectEqualSlices(MockRegister1, &[_]MockRegister1{.r2}, function.spilled.items); |
| 472 | | 472 | |
| 473 | // Locked registers | 473 | // Locked registers |
| ... | @@ -476,7 +476,7 @@ test "allocReg: spilling" { | ... | @@ -476,7 +476,7 @@ test "allocReg: spilling" { |
| 476 | const lock = function.register_manager.lockReg(.r2); | 476 | const lock = function.register_manager.lockReg(.r2); |
| 477 | defer if (lock) |reg| function.register_manager.unlockReg(reg); | 477 | defer if (lock) |reg| function.register_manager.unlockReg(reg); |
| 478 | | 478 | |
| 479 | try expectEqual(@as(?MockRegister1, .r3), try function.register_manager.allocReg(mock_instruction)); | 479 | try expectEqual(@as(?MockRegister1, .r3), try function.register_manager.allocReg(mock_instruction, .{})); |
| 480 | } | 480 | } |
| 481 | try expect(!function.register_manager.lockedRegsExist()); | 481 | try expect(!function.register_manager.lockedRegsExist()); |
| 482 | } | 482 | } |
| ... | @@ -489,7 +489,7 @@ test "tryAllocRegs" { | ... | @@ -489,7 +489,7 @@ test "tryAllocRegs" { |
| 489 | }; | 489 | }; |
| 490 | defer function.deinit(); | 490 | defer function.deinit(); |
| 491 | | 491 | |
| 492 | try expectEqual([_]MockRegister2{ .r0, .r1, .r2 }, function.register_manager.tryAllocRegs(3, .{ null, null, null }).?); | 492 | try expectEqual([_]MockRegister2{ .r0, .r1, .r2 }, function.register_manager.tryAllocRegs(3, .{ null, null, null }, .{}).?); |
| 493 | | 493 | |
| 494 | try expect(function.register_manager.isRegAllocated(.r0)); | 494 | try expect(function.register_manager.isRegAllocated(.r0)); |
| 495 | try expect(function.register_manager.isRegAllocated(.r1)); | 495 | try expect(function.register_manager.isRegAllocated(.r1)); |
| ... | @@ -504,7 +504,7 @@ test "tryAllocRegs" { | ... | @@ -504,7 +504,7 @@ test "tryAllocRegs" { |
| 504 | const lock = function.register_manager.lockReg(.r1); | 504 | const lock = function.register_manager.lockReg(.r1); |
| 505 | defer if (lock) |reg| function.register_manager.unlockReg(reg); | 505 | defer if (lock) |reg| function.register_manager.unlockReg(reg); |
| 506 | | 506 | |
| 507 | try expectEqual([_]MockRegister2{ .r0, .r2, .r3 }, function.register_manager.tryAllocRegs(3, .{ null, null, null }).?); | 507 | try expectEqual([_]MockRegister2{ .r0, .r2, .r3 }, function.register_manager.tryAllocRegs(3, .{ null, null, null }, .{}).?); |
| 508 | } | 508 | } |
| 509 | try expect(!function.register_manager.lockedRegsExist()); | 509 | try expect(!function.register_manager.lockedRegsExist()); |
| 510 | | 510 | |
| ... | @@ -543,7 +543,7 @@ test "allocRegs: normal usage" { | ... | @@ -543,7 +543,7 @@ test "allocRegs: normal usage" { |
| 543 | const lock = function.register_manager.lockReg(result_reg); | 543 | const lock = function.register_manager.lockReg(result_reg); |
| 544 | defer if (lock) |reg| function.register_manager.unlockReg(reg); | 544 | defer if (lock) |reg| function.register_manager.unlockReg(reg); |
| 545 | | 545 | |
| 546 | const regs = try function.register_manager.allocRegs(2, .{ null, null }); | 546 | const regs = try function.register_manager.allocRegs(2, .{ null, null }, .{}); |
| 547 | try function.genAdd(result_reg, regs[0], regs[1]); | 547 | try function.genAdd(result_reg, regs[0], regs[1]); |
| 548 | } | 548 | } |
| 549 | } | 549 | } |
| ... | @@ -565,12 +565,12 @@ test "allocRegs: selectively reducing register pressure" { | ... | @@ -565,12 +565,12 @@ test "allocRegs: selectively reducing register pressure" { |
| 565 | | 565 | |
| 566 | // Here, we don't defer unlock because we manually unlock | 566 | // Here, we don't defer unlock because we manually unlock |
| 567 | // after genAdd | 567 | // after genAdd |
| 568 | const regs = try function.register_manager.allocRegs(2, .{ null, null }); | 568 | const regs = try function.register_manager.allocRegs(2, .{ null, null }, .{}); |
| 569 | | 569 | |
| 570 | try function.genAdd(result_reg, regs[0], regs[1]); | 570 | try function.genAdd(result_reg, regs[0], regs[1]); |
| 571 | function.register_manager.unlockReg(lock.?); | 571 | function.register_manager.unlockReg(lock.?); |
| 572 | | 572 | |
| 573 | const extra_summand_reg = try function.register_manager.allocReg(null); | 573 | const extra_summand_reg = try function.register_manager.allocReg(null, .{}); |
| 574 | try function.genAdd(result_reg, result_reg, extra_summand_reg); | 574 | try function.genAdd(result_reg, result_reg, extra_summand_reg); |
| 575 | } | 575 | } |
| 576 | } | 576 | } |