Enum regalloc::AnalysisError [−][src]
pub enum AnalysisError {
CriticalEdge {
from: BlockIx,
to: BlockIx,
},
EntryLiveinValues(Vec<Reg>),
IllegalRealReg(RealReg),
UnreachableBlocks,
ImplementationLimitsExceeded,
LsraCriticalEdge {
block: BlockIx,
inst: InstIx,
},
}Variants
A critical edge from “from” to “to” has been found, and should have been removed by the caller in the first place.
Some values in the entry block are live in to the function, but are not declared as such.
IllegalRealReg(RealReg)The incoming code has an explicit or implicit mention (use, def or mod)
of a real register, which either (1) isn’t listed in the universe at
all, or (2) is one of the suggested_scratch registers in the universe.
(1) isn’t allowed because the client must mention all real registers
in the universe. (2) isn’t allowed because the client promises to us
that the suggested_scratch registers really are completely unused in
the incoming code, so that the allocator can use them at literally any
point it wants.
Tuple Fields of IllegalRealReg
0: RealRegAt least one block is dead.
Implementation limits exceeded. The incoming function is too big. It may contain at most 1 million basic blocks and 16 million instructions.
Linear scan requires that if a block ends with a control flow instruction that has at least one register mention (use, mod or def), then the successor blocks must have a single predecessor.
In practice, this means that users should consider associated edges to be “critical” and split them (and maybe remove dead blocks afterwards).
For details, see the comment in linear_scan::analysis generating this error.
Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for AnalysisError
impl Send for AnalysisError
impl Sync for AnalysisError
impl Unpin for AnalysisError
impl UnwindSafe for AnalysisError
Blanket Implementations
Mutably borrows from an owned value. Read more