diff --git a/src/ion/data_structures.rs b/src/ion/data_structures.rs index 99fd7b1f..41937a27 100644 --- a/src/ion/data_structures.rs +++ b/src/ion/data_structures.rs @@ -208,8 +208,9 @@ pub struct LiveBundle { pub const BUNDLE_MAX_SPILL_WEIGHT: u32 = (1 << 28) - 1; pub const MINIMAL_FIXED_BUNDLE_SPILL_WEIGHT: u32 = BUNDLE_MAX_SPILL_WEIGHT; -pub const MINIMAL_BUNDLE_SPILL_WEIGHT: u32 = BUNDLE_MAX_SPILL_WEIGHT - 1; -pub const BUNDLE_MAX_NORMAL_SPILL_WEIGHT: u32 = BUNDLE_MAX_SPILL_WEIGHT - 2; +pub const MINIMAL_LIMITED_BUNDLE_SPILL_WEIGHT: u32 = BUNDLE_MAX_SPILL_WEIGHT - 1; +pub const MINIMAL_BUNDLE_SPILL_WEIGHT: u32 = MINIMAL_LIMITED_BUNDLE_SPILL_WEIGHT - 256; +pub const BUNDLE_MAX_NORMAL_SPILL_WEIGHT: u32 = MINIMAL_BUNDLE_SPILL_WEIGHT - 1; impl LiveBundle { #[inline(always)] diff --git a/src/ion/process.rs b/src/ion/process.rs index 8c5a3d0a..a3cbc05a 100644 --- a/src/ion/process.rs +++ b/src/ion/process.rs @@ -21,6 +21,7 @@ use crate::{ ion::data_structures::{ CodeRange, Use, BUNDLE_MAX_NORMAL_SPILL_WEIGHT, MAX_SPLITS_PER_SPILLSET, MINIMAL_BUNDLE_SPILL_WEIGHT, MINIMAL_FIXED_BUNDLE_SPILL_WEIGHT, + MINIMAL_LIMITED_BUNDLE_SPILL_WEIGHT, }, Allocation, Function, Inst, InstPosition, OperandConstraint, OperandKind, PReg, ProgPoint, RegAllocError, @@ -325,6 +326,9 @@ impl<'a, F: Function> Env<'a, F> { if fixed { trace!(" -> fixed and minimal"); MINIMAL_FIXED_BUNDLE_SPILL_WEIGHT + } else if let Some(limit) = self.ctx.bundles[bundle].limit { + trace!(" -> limited({limit}) and minimal"); + MINIMAL_LIMITED_BUNDLE_SPILL_WEIGHT - u32::from(limit) } else { trace!(" -> non-fixed and minimal"); MINIMAL_BUNDLE_SPILL_WEIGHT