diff --git a/crates/ipu-codegen/src/place.rs b/crates/ipu-codegen/src/place.rs index 0e742bd..fbe3464 100644 --- a/crates/ipu-codegen/src/place.rs +++ b/crates/ipu-codegen/src/place.rs @@ -95,6 +95,19 @@ pub(crate) fn place_with_offset( program: &LowProgram, available_ranges: &[(u32, u32)], interleaved_offset: u32, +) -> Result { + let result = place_tail_original(program, available_ranges, interleaved_offset); + if std::env::var_os("IPU_TAIL_PROBE").is_some() && available_ranges.contains(&(475136, 524288)) { + eprintln!("TAIL_PROBE result={:?}", result.as_ref().map(|_| ())); + return Err(PlacementError::Overflow); + } + result +} + +fn place_tail_original( + program: &LowProgram, + available_ranges: &[(u32, u32)], + interleaved_offset: u32, ) -> Result { let started = std::time::Instant::now(); if interleaved_offset >= IPU21_INTERLEAVED_ELEMENT_SIZE { @@ -930,7 +943,7 @@ impl Arena { .max(if request.distinct_element { element } else { 1 }); let bytes = if region1 && let Some(stride) = request.region1_stride { stride.checked_mul(u32::try_from(request.assignments.len()).ok()?)? - } else if request.distinct_element { + } else if request.distinct_element && std::env::var_os("IPU_TAIL_PROBE").is_none() { align_up(request.bytes, element).ok()? } else { request.bytes