| ... | ... | @@ -430,9 +430,9 @@ test "tryAllocReg: no spilling" { |
| 430 | 430 | |
| 431 | 431 | const mock_instruction: Air.Inst.Index = 1; |
| 432 | 432 | |
| 433 | | try expectEqual(@as(?MockRegister1, .r2), 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)); |
| 433 | try expectEqual(@as(?MockRegister1, .r2), 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, .{})); |
| 436 | 436 | |
| 437 | 437 | try expect(function.register_manager.isRegAllocated(.r2)); |
| 438 | 438 | try expect(function.register_manager.isRegAllocated(.r3)); |
| ... | ... | @@ -458,16 +458,16 @@ test "allocReg: spilling" { |
| 458 | 458 | |
| 459 | 459 | const mock_instruction: Air.Inst.Index = 1; |
| 460 | 460 | |
| 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)); |
| 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, .{})); |
| 463 | 463 | |
| 464 | 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 | 466 | try expectEqualSlices(MockRegister1, &[_]MockRegister1{.r2}, function.spilled.items); |
| 467 | 467 | |
| 468 | 468 | // No spilling necessary |
| 469 | 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 | 471 | try expectEqualSlices(MockRegister1, &[_]MockRegister1{.r2}, function.spilled.items); |
| 472 | 472 | |
| 473 | 473 | // Locked registers |
| ... | ... | @@ -476,7 +476,7 @@ test "allocReg: spilling" { |
| 476 | 476 | const lock = function.register_manager.lockReg(.r2); |
| 477 | 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 | 481 | try expect(!function.register_manager.lockedRegsExist()); |
| 482 | 482 | } |
| ... | ... | @@ -489,7 +489,7 @@ test "tryAllocRegs" { |
| 489 | 489 | }; |
| 490 | 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 | 494 | try expect(function.register_manager.isRegAllocated(.r0)); |
| 495 | 495 | try expect(function.register_manager.isRegAllocated(.r1)); |
| ... | ... | @@ -504,7 +504,7 @@ test "tryAllocRegs" { |
| 504 | 504 | const lock = function.register_manager.lockReg(.r1); |
| 505 | 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 | 509 | try expect(!function.register_manager.lockedRegsExist()); |
| 510 | 510 | |
| ... | ... | @@ -543,7 +543,7 @@ test "allocRegs: normal usage" { |
| 543 | 543 | const lock = function.register_manager.lockReg(result_reg); |
| 544 | 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 | 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 | 565 | |
| 566 | 566 | // Here, we don't defer unlock because we manually unlock |
| 567 | 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 | 570 | try function.genAdd(result_reg, regs[0], regs[1]); |
| 571 | 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 | 574 | try function.genAdd(result_reg, result_reg, extra_summand_reg); |
| 575 | 575 | } |
| 576 | 576 | } |