| 541 | #[derive(Debug, Clone, Copy)] |
| 542 | #[cfg_attr(feature = "serde", derive(serde::Serialize))] |
| 543 | pub struct IndirectRemat<'a> { |
| 544 | /// Constraint required for the rematerialization destination. |
| 545 | /// |
| 546 | /// If this is [`OperandConstraint::Reuse`], then the index refers to a |
| 547 | /// scalar [`OperandKind::Use`] entry in [`IndirectRemat::inputs`]. |
| 548 | pub constraint: OperandConstraint, |
| 549 | |
| 550 | /// Operands read by the rematerialization instruction. |
| 551 | /// |
| 552 | /// Input operands must be [`OperandKind::Use`], [`OperandKind::UseGroup`] |
| 553 | /// or [`OperandKind::NonAllocatable`], and otherwise follow the normal |
| 554 | /// rules for operands. |
| 555 | pub inputs: &'a [Operand], |
| 556 | |
| 557 | /// Whether the destination allocation may overlap with any input |
| 558 | /// allocation, except for overlaps explicitly requested with |
| 559 | /// [`OperandConstraint::Reuse`]. |
| 560 | pub allow_destination_overlap: bool, |
| 561 | } |
| 562 | |
| 563 | /// Type of terminator instruction at the end of a basic block. |
| 564 | #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] |
nothing calls this directly
no outgoing calls
no test coverage detected