Module Instruction::InstructionSanity

Predicates

ambiguousSuccessors

Holds if there are multiple (n) edges of kind kind from source, where target is among the targets of those edges.

backEdgeCountMismatch

Holds if the number of back edges differs between the Instruction graph and the IRBlock graph.

containsLoopOfForwardEdges

Holds if f contains a loop in which no edge is a back edge.

duplicateOperand

Holds if instruction instr has multiple operands with tag tag.

instructionWithoutSuccessor

Holds if an instruction, other than ExitFunction, has no successors.

instructionWithoutUniqueBlock

Holds if instruction instr is not in exactly one block.

lostReachability

Holds if block is reachable from its function entry point but would not be reachable by traversing only forward edges. This check is skipped for functions containing goto statements as the property does not generally hold there.

missingOperand

Holds if instruction instr is missing an expected operand with tag tag.

missingOperandType
missingPhiOperand

Holds if Phi instruction instr is missing an operand corresponding to the predecessor block pred.

operandAcrossFunctions

Holds if operand operand consumes a value that was defined in a different function.

unexpectedOperand

Holds if instruction instr has an unexpected operand with tag tag.

unexplainedLoop

Holds if instr in f is part of a loop even though the AST of f contains no element that can cause loops.

unnecessaryPhiInstruction

Holds if a Phi instruction is present in a block with fewer than two predecessors.

useNotDominatedByDefinition

Holds if useOperand has a definition that does not dominate the use.