summaryrefslogtreecommitdiff
path: root/zjit/src
diff options
context:
space:
mode:
authorAiden Fox Ivey <[email protected]>2025-04-02 20:53:51 -0400
committerTakashi Kokubun <[email protected]>2025-04-18 21:53:01 +0900
commitee3949ac3d505394a70ff1e66b8d5ed4a9e9db6f (patch)
tree1d2413ab1d09b65d9bf89bbefec0227d35d7f169 /zjit/src
parenta9809a6d666f338b10b7d5cecdff892b105cb346 (diff)
Improve register alloc and dealloc error messaging (https://github.com/Shopify/zjit/pull/90)
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/13131
Diffstat (limited to 'zjit/src')
-rw-r--r--zjit/src/backend/lir.rs6
1 files changed, 4 insertions, 2 deletions
diff --git a/zjit/src/backend/lir.rs b/zjit/src/backend/lir.rs
index 033b0760cf..a7bb91d194 100644
--- a/zjit/src/backend/lir.rs
+++ b/zjit/src/backend/lir.rs
@@ -1022,7 +1022,8 @@ impl RegisterPool {
/// Allocate a specific register
fn take_reg(&mut self, reg: &Reg, vreg_idx: usize) -> Reg {
- let reg_idx = self.regs.iter().position(|elem| elem.reg_no == reg.reg_no).unwrap();
+ let reg_idx = self.regs.iter().position(|elem| elem.reg_no == reg.reg_no)
+ .unwrap_or_else(|| panic!("Unable to find register: {}", reg.reg_no));
assert_eq!(self.pool[reg_idx], None, "register already allocated");
self.pool[reg_idx] = Some(vreg_idx);
self.live_regs += 1;
@@ -1032,7 +1033,8 @@ impl RegisterPool {
// Mutate the pool to indicate that the given register is being returned
// as it is no longer used by the instruction that previously held it.
fn dealloc_reg(&mut self, reg: &Reg) {
- let reg_idx = self.regs.iter().position(|elem| elem.reg_no == reg.reg_no).unwrap();
+ let reg_idx = self.regs.iter().position(|elem| elem.reg_no == reg.reg_no)
+ .unwrap_or_else(|| panic!("Unable to find register: {}", reg.reg_no));
if self.pool[reg_idx].is_some() {
self.pool[reg_idx] = None;
self.live_regs -= 1;